使用带无符号整数的Java预处理语句的正确方法
我的表中有一个外键列,其中包含一个使用带无符号整数的Java预处理语句的正确方法,java,mysql,jdbc,prepared-statement,unsigned-integer,Java,Mysql,Jdbc,Prepared Statement,Unsigned Integer,我的表中有一个外键列,其中包含一个无符号整数值。我想在此列中添加一个新值,但我不知道java将如何处理此无符号值,因为java没有本机无符号值 如果我这样做: preparedStatement.setInt(2, myInt); 数据库是否会自动将此signed int转换为其unsigned值?或者它会抛出一个错误,说这些是不兼容的类型?我是否应该站起来使用long,比如: preparedStatement.setLong(2, myLong); 或者这也会引发异常,因为数据库没有使用
无符号整数
值。我想在此列中添加一个新值,但我不知道java将如何处理此无符号值,因为java没有本机无符号值
如果我这样做:
preparedStatement.setInt(2, myInt);
数据库是否会自动将此signed int
转换为其unsigned
值?或者它会抛出一个错误,说这些是不兼容的类型?我是否应该站起来使用long
,比如:
preparedStatement.setLong(2, myLong);
或者这也会引发异常,因为数据库没有使用BIGINT
我正在使用MySQL,我只是想避免将来随着表记录的增长而出现意外
也许MySQL的行为方式和SQL Server的行为方式不同
撇开SQL Server没有无符号整数这一事实不谈,您的直觉是正确的⇄ 未签名行为很可能取决于所使用的特定JDBC驱动程序的实现。因此,您寻求的一般答案实际上“过于宽泛”,因为它可能需要描述其数据库支持无符号整数列的所有JDBC驱动程序的特定于实现的详细信息
因此,正如在对问题的评论中所建议的,MySQL(或任何其他特定JDBC驱动程序)的最佳选择是
查看JDBC规范本身是否定义了所需的行为(不太可能)
查看JDBC驱动程序文档以获得最终答案,或者
测试您想要的配置,看看它的行为是否符合您的需要
也许MySQL的行为方式和SQL Server的行为方式不同
撇开SQL Server没有无符号整数这一事实不谈,您的直觉是正确的⇄ 未签名行为很可能取决于所使用的特定JDBC驱动程序的实现。因此,您寻求的一般答案实际上“过于宽泛”,因为它可能需要描述其数据库支持无符号整数列的所有JDBC驱动程序的特定于实现的详细信息
因此,正如在对问题的评论中所建议的,MySQL(或任何其他特定JDBC驱动程序)的最佳选择是
查看JDBC规范本身是否定义了所需的行为(不太可能)
查看JDBC驱动程序文档以获得最终答案,或者
测试您想要的配置,看看它的行为是否符合您的需要
您是否尝试过实现这两种方法并看到了结果?:)我想了一下,但我先用谷歌搜索了一下,但没有找到任何相关信息,所以我认为如果这个答案有适当的文档记录,会更有用,这样可以节省未来人们的时间。@mFeinstein我同意这一点!不禁止创建问题并回答它。因此,您可以尝试创建与测试匹配的问题;-)(如果失败,创建一个问题,询问原因并回答,因为它不支持示例和来源,当然,如果找不到其他帖子的话…)好吧,我可以创建问题,测试它,然后回答它,但这是一个在我设置测试的方式上碰巧对我起作用的一个案例场景。。。我不是这方面的专家,可能有一些陷阱需要避免,可能MySQL的行为方式是一种,SQL Server的行为方式是另一种,我不知道,这就是我来这里的原因,所以专家可以向我展示我肯定会错过的所有细节。可能重复的是,您是否尝试实现这两种方法并看到了发生的情况?:)我想了一下,但我先用谷歌搜索了一下,但没有找到任何相关信息,所以我认为如果这个答案有适当的文档记录,会更有用,这样可以节省未来人们的时间。@mFeinstein我同意这一点!不禁止创建问题并回答它。因此,您可以尝试创建与测试匹配的问题;-)(如果失败,创建一个问题,询问原因并回答,因为它不支持示例和来源,当然,如果找不到其他帖子的话…)好吧,我可以创建问题,测试它,然后回答它,但这是一个在我设置测试的方式上碰巧对我起作用的一个案例场景。。。我不是这方面的专家,可能有一些陷阱需要避免,可能MySQL的行为方式是一种,SQL Server的行为方式是另一种,我不知道,这就是我来这里的原因,所以专家可以向我展示我肯定会错过的所有细节。See的可能重复,这就是我想要专家意见的原因。。。现在我了解到事情并不像我想的那么简单,如果我自己测试这个,我可以得出结论,测试行为将永远是正确的,即使在我将来使用的其他数据库上。。。现在我知道我每次都要小心,这就是为什么我需要专家的意见。。。现在我了解到事情并不像我想的那么简单,如果我自己测试这个,我可以得出结论,测试行为将永远是正确的,即使在我将来使用的其他数据库上。。。现在我知道我每次都要小心