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的数据类型为NUMBERsqljdbc/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函数字符串的第一个参数]