捕获截断错误

时间:2011-05-11 14:09:17

标签: java database

我有一个带嵌入式数据库的小应用程序。有时在尝试插入超出相应数据库列的最大大小的varchars时会出现截断错误。

我希望在插入/更新之前检测到这一点并向用户显示正确的消息。

现在我认为实现这一目标有两种可能性。

  1. 通过DatabaseMetaData对象获取感兴趣列的最大长度。您可以通过使用Singletons或类似结构来降低性能缺失。

  2. 在Java代码中保留最大长度(例如:在ResourceBundleProperties文件中)并检查这些值。下行当然是Java代码和数据库必须同步。这很容易出错。

  3. 最好的方法是什么?

3 个答案:

答案 0 :(得分:1)

唯一不需要维护的答案是在数据库连接时获取感兴趣列的最大长度。

如果使用Integer.valueOf(...),则可以将其存储在一个对象中,较低的值(根据当前的JVM规范)无论如何都会返回到单个池。这将卸载大量内存性能问题,因为所有列最终都会引用您在数据库中可能具有的少数唯一值。

另外,在DatabaseMetaData中挖掘,我会寻找任何标志,指示在大于数据插入时将截断列。它可以提供切换以了解您的代码是否需要。

通过将值放在属性文件中,可以轻松检测问题,但代价是可能导致它们不同步。这些技术实际上是快速实施,前期成本很低,但它们会产生潜在的问题。问题是否会被提出将是未知的,但如果有足够的时间,甚至会遇到远程可能性。

答案 1 :(得分:0)

两种方法的结合。在应用程序构建期间,您使用DatabaseMetaData动态创建资源包。

答案 2 :(得分:0)

一种解决方案是使用CLOB。我不知道你对这个领域有什么其他要求。

此外,使用您在java代码中作为常量的最小最大字符值。这处理它必须同步或依赖数据库,无论如何它或多或少是任意的。用户不关心最大尺寸是什么,他们只需要知道最大尺寸是什么,或者防止自动产生错误。