2017-09-05 119 views
0

我的表中有一个包含unsigned integer值的外键列。我想为此列添加一个新值,但我不知道java如何处理这个unsigned值,因为java没有原生的无符号值。以无符号整数使用Java Prepared Statement的正确方法

如果我做的:

preparedStatement.setInt(2, myInt); 

将在数据库转换这个signed int它自动的unsigned价值?或者它会抛出一个错误,说这些是不兼容的类型?我应该站出来,用long,如:

preparedStatement.setLong(2, myLong); 

还是将抛出一个异常为好,因为数据库没有使用BIGINT

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

+3

您是否尝试实施两种方法并查看会发生什么? :) – dazito

+0

我曾考虑过这个问题,但我先试着谷歌搜索,但没有发现任何内容,所以我认为如果这个答案被正确记录,将会为未来人节省时间,这将会更加有用。 – mFeinstein

+1

@mFeinstein我同意这一点!不建立一个问题并回答它是不被禁止的。因此,您可以尝试并创建与测试相匹配的问题;-)(如果失败,则创建一个问题,询问原因和答案,因为它不支持示例和源代码,如果没有其他帖子可以找到的话。 ..) – AxelH

回答

2

也许MySQL的行为以某种方式和SQL Server在另一

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

所以,在评论这个问题的建议,为MySQL(或任何其他特定的JDBC驱动程序),你最好的选择将是

  1. 看看JDBC规范本身定义所需的行为(不太可能) ,
  2. 检查您的JDBC驱动程序文档以获取最终答案,或者
  3. 测试您的所需配置以查看它的行为是否适合您的需求。
+0

看到了,这就是为什么我想要一个专家意见......现在我学到的东西并不像我想的那么简单,如果我自己测试了这个,我可以得出结论,测试行为永远是真的,即使在未来我使用的其他数据库中......现在我知道每次都必须小心 – mFeinstein

相关问题