Commons DBUtils Oracle 11g准备好的声明

时间:2016-01-24 19:34:19

标签: java oracle oracle11g apache-commons-dbutils

我正在使用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绑定存在一些问题,这有什么用呢?

3 个答案:

答案 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语句添加新约束时,我们发现了此错误。仅使用一个参数,查询就可以正常工作,但是如果查询参数超过一个(?),查询将失败。