Я пытаюсь выполнить 2-й раз 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;
}