我有一个对数据库的查询,结果是通过 java.sql.ResultSet
获得的,因为这个查询是动态的,过去返回的列数可能是 5 或 7使用相同的代码,它会生成一个“找不到列的异常”,并包含在以下捕获中:
try{
sTemp = this.rsResults.getString("col3");
}catch(Exception e){}
但现在使用相同的 try 和 catch(唯一的区别是现在我正在使用 combopooldatasource
和它们的连接),我得到两个不属于 catch 的异常。
我该如何改进,是否有更好的方法来检查列是否存在?
c3p0 是否必须根据 (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
最佳答案
c3p0 在内部测试连接的任何类型的异常,但来自此测试的异常不会被抛出或对客户端代码不可见。您看到它只是因为您在 DEBUG 级别记录 c3p0 输出。 c3p0 的东西应该记录在 INFO 以供正常使用。如果您以 DEBUG-ish 级别登录,您将看到各种警告消息和堆栈跟踪。
关于java - 结果集 "column not found"与 c3p0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17196790/