List list = null; try { if (con == null || !con.isClosed()) { con = getConnection(); } stmt = con.createStatement(); rs = stmt.executeQuery(sql); if (rs != null) { list = new ArrayList(); while (rs.next()) { ArrayList temp = new ArrayList(); System.out.println((String)rs.getObject(1)); System.out.println((String)rs.getObject(2)); System.out.println((String)rs.getObject(3)); System.out.println((Boolean)rs.getObject(4)); System.out.println((Integer)rs.getObject(5)); System.out.println((String)rs.getObject(6)); System.out.println((String)rs.getObject(7)); System.out.println(rs.getObject(8)); System.out.println((Integer)rs.getObject(9)); for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) { temp.add(rs.getObject(i)); } list.add(temp); } } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println(e.getMessage().toString()); return null; } finally { closed(); 测试数据获取正常,但是一进入for循环第一次执行temp.add(rs.getObject(i))则抛出异常 java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]无效的描述符索引
不要读取两次吧.改一下看看:if (rs != null) { list = new ArrayList(); int count = rs.getMetaData().getColumnCount(); while (rs.next()) { ArrayList temp = new ArrayList(); for (int i = 1; i <= count; i++) { temp.add(rs.getObject(i)); } list.add(temp); } }
然后看trace.
try {
if (con == null || !con.isClosed()) {
con = getConnection();
}
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
if (rs != null) {
list = new ArrayList();
while (rs.next()) {
ArrayList temp = new ArrayList();
System.out.println((String)rs.getObject(1));
System.out.println((String)rs.getObject(2));
System.out.println((String)rs.getObject(3));
System.out.println((Boolean)rs.getObject(4));
System.out.println((Integer)rs.getObject(5));
System.out.println((String)rs.getObject(6));
System.out.println((String)rs.getObject(7));
System.out.println(rs.getObject(8));
System.out.println((Integer)rs.getObject(9));
for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
temp.add(rs.getObject(i));
}
list.add(temp);
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println(e.getMessage().toString());
return null;
} finally {
closed();
测试数据获取正常,但是一进入for循环第一次执行temp.add(rs.getObject(i))则抛出异常 java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]无效的描述符索引
list = new ArrayList();
int count = rs.getMetaData().getColumnCount();
while (rs.next()) {
ArrayList temp = new ArrayList();
for (int i = 1; i <= count; i++) {
temp.add(rs.getObject(i));
}
list.add(temp);
}
}
登陆密码错误时,rs应该为空,但是却执行了
if (rs != null) {
list = new ArrayList();
将list初始化为Arraylist,返回list不为null导致后续代码异常