Java 你能告诉我为什么我得到“不能使用在PreparedStatement上接受查询字符串的查询方法”吗?
我不断遇到错误,无法使用在PreparedStatement上获取查询字符串的查询方法。尝试调试以下代码时&SQL选择查询。Postgres9.4,JDK1.8也许我是盲人,这是一种简单的类型,但我需要一些帮助 我的控制台输出: 从qbirt.person中选择rowid、firstname、lastname、prefname、email1、email2、email3、类型、状态、preflang、mbrappid、设备ID、mbrstatus、mbrtype、mbrcat、pr_phonevoice,其中pr_sms=47 ORDER BY lastupdt DESC E R R O R 主电话FKey上的JDBC准备Stmt错误。。。 电话:47 SQLException:无法使用在PreparedStatement上获取查询字符串的查询方法。 SQLState:42809 供应商错误:0 org.postgresql.util.psqleException:无法使用在PreparedStatement上获取查询字符串的查询方法。 在org.postgresql.jdbc.PgPreparedStatement.executeQueryPgPreparedStatement.java:102 at solutions.demand.qbirt.Person.findMemberPerson.java:762` 代码部分:Java 你能告诉我为什么我得到“不能使用在PreparedStatement上接受查询字符串的查询方法”吗?,java,postgresql,prepared-statement,Java,Postgresql,Prepared Statement,我不断遇到错误,无法使用在PreparedStatement上获取查询字符串的查询方法。尝试调试以下代码时&SQL选择查询。Postgres9.4,JDK1.8也许我是盲人,这是一种简单的类型,但我需要一些帮助 我的控制台输出: 从qbirt.person中选择rowid、firstname、lastname、prefname、email1、email2、email3、类型、状态、preflang、mbrappid、设备ID、mbrstatus、mbrtype、mbrcat、pr_phonevo
if (!foundMbr && foundPhoneID > 0) {
if (QbirtUtils.verbose) {
System.out.println("Querying Person by FK ID for phones: " + foundPhoneID + "\n");
}
if (mode.equals(pMode.SMS)) {
qry = "SELECT rowid, firstname, lastname, prefname, email1, email2, email3, type, "
+ "status, preflang, mbrappid, deviceid, mbrstatus, mbrtype, mbrcat, pr_phonevoice "
+ "FROM qbirt.person "
+ "WHERE pr_sms = ? "
+ "ORDER BY lastupdt DESC;";
} else {
if (mode.equals(pMode.VOICE)) {
qry = "SELECT rowid, firstname, lastname, prefname, email1, email2, email3, type, "
+ "status, preflang, mbrappid, deviceid, mbrstatus, mbrtype, mbrcat, pr_phonevoice "
+ "FROM qbirt.person "
+ "WHERE pr_phonevoice = ? "
+ "ORDER BY lastupdt DESC;";
} else {
if (mode.equals(pMode.PHONE)) {
qry = "SELECT DISTINCT ON (rowid) rowid, firstname, lastname, prefname, email1, email2, email3, type, "
+ "status, preflang, mbrappid, deviceid, mbrstatus, mbrtype, mbrcat, pr_phonevoice "
+ "FROM qbirt.person "
+ "WHERE (pr_sms = ? OR pr_phonevoice = ?) "
+ "ORDER BY lastupdt DESC, rowid DESC;";
}
}
}
try {
PreparedStatement pStmt = conn.prepareStatement(qry);
pStmt.setInt(1, foundPhoneID);
if (mode.equals(pMode.PHONE)) {
pStmt.setInt(2, foundPhoneID);
}
System.out.println(pStmt.toString());
ResultSet rs = pStmt.executeQuery(qry); <-------
我已确认字段包含以下值:
foundMbr=false,foundPhoneID=47,mode=SMS,该qry=从qbirt.person中选择rowid、firstname、lastname、prefname、email1、email2、email3、type、status、preflang、mbrappid、deviceid、mbrstatus、mbrtype、mbrcat、pr_phonevoice,其中pr_SMS=?由lastupdt DESC;订购
我在以下行中得到错误:ResultSet rs=pStmt.executeQueryqry
正如您在控制台中看到的,我甚至确认pStmt具有正确的绑定,因为我打印了它。-也就是说,它似乎错过了结尾“;”。不知道为什么,因为我可以在qry字符串中看到它。我想这只是准备工作中的一个怪癖
我还将这个SQL复制到pgAdmin III中,并成功地手动执行它。尽管如此,我还是不得不加上“;”。我在许多其他领域使用了几乎相同的代码,没有问题
可能是缺少的“;”吗?
也许是某种类型的不匹配?foundPhoneID是一个整数,rowid是一个串行/整数,pr_sms是一个整数FKey
是否可能是定义qry字符串的if语句块
蒂亚 试着做:
pStmt.executeQuery()
而不是
pStmt.executeQuery(qry)
正如这篇该死的文章中所讨论的。谢谢很抱歉被骗了!