尝试在来自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中读到,您必须将db2_zos.DbDriverType
从2更改为4,但我认为这与我无关,因为我不使用IBM。
谷歌没有发现任何其他有用的东西。我希望知道错误的真正原因,并找到一个比强迫所有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;
发布于 2022-09-15 03:01:43
因为SQL执行有注释;请参考正式文档https://www.ibm.com/support/pages/apar/PH14323。
也试着像这样写
<sql>
select MY_COLUMN from MY_TABLE where OTHER_COLUMN = ?
</sql>
https://stackoverflow.com/questions/33274889
复制相似问题