2012-10-22 2 views
0
public ArrayList<Message> searchMessages(String word) throws DaoException{ 
    ArrayList<Message> messages = new ArrayList<>(); 
      Connection con = null; 
    PreparedStatement ps = null; 
    ResultSet rs = null; 

    try { 
     con = getConnection(); 

     //String query = "SELECT * FROM messages WHERE text LIKE %?% order by date"; 
     String query = "SELECT * FROM messages WHERE text LIKE '%?%'"; 
     ps = con.prepareStatement(query); 
     ps.setString(1,word); 
     rs = ps.executeQuery(); 

     while (rs.next()) { 
      int messageId = rs.getInt("messageId"); 
      String text = rs.getString("text"); 

      String date = rs.getString("date"); 
      int memberId2 = rs.getInt("memberId"); 
      Message m = new Message(messageId,text,date,memberId2); 
      messages.add(m); 

      //Company c = new Company(companyId, symbol, companyName, sharePrice, high, low); 
      //companies.add(c); 
     } 
    } catch (SQLException e) { 
     throw new DaoException("searchMessages(): " + e.getMessage()); 
    } finally { 
     try { 
      if (rs != null) { 
       rs.close(); 
      } 
      if (ps != null) { 
       ps.close(); 
      } 
      if (con != null) { 
       freeConnection(con); 
      } 
     } catch (SQLException e) { 
      throw new DaoException("searchMessages(): " + e.getMessage()); 
     } 
    } 

    return messages; 

} 

코드를 조금 설명하면됩니다. 메시지 테이블과 해당 텍스트 필드가 제공되는 항목을 검색하기 만합니다. 준비된 명령문을 사용하여 그 쿼리에 그리고 난 그것이 조금에서 작동하지 않는 이유는이 오류java를 사용하여 SQL 쿼리에 삽입 할 때 오류가 발생합니다.

oow_package.DaoException: searchMessages(): Parameter index out of range (1 > number of parameters, which is 0). 

없음 아이디어를 제공합니다 공급 어떤 문자열 문제 it.No를 실행합니다. 어떤 도움을 주시면 감사하겠습니다.

+0

정답을 발견하면 그 옆에있는 시세표를 확인하여 대답을 대답 한 것으로 표시하십시오. – Alfabravo

답변

5

준비된 문에서 이러한 매개 변수를 사용할 수 없습니다. 쿼리는

SELECT * FROM messages WHERE text LIKE ? 

해야합니다 그리고 당신은 내가 전문가는 아니지만

ps.setString(1, "%" + word + "%"); 
+0

맞습니다. 고맙습니다. 고맙습니다. 게시물을 지금 업데이트하고, 올바른 답으로 게시물을 표시 할 수 있습니다. 감사합니다. – Daniel

0

를 사용해야합니다,하지만 난 당신의 준비된 문 매개 변수없이 인식 말하고 싶지만, 당신은 여전히 ​​하나 (단어)를 삽입 ... 문제는 % 기호에서 오는 것일 수 있습니까?

편집 : 위의 녀석과 동의하십시오 ... 합법적 인 것 같습니다.

관련 문제