【问题标题】:Correct way to use Java Prepared Statement with Unsigned Integer将 Java Prepared Statement 与 Unsigned Integer 一起使用的正确方法
【发布时间】:2017-09-05 09:12:08
【问题描述】:

我的表中有一个外键列,其中包含一个unsigned integer 值。我想在此列中添加一个新值,但我不知道 java 将如何处理这个 unsigned 值,因为 java 没有本机无符号值。

如果我这样做:

preparedStatement.setInt(2, myInt);

数据库会自动将此signed int 转换为unsigned 值吗?或者它会抛出一个错误,说这些是不兼容的类型?我应该加强并使用long 之类的:

preparedStatement.setLong(2, myLong);

或者这也会引发异常,因为数据库没有使用BIGINT

我正在使用 MySQL,我只是想避免将来随着表记录的增长而出现意外。

【问题讨论】:

  • 你有没有尝试实现这两种方法,看看会发生什么? :)
  • 我想过,但我先尝试用谷歌搜索,但没有找到任何关于此的内容,所以我认为如果正确记录此答案会更有用,可以节省未来的人时间。
  • @mFeinstein 我同意这一点!不禁止创建问题并回答问题。因此,您可以尝试创建与测试匹配的问题;-)(如果失败,请创建一个询问原因并回答的问题,因为它不支持示例和源代码,当然如果找不到其他帖子。 ..)
  • 好吧,我可以创建问题、测试它并回答它,但这是一个在我设置测试的方式上碰巧对我有用的一个案例......我不是专家在这方面,也许有一些陷阱需要避免,也许 MySQL 以一种方式运行而 SQL Server 以另一种方式运行,我不知道,这就是我来这里的原因,所以专家可以向我展示我肯定会错过的所有细节。

标签: java mysql jdbc prepared-statement unsigned-integer


【解决方案1】:

也许 MySQL 以一种方式运行而 SQL Server 以另一种方式运行

撇开 SQL Server 没有无符号整数这一事实不谈,您的直觉是正确的,有符号⇄ 无符号行为很可能取决于所使用的特定 JDBC 驱动程序的实现。因此,您寻求的一般答案确实“过于宽泛”,因为它可能需要描述所有数据库支持无符号整数列的 JDBC 驱动程序的特定于实现的细节。

因此,正如问题中的 cmets 所建议的,您最好的选择是使用 MySQL(或任何其他特定的 JDBC 驱动程序)

  1. 查看 JDBC 规范本身是否定义了所需的行为(不太可能),
  2. 查看您的 JDBC 驱动程序文档以获得明确的答案,或者
  3. 测试您想要的配置,看看它的行为方式是否符合您的需求。

【讨论】:

  • 看,这就是我想要专家意见的原因......现在我了解到事情并不像我想象的那么简单,如果我自己测试,我可以得出结论,测试行为将永远正确在我将来使用的其他数据库上......现在我知道我每次都必须小心
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
  • 2011-10-05
  • 2015-03-18
相关资源
最近更新 更多