请查看我的以下查询,
select nvl(max(transaction_id),0) as transaction_id from exception_details;
如果我通过我的jdbc代码执行上述查询,它会给我java.sql.SQLException: Fail to convert to internal representation
我的JDBC代码如下:
public int fetchColumnVal(String query) throws SQLException, IllegalAccessException,
InvocationTargetException, NoSuchMethodException, ClassNotFoundException, InstantiationException {
PreparedStatement pstmt = null;
Connection con = null;
try {
con = getConnection(true);
pstmt = con.prepareStatement(query);
ResultSet rs = pstmt.executeQuery();
rs.next();
int count=rs.getInt(1);
return count;
} finally {
if (isBatchMode) {
this.cleanResources(null, pstmt);
}
else {
this.cleanResources(con, pstmt);
}
}
}
并且表中的transaction_id列的数据类型为NUMBER
答案 0 :(得分:1)
如果使用@Enumerated而没有定义EnumType.STRING,即 @Enumerated(EnumType.STRING) 并且您的表已经包含String数据(Varchar),您将收到此错误,cos。 默认EnumType是ORDINAL,即EnumType.ORDINAL。
答案 1 :(得分:0)
SQL JDBC / Java setXXX getXXX
NUMERIC java.math.BigDecimal setBigDecimal getBigDecimal
更改rs.getInt(1);到rs.getBigDecimal(1);
(或)在sql中输入强制转换为sql中的整数,如下所示:oracle:
CAST(id AS integer)
答案 2 :(得分:0)
我想建议一种更传统的ResultSet计数检查方法。 最初我尝试使用:
while (RS.next()) {
RScount = RS.getInt(1);
Set.add(RS.getString(1));
}
但是由于我的SQL结果集是String,Java继续抛出:
java.sql.SQLException: Fail to convert to internal representation
然后我将代码改为普通香草: 声明,初始化为0:
Integer RScount = 0; //SQL result set counter
并将反码代码:
while (RS.next()) {
RScount++;
Set.add(RS.getString(1));
}
答案 3 :(得分:0)
我收到的错误就像
异常Foundjava.sql.SQLException:无法转换为内部表示。
我的代码编写为:
while(res.next())
System.out.println( res.getInt(1) + " "
+ res.getString(2) + " "
+ res.getString(3) + " "
+ res.getString(4));
但我在DB中的第一个字段的数据类型是varchar类型。
然后我将代码更改为:
while(res.next())
System.out.println( res.getString(1) + " "
+ res.getString(2) + " "
+ res.getString(3) + " "
+ res.getString(4));
然后我得到了所有数据。