Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.sql.SQLException:无法转换为内部表示异常_Java_Sql_Oracle_Jdbc - Fatal编程技术网

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

java.sql.SQLException:无法转换为内部表示异常,java,sql,oracle,jdbc,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,

请找到我下面的查询

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);
        }
    }
}

表中列事务id的数据类型为NUMBER

sqljdbc/Java setXXX getXXX

数值java.math.BigDecimal setBigDecimal getBigDecimal

更改rs.getInt(1);至rs.getBigDecimal(1)

(或)在sql中键入cast number to integer,如下所示:


强制转换(id为整数)

我想建议一种更传统的结果集计数检查方法。 最初,我尝试使用:

       while (RS.next()) {
            RScount = RS.getInt(1);
            Set.add(RS.getString(1));
        }
但由于我的SQL结果集是字符串,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));
    }

我犯了这样的错误

异常查找java.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));

然后我得到了我所有的数据。

如果使用@Enumerated而不定义EnumType.STRING,即 @枚举(EnumType.STRING) 并且您的表已经包含字符串数据(Varchar),您将得到这个错误,cos。
默认EnumType为ORDINAL,即EnumType.ORDINAL。

尝试使用getBigDecimal或getLong而不是getInt。我尝试使用getBigDecimal()时仍然会出现相同的错误,查询的输出为0,因此我是否仍应尝试使用getLong()呢您可以发布完整的错误跟踪吗?错误表明您正在选择一个
varchar2
;您是否可以再次检查
事务\u id
是否实际定义为
编号
(我知道您已经说过了,但仍然…),并且这实际上是导致错误的查询?在执行
query
以验证正在运行的内容之前,您能否至少记录/显示该值?(无论如何也不可能是这样的-后面的分号会导致错误)。您好,根据您上面的解决方案,我尝试在代码中实现相同的方法,如bigdecim count=rs.getbigdecime(1);但它仍然给了我相同的例外,您可以在select查询中将列强制转换为整数,并保留代码rs.getInt(1);如果您可以检查nvl函数的语法,请参阅下面oracle的链接:从exception_details中选择cast(nvl(max(transaction_id),0)作为整数)作为transaction_id;[还要检查它期望的nvl函数字符串的第一个参数]