[java] 준비된 명령문에서 “like”와일드 카드 사용

mysql 데이터베이스 쿼리를 실행하기 위해 준비된 명령문을 사용하고 있습니다. 그리고 나는 일종의 키워드를 기반으로 검색 기능을 구현하고 싶습니다.

이를 위해서는 LIKE키워드 를 사용해야 합니다. 또한 이전에 준비된 명령문을 사용했지만 LIKE다음 코드에서 어디에 추가 해야하는지 함께 사용하는 방법을 모르겠습니다 'keyword%'.

pstmt.setString(1, notes)그대로 (1, notes+"%")또는 이와 비슷한 방식 으로 직접 사용할 수 있습니까? 나는 웹에서 이것에 관한 많은 게시물을 보았지만 어디서나 좋은 대답은 없습니다.

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



답변

준비된 명령문 SQL 문자열이 아닌 값 자체로 설정해야합니다.

그래서 이것은 접두사 일치를 위해해야합니다 :

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

또는 접미사 일치 :

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

또는 전 세계 경기 :

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


답변

다음과 같이 코딩하십시오.

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

당신이 있는지 확인 하지 마십시오 그들은 예외가 발생합니다 아래와 같은 따옴표 ”를 포함한다.

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


답변

CONCATE SQL 함수를 사용하여 간단하게 수행 할 수 있습니다.

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

이것은 내 경우에 완벽하게 작동합니다.


답변

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

이것을 시도하십시오.


답변

String fname = "Sam\u0025";

PreparedStatement ps= conn.prepareStatement("SELECT * FROM Users WHERE User_FirstName LIKE ? ");

ps.setString(1, fname);


답변

String query="select * from test1 where "+selected+" like '%"+SelectedStr+"%';";


PreparedStatement preparedStatement=con.prepareStatement(query);


// where seleced and SelectedStr are String Variables in my program


답변