2017-03-27 2 views
0

동일한 데이터를 쿼리하려고합니다. 그러나, preparedStatement는, 문서가 말한 것처럼 인덱스가 1로부터 시작 되어도, 잘못된 인덱싱에 관한 SQLException을 Throw했습니다.PreparedStatement를 사용하는 잘못된 열 인덱스

SQLException입니다 말했다
public List<Paper1> search(String keyword) throws NotConnectedException { 

    List<Paper1> papers = new ArrayList<>(); 

    try { 
     PreparedStatement searchKeyword = 
     connection.prepareStatement("SELECT title, registered FROM paper " 
     + "WHERE title LIKE '%?%'"); 
     searchKeyword.setString(1, keyword); 
     ResultSet rs = searchKeyword.executeQuery(); 

     while (rs.next()) { 
      Paper1 p = new Paper1(); 
      p.setTitle(rs.getString("title")); 
      p.setRegistered(rs.getDate("registered").toLocalDate()); 
      papers.add(p); 
     } 
     return papers; 
    } catch (SQLException e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 

, 잘못된 라인을 실행하기 전에 때문에 잘못된 열 인덱스의

searchKeyword.setString(1, keyword); 

답변

1

물음표 자리 표시자는 작은 따옴표 안에 있으므로 리터럴 문자로 보입니다. 장소 표시자가 아닙니다. 문이 구문 분석 될 때 '%?%'은 문자열이며 바인드 변수가 표시되지 않으므로 바인드 변수를 설정할 수 없습니다. 변수가 없으므로 인덱스 1을 가진 변수가 없습니다.

연결을 사용하여이를 수정할 수 있습니다.

PreparedStatement searchKeyword = 
    connection.prepareStatement("SELECT title, registered FROM paper " 
    + "WHERE title LIKE '%' || ? || '%'"); 
+0

고마워요! 이제 나는 작은 따옴표가 무엇을 할 수 있는지 이해합니다. –

0

인쇄 밖으로 쿼리 문자열입니다 : 여기

는 기능입니다 :

SELECT title, registered FROM paperWHERE title LIKE '%?%' 

답변은 분명해야합니다.

키워드를 구분하려면 공백이 필요합니다.

+0

죄송합니다. 이전에 공간 문제를 발견했지만 질문에서 수정하지 않았습니다. 나는 그것을 바로 바로 잡는다. 아직도 sqllception을 던졌습니다 –

관련 문제