0

我正在使用带有 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而不是? 绑定参数,但没有任何反应。有任何想法吗?

4

2 回答 2

0

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

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

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

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

于 2019-11-05T15:09:46.720 回答
0

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

String query = "SELECT * FROM \"PEOPLE\"  WHERE \"GRUPPO\" = ? AND \"LANG\" = ?"
于 2019-11-19T11:46:44.977 回答