gpt4 book ai didi

java - 关闭连接后第二次调用PreparedStatement不起作用

转载 作者:行者123 更新时间:2023-12-02 00:37:17 24 4
gpt4 key购买 nike

我正在尝试第二次执行 PreparedStatement,但如果我关闭 DriverManager.getConnection,则会失败

代码:

public void getRates(String id) throws Exception, DBException {

Connection conn = null;
ResultSet rs = null;

try {

conn = getConnection();

if (ratesQueryStmt == null){
ratesQueryStmt = conn.prepareStatement(ratesQuery);
}
ratesQueryStmt.setString(1, id);

ratesQueryStmt.setQueryTimeout(m_nTimeout);

rs = ratesQueryStmt.executeQuery();

while (rs.next()){
System.out.println("!!!\n\nDATE = " + rs.getString("RATE_DAY") + " PURCHASE_PRICE = " + rs.getString("PURCHASE_PRICE") + " SELLING_PRICE = " + rs.getString("SELLING_PRICE"));
}

}
catch (SQLException e) {
Utility.trace(m_session, "SQL exception - code: "+String.valueOf(e.getErrorCode())+" "+e.getMessage());
throw e;
}
finally {
DBAccess.closeEverything(rs, ratesQueryStmt, conn); //DO NOT WORK BECAUSE OF CLOSING CONNECTION (conn)
}

所以第一次它工作得很好,但是当我尝试调用这个方法两次时它显示错误:(

        DBAccess.getInstance(mySession).getRates("USD"); //WORKS
DBAccess.getInstance(mySession).getRates("EUR"); // NOT WORKING

错误堆栈

java.lang.NullPointerException
at oracle.jdbc.dbaccess.DBDataSetImpl._createOrGetDBItem(DBDataSetImpl.java:825)
at oracle.jdbc.dbaccess.DBDataSetImpl.setBytesBindItem(DBDataSetImpl.java:2520)
at oracle.jdbc.driver.OraclePreparedStatement.setItem(OraclePreparedStatement.java:1248)
at oracle.jdbc.driver.OraclePreparedStatement.setString(OraclePreparedStatement.java:1690)
at asteros.DBAccess.getRates(DBAccess.java:141) //ratesQueryStmt.setString(1, id);

如果我不关闭连接,一切正常..

谢谢!

UPD: getConnection() 的来源

public Connection getConnection() throws Exception {
Connection conn = null;
try {

Utility.trace(m_session, "DB string: "+m_strDBString+" user: "+m_strUser+" password: "+m_strPassword);
System.out.println("DB string: "+m_strDBString+" user: "+m_strUser+" password: "+m_strPassword);

Driver dr = new oracle.jdbc.driver.OracleDriver();
DriverManager.registerDriver(dr);
conn = DriverManager.getConnection(m_strDBString, m_strUser, m_strPassword);

} catch (Exception e) {
throw new Exception(e);
}

return conn;
}

最佳答案

PreparedStatement据我所知,实例与用于准备它们的连接相关联。关闭连接后,您将无法使用 PreparedStatement,即使您稍后打开另一个连接也是如此。

关于java - 关闭连接后第二次调用PreparedStatement不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7430858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com