jian
jian

Reputation: 4824

JDBC ilike query java

JDBC successfully connected to PostgreSQL. But some ilike query still have problems. only 1 code is working. I want the first and the third one to working properly.

--------------- not working

String ilikequery = "SELECT * FROM emp where ? iLIKE '%C%' ";
PreparedStatement ilikestatement = Main.connection.prepareStatement(ilikequery);
ilikestatement.setString(1,"name");
ResultSet resultSet = ilikestatement.executeQuery();

-------------- this one working,

String queryname = "Cowen";
 String query = "select * from emp where name = ?";
PreparedStatement  statement = Main.connection.prepareStatement(query);
 statement.setString(1,queryname);
ResultSet resultSet = statement.executeQuery();

------------this one not working.

String ilikequerywithparameter = "SELECT * FROM emp" + " where name iLIKE '%"+"?"+"%' ";
PreparedStatement ilikestatementpara = Main.connection.prepareStatement(ilikequerywithparameter);
 ilikestatementpara.setString(1,"c");
 ResultSet resultSet = ilikestatementpara.executeQuery();

The last code snippet have Exception error.Exception in thread "main" org.postgresql.util.PSQLException: The column index is out of range: 1, number of columns:

-------- this one is working.

String simpleilikequery = "SELECT * FROM emp" + " WHERE name iLIKE '%C%'";
PreparedStatement simpleilikestatement = Main.connection.prepareStatement(simpleilikequery);
ResultSet resultSet = simpleilikestatement.executeQuery();

Upvotes: 0

Views: 1173

Answers (1)

user330315
user330315

Reputation:

You need to pass the wildcards as part of the parameter, not the prepared statement:

String sql = "SELECT * FROM emp where name iLIKE ?";
PreparedStatement stmt = Main.connection.prepareStatement(ilikequerywithparameter);
stmt.setString(1,"%c%");

Or alternatively use concat() in the SQL string if you don't want to (or can't) modify the parameter itself.

String sql = "SELECT * FROM emp where name iLIKE concat('%', ?, '%')";
PreparedStatement stmt = Main.connection.prepareStatement(ilikequerywithparameter);
stmt.setString(1,"c");

Upvotes: 1

Related Questions