【发布时间】:2019-07-26 16:55:13
【问题描述】:
我是 Java 服务器端编程的初学者,我编写了一个示例程序,它从数据库表中获取记录并在控制台上打印它们。因此,我在数据库中创建了一个包含 3 列类型 INT、VARCHAR 和 FLOAT 的表,并在其中输入了一些数据。在 JDBC 代码中,前两种类型的数据已成功获取,即 getInt(col) 和 getString(col),但 getFloat(col) 没有返回任何内容,即使表中存在数据。我已经仔细检查了数据库中的类型,但没有任何帮助。
如果我尝试单独编写 getFloat(col) 方法(即不在循环中),它工作得非常好。
while(rs.next()) { //"rs" is the ResultSet object
for(int i=1; i<=noc; i++) { // "noc" is rs.getColumnCount()
switch(rsmd.getColumnType(i)) { // "rsmd" is the ResultSetMetaData object
case Types.VARCHAR :
System.out.print(rs.getString(i));
break;
case Types.INTEGER :
System.out.print(rs.getInt(i));
break;
case Types.FLOAT :
System.out.print(rs.getFloat(i));
break;
}
System.out.println();
}
}
/*
If I write like below, it works fine
rs.next();
System.out.println(rs.getFloat(3));
but it doesn't work as in the above code
*/
我希望输出是一个完整的记录表,但我得到的是一个缺少“FLOAT”类型列数据的表。我不明白我做错了什么。
【问题讨论】:
-
并且您确定该列是
FLOAT,或者更准确地说,getColumnType真的返回FLOAT?而不是NUMERIC左右......无论如何,将default添加到至少带有错误消息、日志记录或抛出异常的开关也不错...... -
是的,我确定是因为我创建了包含 INT、VARCHAR 和 FLOAT 列的表。
-
我没有问你是如何创建表的,我问的是
getColumnType的返回值 - 驱动程序可能正在将数据库 FLOAT 映射到一些不同的类型(“*getColumnType真的返回 FLOAT *"(假设i==3不工作,getFloat(3)应该没有理由工作而getFloat(i)不工作) -
@HarshaBharadwaz,证明给自己看。添加
println以查看列类型是什么。例如,在 Oracle(我知道这不是您的数据库)中,使用INTEGER列创建的表实际上只是NUMBER的一个特例,并且将在数据字典中显示为NUMBER。如果你的结果是NUMBER的某种风格,请注意某些数字类型最终在 Java 中被处理为BigDecimal。 -
是的,我现在明白了,它实际上是一个真实的类型。谢谢。