java - 准备好的语句 - 使用函数作为 where 子句的一部分

标签 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 (...)

这不起作用。将函数作为 where 子句的一部分会导致 SQLException。我知道 CallableStatement,并且知道我可以先使用它,然后连接结果。但是,该表使用 FN_GET_CUST_ID(trans_id) 作为其索引的一部分。有没有办法使用带有数据库函数的准备好的语句作为查询参数?

最佳答案

  1. 切勿将 SQL 参数连接到字符串中。始终使用占位符 (?) 和 setXxx(column, value);

  2. 如果您在您最喜欢的数据库工具中运行 SQL,您将收到相同的错误。问题是Oracle 由于某种原因无法使用该函数。您收到什么错误代码?

关于java - 准备好的语句 - 使用函数作为 where 子句的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1520209/

相关文章:

java - 如何解析 XML 标签中的换行符?

MySQL WHERE IN 查询 - ORDER BY MATCH

mysql - 如何为MySQL数据库表中的每个id选择最近一年的数据?

Java JNI : Passing multibyte characters from java to c

java - 是否可以在 C# 或 JAVA 中开发一些基于字符串的搜索条件?

java - 使用jaxb将xml解析为java对象时接收错误

Mysql 查询使用 Rails 返回数组?

.net - 尝试加载 Oracle 客户端库引发 BadImageFormatException

oracle - 如何同步多台机器插入一行?

oracle - 我的光标中导致无效光标 01001 的逻辑原因可能是什么