我对数据库进行了查询,结果是通过java.sql.ResultSet
获得的,因为此查询是动态的,返回的列数可以是5或7,在过去,使用相同的代码,它生成了一个“column not found exception”,并包含在以下捕获中:
try{
sTemp = this.rsResults.getString("col3");
}catch(Exception e){}
但现在使用相同的try-and-catch(唯一的区别是现在我使用的是
combopooldatasource
和它们的连接),我得到两个不属于catch的异常。我怎样才能改善这一点,有没有更好的方法来检查列是否存在?
c3p0是否必须基于a
(SQLState: S0022) column not found error
强制测试连接?Error n1 - in the com.mchange.v2.c3p0.impl.NewProxyResultSet.getString qlUtils.toSQLException() - Attempted to convert SQLException to SQLException. Leaving it alone. [SQLState: S0022; errorCode: 0]
java.sql.SQLException: Column 'col3' not found.
Error n2 - DefaultConnectionTester.statusOnException() - Testing a Connection in response to an Exception:
java.sql.SQLException: Column 'col3' not found.
ps:使用的驱动程序相同
org.gjt.mm.mysql.Driver
最佳答案
检查ResultSetMetaData
ResultSet rs = stmt.executeQuery("SELECT * FROM your_table");
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
// test the number of columns returned
if (numberOfColumns == 5) {
//
} else {
// numberOfColumns = 7
}
// or, test the column names
if ("col3".equals(rsmd.getColumnName(3)) {
// col3 exists
}
编辑:
如果您不想对源代码进行修改,只想让您当前的方法也能与
c3p0
一起工作,那么只需捕获Throwable。(这确实让我不寒而栗:)try {
sTemp = this.rsResults.getString("col3");
} catch (Throwable t) {
// Both, Exceptions and Errors are ignored now
}
关于java - 结果集“未找到列”与c3p0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17196790/