DB2 SqlException:没有令牌传递的SQL(错误代码-4462)

时间:2015-10-22 06:46:38

标签: java db2 prepared-statement

尝试对来自XML文件的查询使用prepareStatement

<sql><![CDATA[
  select MY_COLUMN from MY_TABLE where OTHER_COLUMN = ? 
]]>
</sql>

但我得到了这个例外:

com.ibm.db2.jcc.am.SqlException: [jcc][t4][10234][10927][3.59.81] SQL passed with no tokens. ERRORCODE=-4462, SQLSTATE=null
        at com.ibm.db2.jcc.am.dd.a(dd.java:660)
        at com.ibm.db2.jcc.am.dd.a(dd.java:60)
        at com.ibm.db2.jcc.am.dd.a(dd.java:120)
        at com.ibm.db2.jcc.am.jb.v(jb.java:7334)
        at com.ibm.db2.jcc.am.jb.a(jb.java:2124)
        at com.ibm.db2.jcc.am.jb.prepareStatement(jb.java:754)

我读到这是因为SQL不在一行中。这是原因吗?

我还读到,在IBM Portal中,您必须将db2_zos.DbDriverType从2更改为4.但我认为这与我无关,因为我不使用IBM Portal。

Google没有其他任何有用的信息。我很想知道错误的真正原因,并找到一个比将所有SQL强制转换为单行更容易的修复。

代码:

ArrayList arrList = new ArrayList();

String sSQL = queryManager.getSQL("QRY001");

Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
  conn = getConnection(); //a connection pool wrapper for java.sql.DriverManager.getConnection(...)
  ps = conn.prepareStatement(sSQL); // **** EXCEPTION OCCURS HERE

  ps.setInt(1, Integer.parseInt(otherColumn));
  rs = ps.executeQuery();
  while (rs.next())
  {
    arrList.add(rs.getString(1));
  }
} catch (Exception e) {
  e.printStackTrace();
  throw new OEException(e);
} finally {
  try {
    if (rs != null) {
      rs.close();
    }
    if (ps != null) {
      ps.close();
    }
    releaseConnection(conn);
  } catch (Exception e) {
    throw new CustomException(e);
  }
}
return arrList;

0 个答案:

没有答案