Usando o caractere curinga “like” na instrução preparada

Eu estou usando instruções preparadas para executar consultas de database mysql. E eu quero implementar uma funcionalidade de pesquisa baseada em uma palavra-chave de tipos.

Para isso eu preciso usar a palavra-chave LIKE , isso eu sei. E eu também usei instruções preparadas antes, mas eu não sei como usá-lo com o LIKE porque do seguinte código onde eu adicionaria a 'keyword%' ?

Posso usá-lo diretamente no pstmt.setString(1, notes) como (1, notes+"%") ou algo parecido. Eu vejo um monte de posts sobre isso na web, mas nenhuma boa resposta em qualquer lugar.

 PreparedStatement pstmt = con.prepareStatement( "SELECT * FROM analysis WHERE notes like ?"); pstmt.setString(1, notes); ResultSet rs = pstmt.executeQuery(); 

   

Você precisa configurá-lo no próprio valor, não na string SQL da instrução preparada.

Então, isso deve ser feito para uma correspondência de prefixo:

 notes = notes .replace("!", "!!") .replace("%", "!%") .replace("_", "!_") .replace("[", "!["); PreparedStatement pstmt = con.prepareStatement( "SELECT * FROM analysis WHERE notes LIKE ? ESCAPE '!'"); pstmt.setString(1, notes + "%"); 

ou um sufixo-correspondência:

 pstmt.setString(1, "%" + notes); 

ou um jogo global:

 pstmt.setString(1, "%" + notes + "%"); 

Codifique-o assim:

 PreparedStatement pstmt = con.prepareStatement( "SELECT * FROM analysis WHERE notes like ?"); pstmt.setString(1, notes + "%");` 

Certifique-se de não include as aspas como abaixo, pois elas causarão uma exceção.

 pstmt.setString(1,"'%"+ notes + "%'"); 
 PreparedStatement ps = cn.prepareStatement("Select * from Users where User_FirstName LIKE ?"); ps.setString(1, name + '%'); 

Tente isso.

 String fname = "Sam\u0025"; PreparedStatement ps= conn.prepareStatement("SELECT * FROM Users WHERE User_FirstName LIKE ? "); ps.setString(1, fname);