【问题标题】:Commons DBUtils Oracle 11.2.0.4 with Java 1.7 Binding parameters SQLException ORA-00942Commons DBUtils Oracle 11.2.0.4 与 Java 1.7 绑定参数 SQLException ORA-00942
【发布时间】:2020-03-01 18:33:46
【问题描述】:

我正在使用带有 ojdbc6.jar 的 Oracle Database 11.2.0.4,我正在使用带有 JDK 7 的 apache commons dbutils v1.7。所以我在这个函数中使用了 QueryRunner 及其方法

private <T> List<T> executeQueryAndReturnBeanList(String query, Class<T> className, Object... param) throws SQLException {

     Connection connection = getDBConnectionInstance();

     DbUtils.loadDriver("oracle.jdbc.driver.OracleDriver");

     ResultSetHandler<List<T>> beanListHandler = new BeanListHandler<>(className,new BasicRowProcessor(new GenerousBeanProcessor()));

     QueryRunner runner = new QueryRunner();

     List<T> list = runner.query(connection, query, beanListHandler, param);

     return list;
}

没有绑定参数的选择查询一切正常

SELECT * FROM PEOPLE WHERE GRUPPO = 1 AND LANG = 'en_US'

但是当我执行这个查询时

String query = "SELECT * FROM PEOPLE WHERE GRUPPO = ? AND LANG = ?";

它给了我这个 SQL 异常

java.sql.SQLException: ORA-00942: table or view does not exist
 Query: SELECT * FROM PEOPLE WHERE GRUPPO = ? AND LANG = ? Parameters: [1, en_US]
        at org.apache.commons.dbutils.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:527)
        at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:391)
        at org.apache.commons.dbutils.QueryRunner.query(QueryRunner.java:252)
        at mypackage.executeQueryAndReturnBeanList(JDBCFunctions.java:199)

我真的不知道为什么。我尝试使用 :P1, :P2:1, :2 而不是 ? 来绑定参数,但没有任何反应。有什么想法吗?

【问题讨论】:

标签: java oracle oracle11g java-7 apache-commons-dbutils


【解决方案1】:

我终于找到了解决办法。我在每个列和表的名称上都插入了 ",现在它可以工作了。例如:

String query = "SELECT * FROM \"PEOPLE\"  WHERE \"GRUPPO\" = ? AND \"LANG\" = ?"

【讨论】:

    【解决方案2】:

    组是保留字,不能用作列名或表名。很可能您在表中有一个带引号的列名,例如 "GROUP"

    所以,需要查询为 SELECT * FROM PEOPLE WHERE "GROUP" = 1 AND LANG = 'en_US'

    带引号的表名应该区分大小写,与不带引号的表不同。

    以上是基本错误,而错误(ORA-00942) 表明您的应用程序连接到与成功测试查询的架构不同的架构。

    【讨论】:

    • 对不起,出于隐私考虑,我在这里更改了列名。真实姓名不是GROUP。我更新了我的请求
    • 这个select user from dual 从应用程序中得到了什么?是否包含在您的连接字符串中作为用户名? @Orifedex
    猜你喜欢
    • 2016-08-21
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    相关资源
    最近更新 更多