java - 如何在带有变量的 PreparedStatement 中使用 SQL 通配符

标签 java sql oracle prepared-statement

在我的网站上,我需要使用最终用户提供的值执行通配符查询。最佳实践是主要使用 PreparedStatement 来避免 SQL 注入(inject)。我的查询很长,所以这是一个例子:

String query = "SELECT ... FROM ... WHERE ..."+ //
"AND UPPER(CUST_NAME) LIKE UPPER('%?%')";
PreparedStatement pstmt = conn.prepareStatement(query);
stmt.setString(1, "joe");

问题是 setString() 抛出异常:SQL 异常:列索引无效

最佳答案

您可以使用 concat 运算符来代替

like upper('%' || ? || '%')

稍微更具可读性。

关于java - 如何在带有变量的 PreparedStatement 中使用 SQL 通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7198461/

相关文章:

java - 如何重新挂载/sdcard目录以在模拟器上读/写?

SQL Server 2014 Express 设置

android - 如何在 Xamarin.Forms 中监控应用用户的在线状态

sql - 从 SQL Server 中的列派生序列

python - 写入 Oracle : TypeError: expecting string or bytes object

php - 在 Oracle 中选择 column_names 时的列顺序

java - 有没有办法在调用泛型/参数化方法时强制提供类型参数?

java - 访问循环外的 while 循环创建的数组

sql - Oracle SQL 中的自定义顺序

java - outputStream 关​​闭会导致其他 Streams 阻塞吗?