第一次在java中用jdbc连接oracle数据库,连接通了,但是一个简单的sql查询,却报告“无效的列索引”。
开始,我以为是oracle里的表索引没有设置。于是,我给要查询的表添加了索引。但是,还是报同样的错。
记得,前段时间,我用jsp中用jdbc连接过oracle数据库,sql查询查出来过记录。只是当时用的数据表不同。于是,我又试着用与jsp中同样的代码,同样的数据表再测了一次。结果,还是不行。
没办法,只得请教一位公司里的java高手,让她帮忙看一下。原来,是我取字段的时候,字段序号写错了。高手就是高手,一看就看出来了。
错误代码如下:
……
resultset rs = null;
try {
……
if (rs.first()) {
string col = rs.getstring(0);// 错误代码处
}
}
}
……
完整的正确代码如下:
// 省略数据库连接部分
string sqlquery = "select * from users";
preparedstatement ps = null;
resultset rs = null;
try {
ps = conn.preparestatement(sqlquery,
resultset.type_scroll_insensitive,
resultset.concur_read_only);
rs = ps.executequery();
if (rs.first()) {
string col = rs.getstring(1);// 修改后的正确代码
}
}
} catch (sqlexception se) {
throw se;
} catch (exception ex) {
throw ex;
} finally {
if (rs != null)
rs.close();
if (ps != null)
ps.close();
}
从上面的代码可以看出,resultset类型的getstring(int index)方法,是以1开始的。我用的是0,所以出错了。
vb中数字以1开关,java同c++一样,数字一般以0开始。而像这样突然在java里面出现以1开始的情况,确实很难想到。因此,虽然只是一字之错,但我还是把它写了下来。