java - JDBC类似查询java
问题描述
JDBC 成功连接到 PostgreSQL。但是一些 ilike 查询仍然有问题。只有 1 个代码有效。我希望第一个和第三个能够正常工作。
--------------- 不工作
String ilikequery = "SELECT * FROM emp where ? iLIKE '%C%' ";
PreparedStatement ilikestatement = Main.connection.prepareStatement(ilikequery);
ilikestatement.setString(1,"name");
ResultSet resultSet = ilikestatement.executeQuery();
-------------- 这个工作,
String queryname = "Cowen";
String query = "select * from emp where name = ?";
PreparedStatement statement = Main.connection.prepareStatement(query);
statement.setString(1,queryname);
ResultSet resultSet = statement.executeQuery();
------------这个不工作。
String ilikequerywithparameter = "SELECT * FROM emp" + " where name iLIKE '%"+"?"+"%' ";
PreparedStatement ilikestatementpara = Main.connection.prepareStatement(ilikequerywithparameter);
ilikestatementpara.setString(1,"c");
ResultSet resultSet = ilikestatementpara.executeQuery();
最后一个代码段有异常错误。Exception in thread "main" org.postgresql.util.PSQLException: The column index is out of range: 1, number of columns:
-------- 这个正在工作。
String simpleilikequery = "SELECT * FROM emp" + " WHERE name iLIKE '%C%'";
PreparedStatement simpleilikestatement = Main.connection.prepareStatement(simpleilikequery);
ResultSet resultSet = simpleilikestatement.executeQuery();
解决方案
您需要将通配符作为参数的一部分传递,而不是准备好的语句:
String sql = "SELECT * FROM emp where name iLIKE ?";
PreparedStatement stmt = Main.connection.prepareStatement(ilikequerywithparameter);
stmt.setString(1,"%c%");
或者concat()
,如果您不想(或不能)修改参数本身,也可以在 SQL 字符串中使用。
String sql = "SELECT * FROM emp where name iLIKE concat('%', ?, '%')";
PreparedStatement stmt = Main.connection.prepareStatement(ilikequerywithparameter);
stmt.setString(1,"c");
推荐阅读
- deep-learning - RNN 中的梯度累积
- angular - 如何在 Angular Frontent 构建后更改后端 IP,并使用 nginx 托管?
- android - 匹配父宽度属性在 recyclerView 中不起作用
- django - 我可以在 def 函数中使用 django 文件值吗?
- python - 从字典列表中删除重复键,仅保留值最大的键值
- python - 在 anaconda 虚拟环境和激活/停用/删除的使用之间切换
- passwords - Java 11 HttpClient - 缺少表单参数:grant_type
- java - 无法配置数据源:未使用 Spring Boot 指定“url”属性
- c# - 位运算符 AND & 位移
- flutter - 在 PWA 颤振项目中获取用户位置