Oracle: ORA-00911: 无效字符
Oracle: ORA-00911: invalid character
在我的代码中有以下查询字符串:
private static final String QUERY = format(
" SELECT t2.address " +
" FROM schema.table1 t1 ," +
" schema.table2 t2 ," +
" schema.table3 t3 ,"+
" schema.table4 t4 " +
" WHERE t2.uniqueIdentifier =:%s " +
" AND t1.parent_id = t2.parent_alias " +
" AND t3.company_id = t1.company_id " +
" AND t3.record_age = t2.recordAge " +
" AND t2.name = 'stubName' " +
" AND t4.pln_foi_id = t2.recordAge ",uniqueIdentifier);
在本机查询中调用如下:
public String getAddress(String uniqueIdentifier){
String result = null;
try {
Query query = persistence.entityManager().createNativeQuery(QUERY);
query.setParameter("uniqueIdentifier", uniqueIdentifier);
result = query.getSingleResult();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
当我测试这个查询时,我得到以下信息:
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
Caused by: java.sql.SQLSyntaxErrorException: ORA-00911: invalid character
什么可能导致此错误?我在我的查询字符串或代码中看不到任何可能导致它的问题。
查询应该是
...
" WHERE t2.uniqueIdentifier = :uniqueIdentifier "
...
并删除对 String.format()
的调用;根据第一个 uniqueIdentifier
变量的值,您将受到 SQL 注入或 setParameter()
不起作用。
说明:当您有带参数的本机查询时,您需要在查询中使用 :
(冒号)前缀指定参数名称。要使用参数 foo
,请将 :foo
放入查询中并调用 setParameter("foo", value);
以指定应使用哪个值代替参数。
在我的代码中有以下查询字符串:
private static final String QUERY = format(
" SELECT t2.address " +
" FROM schema.table1 t1 ," +
" schema.table2 t2 ," +
" schema.table3 t3 ,"+
" schema.table4 t4 " +
" WHERE t2.uniqueIdentifier =:%s " +
" AND t1.parent_id = t2.parent_alias " +
" AND t3.company_id = t1.company_id " +
" AND t3.record_age = t2.recordAge " +
" AND t2.name = 'stubName' " +
" AND t4.pln_foi_id = t2.recordAge ",uniqueIdentifier);
在本机查询中调用如下:
public String getAddress(String uniqueIdentifier){
String result = null;
try {
Query query = persistence.entityManager().createNativeQuery(QUERY);
query.setParameter("uniqueIdentifier", uniqueIdentifier);
result = query.getSingleResult();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
当我测试这个查询时,我得到以下信息:
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
Caused by: java.sql.SQLSyntaxErrorException: ORA-00911: invalid character
什么可能导致此错误?我在我的查询字符串或代码中看不到任何可能导致它的问题。
查询应该是
...
" WHERE t2.uniqueIdentifier = :uniqueIdentifier "
...
并删除对 String.format()
的调用;根据第一个 uniqueIdentifier
变量的值,您将受到 SQL 注入或 setParameter()
不起作用。
说明:当您有带参数的本机查询时,您需要在查询中使用 :
(冒号)前缀指定参数名称。要使用参数 foo
,请将 :foo
放入查询中并调用 setParameter("foo", value);
以指定应使用哪个值代替参数。