我正在使用oracle数据库11g第2版,我使用apache commons dbutils v1.6,使用JDK 8和tomcat 8.0.30。所以我使用QueryRunner及其方法,如果我只是像我这样在文本中连接变量,一切正常
query.query ("select * from table where field = '"+value+"'", rsh);
最近我一直在尝试使用预处理语句以正确的方式进行查询,但是每次使用查询方法绑定参数都无济于事
query.query ("select ESTREC,LOTE,FECREC from prueba.RECAUDO_ENC where NITREC = ? and ESTREC = ? ORDER BY FECREC DESC", rsh, new Object[]{"1234","PG"});
我因为没有明显的原因而得到这个错误
java.sql.SQLException: ORA-00942: table or view does not exist
Query: select ESTREC,LOTE,FECREC from prueba.RECAUDO_ENC where NITREC = ? and ESTREC = ? ORDER BY FECREC DESC; Parameters: [1234, PG]
我100%确定该表存在,并且用户对该表具有权限,如果我执行相同的查询连接查询中的params它运行得很好,所以我正在寻找这种行为背后的原因,是吗使用方法有什么不对? 我也读过某些地方,使用带有oracle的dbutils进行BLOB绑定存在一些问题,这有什么用呢?
答案 0 :(得分:1)
oracle的正确查询语法是:
C++ 11
答案 1 :(得分:0)
我和你的错误一样。
我认为你必须小心jdbc驱动程序的版本。 就我而言,我解决了为我改变正确的jdbc驱动程序的问题。
我误用了jdbc驱动程序。 我猜你有一个12或更高版本的jdbc驱动程序。 首先在MANIFEST.MF中检查jdbc驱动程序的版本。 它有以下几行
....
Implementation-Version: 11.2.0.4.0
....
否则,你应该为你准备另一个。
祝你好运答案 2 :(得分:0)
这个错误几乎使我们发疯。我们不了解该解决方案为何有效,但事实如此。只需用双引号括住SQL语句中的所有列即可:
String sqlStr = "SELECT \"ESTREC\",\"LOTE\",\"FECREC\" " +
"FROM prueba.RECAUDO_ENC " +
"WHERE \"NITREC\" = ? and \"ESTREC\" = ?" +
"ORDER BY \"FECREC\" DESC"
query.query(sqlStr, rsh, new Object[]{"1234","PG"});
有趣的是,当我们向SELECT语句添加新约束时,我们发现了此错误。仅使用一个参数,查询就可以正常工作,但是如果查询参数超过一个(?),查询将失败。