我得到了错过的正确的paranthesis错误。如果我删除围绕iterator.next()语句的注释,它的工作正常。无法弄清楚什么是错的。我通过的数据中没有“(”)。
String ORACLE_SUM_QUERY = "select item_number, sum(system_quantity) from ITEMS " +
"where sndate = ? and item_id in" +
" (select item_id from ap.system_items where org_id = 4 " +
" and segment1 in ";
......
while (iterator.hasNext()) {
//iterator.next();
String oracleQuery = String.format(ORACLE_SUM_QUERY + "(%s)) GROUP BY item_number", iterator.next());
preparedStat = connection.prepareStatement(oracleQuery);
preparedStat.setDate(1, getSnDate());
答案 0 :(得分:1)
该错误似乎表明您在oracleQuery
中构建的SQL语句的括号数不正确。在将SQL语句传递给prepareStatement
调用之前将其打印出来以使调试更容易,这可能会有所帮助。
我的猜测是iterator.next()
返回的字符串不是您所期望的。
答案 1 :(得分:1)
尝试将代码重写为
String ORACLE_SUM_QUERY = "select item_number, sum(system_quantity) from ITEMS " +
"where sndate = ? and item_id in" +
" (select item_id from ap.system_items where org_id = 4 " +
" and segment1 in (";
......
while (iterator.hasNext())
{
ORACLE_SUM_QUERY = ORACLE_SUM_QUERY + String.format("%s", iterator.next());
if(iterator.hasNext())
ORACLE_SUM_QUERY = ORACLE_SUM_QUERY + ",";
}
ORACLE_SUM_QUERY = ORACLE_SUM_QUERY + ")) GROUP BY item_number";
preparedStat = connection.prepareStatement(ORACLE_SUM_QUERY);
preparedStat.setDate(1, getSnDate());
这可能无法完全达到我无法测试的程度,但它可能会让你更接近。
分享并享受。