public ResultSet validatePayments() {
ConnectionPool connPool = null;
Connection dbConn = null;
Connection dbUpdatConn = null;
CallableStatement callableStatement = null;
PreparedStatement psmt = null;
ResultSet rs = null;
CachedRowSetImpl crs = null;
Statement stmt = null;
List<UpdatePaymentResult> upr = new ArrayList<UpdatePaymentResult>();
String sqlStatement = "{call myschema.mypkg.sp_get_new_payments(?)}";
String updateSql = "UPDATE temp SET stats= ? ,THREAD = ? WHERE P_NUM = ? ";
try {
Logger.log(Logger.DEBUG, "SQL=" + sqlStatement,
"Creating Connection ....");
connPool = ConnectionPool.getConnectionPool();
dbConn = connPool.getConnection();
callableStatement = dbConn.prepareCall(sqlStatement,
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
callableStatement.registerOutParameter(1, OracleTypes.CURSOR);
callableStatement.executeQuery();
rs = (ResultSet) callableStatement.getObject(1);
crs = new CachedRowSetImpl();
crs.populate(rs);
dbUpdatConn = connPool.getConnection();
psmt = dbUpdatConn.prepareStatement(updateSql);
Logger.log(Logger.DEBUG, "SQL=" + "",
"prepared statement started.... ");
while (rs.next()) {
Logger.log(Logger.DEBUG, "SQL=" + "",
"inside loop started.... ");
UpdatePaymentResult up = new UpdatePaymentResult();
up.setPaymentReqNum(rs.getString("P_NUM"));
upr.add(up);
for (UpdatePaymentResult updatePaymentResult : upr) {
psmt.setString(1, processing);
psmt.setString(2, "my payment thread");
psmt.setString(3, updatePaymentResult.getPaymentReqNum());
psmt.executeUpdate();
}
}
Logger.log(Logger.DEBUG, "SQL=" + "",
"prepared statement started.... ");
} catch (Exception e) {
Logger.log(Logger.RECEIVER, "Error while getting Payment record "
+ e, "selectNew :");
} finally {
try {
if (rs != null)
rs.close();
if (callableStatement != null)
callableStatement.close();
if (psmt != null)
psmt.close();
if (connPool != null && dbConn != null) {
dbConn.setAutoCommit(true);
connPool.returnConnection(dbConn);
}
} catch (SQLException e) {
Logger.log(Logger.Debug,
"Error whilst getting Payment record" + e, "hello");
}
}
return crs;
}
Привет,Как выбрать и обновить набор результатов?
Я пытаюсь выбрать список значений из БД и передаст результат к другому классу. В то же время я хотел бы принять номер платежа и обновить статус до «обработки». Как только я передаю результирующий набор другому методу, он обновит статус до «обработанного». я сохранил некоторые регистраторы внутри цикла, и у нас также есть таблица аудита. Я не могу видеть статус обработки. Можете ли вы просить кого-то помочь, какую ошибку я делаю.
ResultSet не должен оставаться открытым и проходить мимо. Скопируйте ResultSet в список объектов Payment. Верните объекты списка платежей. Ваш метод validatePayments делает слишком много вещей. Разбейте свой метод на многие более мелкие методы. –
Что случилось с вашим текущим кодом? –
его устаревший код, если я изменяю подпись метода вызова, мне нужно внести такие изменения во множество мест. вызывающий метод ожидает результатов. – user3647134