java.sql.SQLException:无法转换为内部表示异常

时间:2013-12-23 12:09:54

标签: java sql oracle jdbc

请查看我的以下查询,

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

4 个答案:

答案 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));

然后我得到了所有数据。