emu*_*ahy 0 java sql oracle prepared-statement
我正在使用Java预处理语句从Oracle数据库获取数据.由于某些性能问题,查询使用"虚拟列"作为索引.
查询如下所示:
String status = "processed";
String customerId = 123;
String query = "SELECT DISTINCT trans_id FROM trans WHERE status = " + status + " AND FN_GET_CUST_ID(trans.trans_id) = " + customerId;
Connection conn = getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = conn.prepareStatement(query);
ps.execute();
...
} catch (...)
Run Code Online (Sandbox Code Playgroud)
这不起作用.将该函数作为where子句的一部分会导致SQLException.我知道CallableStatement,并知道我可以先使用它然后连接结果.但是,此表使用FN_GET_CUST_ID(trans_id)作为其索引的一部分.有没有办法使用带有数据库函数的预准备语句作为查询参数?
永远不要将SQL的参数连接到String中.始终使用占位符(?)和setXxx(column, value);.
如果您在自己喜欢的数据库工具中运行SQL,则会得到相同的错误.问题是Oracle出于某种原因无法使用该功能.你得到什么错误代码?
| 归档时间: |
|
| 查看次数: |
5127 次 |
| 最近记录: |