java JDBC将mysql数据库中的整数转换为长整数

vatpfxk5  于 2022-12-25  发布在  Java
关注(0)|答案(2)|浏览(170)

我有一个SQL表,其中存储了一个具有主键(我称之为id)的对象。我有一个方法,用于从SQL表中收集列值并创建所述对象(DB中的每一行对应于java中的一个对象)。
例如,

ArrayList<Object> objectList = new ArrayList<Object>();
Connection connection = createNewConnectionToDatabse();
PreparedStatement statement = connection.prepareStatement("SELECT * FROM objects;");
ResultSet rs = statement.executeQuery();
while(rs.next()){
     Object obj = new Obj(rs.getInt(1)); // rs.getInt(1) should return the integer id for the column...
     objectList.add(obj);
}

return objectList;

在过去的几个小时里,这一切都很顺利,但是由于某种原因,几分钟前,java开始将列id的结果作为long而不是int来处理。现在,我不断收到一个错误,即我无法将int转换为long,但在它将列id作为int返回之前。为什么JDBC不将SQL数据库中的int作为int返回?
我也试着把long转换成int,但是1)这仍然不能解释为什么代码以前工作得很好,现在它停止工作了,2)诚实地转换并不能解决这里的根本问题。
任何帮助都将不胜感激。谢谢。

kmb7vmvb

kmb7vmvb1#

所以我意识到问题在于我使用的是Integer类(我需要访问空值),因此rs.getInt()不能满足我的问题,因为rs.getInt()在检测到空值时将抛出空指针异常(我的数据库将会有),所以我使用(Integer) rs.getObject(1)来获取表的第一列中的id值。由于某种原因,当rs.getObject(1)在数据库中检测到一个数字值时,它返回了一个Long而不是一个int。解决方案碰巧是我们rs.getObject(1, Integer.class),这完全解决了这个问题,并允许我继续使用null和整数。

lc8prwob

lc8prwob2#

getObject(int)返回的值的类型由SQL列类型和JDBC驱动程序确定。对于MySQL,位于6.5 Java, JDBC, and MySQL Types的Connector/J 8.x文档指出INTEGER UNSIGNEDBIGINT 1Map到Long
MySQL的BIGINT实际上是一个64位有符号整数,所以这是有意义的。

相关问题