Здравствуйте, уважаемые участники форума! у меня следующий вопрос - есть много prepared statements, они используют один Id , но обращаются к разным таблицам и разным полям.Можно ли как нибудь собрать их в одно prepared statement? Вот код: Код | try {
cConn = ConnectionPool.newQueryConnection();
// получаем набор Id, который в последствии будем использовать во всех prepared statements
sSql = "select id from ABCDE where unit_id =" + unitId + " and deleted = 0"; Vector vIds = DBTableCols.getResultOfSimpleQueryAsVector(sSql, null);
for (int i = 0; i < vIds.size(); ++i) { String ugunId = vIds.get(i).toString();
// а вот prepared statement , которое хотелось бы сократить.....
sbStmt.append("select COUNT(*) cnt,"); sbStmt.append(" 'ABCD1' tb FROM table1 WHERE ugun_id=? "); sbStmt.append(unionAll);
sbStmt.append("select COUNT(*) cnt,"); sbStmt.append(" 'ABCD2' tb FROM table2 WHERE ugun_id=? "); sbStmt.append(unionAll);
sbStmt.append("select COUNT(*) cnt,"); sbStmt.append(" 'ABCD3' tb FROM table3 WHERE ugun_id=? "); sbStmt.append(unionAll);
sbStmt.append("select COUNT(*) cnt,"); sbStmt.append(" 'ABCD4' tb FROM table4 WHERE ugun_id=? "); sbStmt.append(unionAll);
sbStmt.append("select COUNT(*) cnt,"); sbStmt.append(" 'ABCD5' tb FROM table5 WHERE ugun_id=? "); sbStmt.append(unionAll);
sbStmt.append("select COUNT(*) cnt,"); sbStmt.append(" 'ABCD6' tb FROM table6 WHERE ugun_id=? "); sbStmt.append(unionAll);
sbStmt.append("select COUNT(*) cnt,"); sbStmt.append(" 'ABCD7' tb FROM table7 WHERE ugun_id=? "); sbStmt.append(unionAll);
sbStmt.append("select COUNT(*) cnt,"); sbStmt.append(" 'ABCD8' tb FROM table8 WHERE ugun_id=? "); sbStmt.append(unionAll);
sbStmt.append("select COUNT(*) cnt,"); sbStmt.append(" 'ABCD9' tb FROM table9 WHERE ugun_id=? "); sbStmt.append(unionAll);
sbStmt.append("select COUNT(*) cnt,"); sbStmt.append(" 'ABCD10' tb FROM table10 WHERE ugun_id=? "); sbStmt.append(unionAll);
sbStmt.append("select COUNT(*) cnt,"); sbStmt.append(" 'ABCD11' tb FROM table11 WHERE ugun_id=? ");
psStmt = cConn.prepareStatement(sbStmt.toString());
for(int j=1;j<12; ++j){ psStmt.setInt(j,Integer.valueOf(ugunId)); }
rs = psStmt.executeQuery();
while (rs.next()) { int value = Integer.parseInt(rs.getString("cnt"));
if (value != 0) {
allowedToDelete = false; break;
}
}
}
if(!allowedToDelete){ break; }
}
}
|
спасибо за ответы Это сообщение отредактировал(а) maxxi - 24.6.2013, 22:37
|