首页 > 解决方案 > 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();

标签: javapostgresqljdbc

解决方案


您需要将通配符作为参数的一部分传递,而不是准备好的语句:

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");

推荐阅读