楼主断点下,看着像是 ResultSet rs = stmt.executeQuery(sql); 这一行出的错。 检查下sql select col.column_name from user_constraints con, user_cons_columns col where con.constraint_name=col.constraint_name and con.constraint_type='P' and col.table_name='TTT_TEST'看是否sql语句有问题,将sql语句直接拿到oracle客户端去执行下,看能否出结果 看错误,像是表名写错的样子
刚将这个sql语句放到自己的环境中试了一下,没有问题。在oracle客户端和java代码中都可以拿到主键。 下面的是通过java代码获取的结果值oracle.jdbc.driver.T4CConnection@47ad40 select col.column_name from user_constraints con, user_cons_columns col where con.constraint_name=col.constraint_name and con.constraint_type='P' and col.table_name='MM_PUB_OFFER' OFFER_ID
问下,你用的是oracle的哪个版本?
select * from v$version; Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production PL/SQL Release 11.2.0.3.0 - Production TNS for Linux: Version 11.2.0.3.0 - Production NLSRTL Version 11.2.0.3.0 - Productionoracle 11.2.0.3.0 我这边使用while (rs.next()) { String primaryKey = rs.getString(1); System.out.println(primaryKey); }也可以正常输出的,没有任何问题
检查下sql
select col.column_name
from user_constraints con, user_cons_columns col
where con.constraint_name=col.constraint_name
and con.constraint_type='P'
and col.table_name='TTT_TEST'看是否sql语句有问题,将sql语句直接拿到oracle客户端去执行下,看能否出结果
看错误,像是表名写错的样子
我把SQL语句直接在客户端执行,有结果的。表名就是ttt_test。我输出rs.toString(),也是有一串字符的。
建议将代码改写为 while (rs.next()) {
String primaryKey = rs.getString(1);
System.out.println(primaryKey);
}debug 看是哪行报的错误
不修改的话,可以执行,但是String primaryKey = rs.getString(1); 这一行报错?ResultSet rs = stmt.executeQuery(sql);
rs.last(); // 将光标移动到最后一行
int rowCount = rs.getRow(); // 得到当前行号,即结果集记录数
System.out.println(rowCount); 看看结果集有多少条记录
是ResultSet rs = stmt.executeQuery(sql); 这一行没有执行吗?
如果想要完成上述操作,要在生成Statement对象时加入如下两个参数:ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);这样rs.last();就可以成功执行
参考 对只转发结果集的无效操作: last
和 对只转发结果集的无效操作: last--这样的错误 然后再执行,获取到结果集的记录数看看
结果为0,并且有结果集已耗尽的异常。
但是我把代码换成MYSQL不是oracle就可以正常执行?
顺便问一下,楼主的这个sql语句主要想做什么事情,想实现什么呢?
下面的是通过java代码获取的结果值oracle.jdbc.driver.T4CConnection@47ad40
select col.column_name from user_constraints con, user_cons_columns col where con.constraint_name=col.constraint_name and con.constraint_type='P' and col.table_name='MM_PUB_OFFER'
OFFER_ID
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Productionoracle 11.2.0.3.0 我这边使用while (rs.next()) {
String primaryKey = rs.getString(1);
System.out.println(primaryKey);
}也可以正常输出的,没有任何问题