我正在使用带有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 GROUP = 1 AND LANG = 'en_US'
但是当我执行此查询时
String query = "SELECT * FROM PEOPLE WHERE GROUP = ? AND LANG = ?";
它给了我这个SQL异常
或:1,:2而不是?绑定参数,但没有任何反应。有什么想法吗?java.sql.SQLException: ORA-00942: table or view does not exist Query: SELECT * FROM PEOPLE WHERE GROUP = ? 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
我正在使用带有ojdbc6.jar的Oracle Database 11.2.0.4,并且在JDK 7中使用了apache commons dbutils v1.7,因此在此函数private中使用了QueryRunner及其方法private
组是保留字,不能用作列名或表名。您很可能在表中使用带引号的列名,例如"GROUP"
。
因此,需要查询为SELECT * FROM PEOPLE WHERE "GROUP" = 1 AND LANG = 'en_US'