2017-05-11 7 views
1

사용자는 표시된 테이블에서 리조트 ID를 선택하고 예약합니다. 나는 내 문제를 찾지 못하는 것 같아 예약을하고있는 리조트의 이름을 프린트하고 싶다.Java에서 SQL의 정보를 인쇄 할 수 없음

String x = jTextFieldID.getText(); 
    Integer Resort = Integer.valueOf(x); 
    int resort = Integer.parseInt(x); 
    String sql = "SELECT RESORT_NAME FROM LouwDataBase.Resorts WHERE ID = "+Resort; 
     try (PreparedStatement pstmt = conn.prepareStatement(sql)) { 
      pstmt.setInt(1, resort); 
       try (ResultSet rs = pstmt.executeQuery()) { 
        if (rs.next()) { 
        String resortName = rs.getString("RESORT_NAME"); 
        JOptionPane.showMessageDialog(null, 
        "You want to book at " + resortName); 
    } 
+0

오류가 발생합니까? 그렇다면 무엇입니까? 테이블 참조를 제대로 포맷하지 않았을 수 있습니다. 형식은 database.schema.table입니다. 어쩌면 LouwDatabase.dbo.Resorts (또는 differnt 인 경우 실제 스키마)를 사용해보십시오. –

+0

2017 년 5 월 11 일 9:36:37 PM it.pat.Booking jButton1ActionPerformed SEVERE : null java.sql.SQLException : PreparedStatement에 'executeQuery (String)'메서드가 허용되지 않습니다. org.apache.derby.client.am.SQLExceptionFactory.getSQLException (알 소스)에 org.apache.derby.client.am.SqlException.getSQLException \t (알 소스)에 \t org.apache.derby.client에서 \t .am.ClientPreparedStatement.executeQuery (Unknown Source) – Swiper

+0

오류 메시지는 명확합니다. 대신 문자열 매개 변수없이'pstmt.executeQuery()'를 사용하십시오. –

답변

1

오류가 sql 대신 PreparedStatement.executeQuery()의 너무 Statement.executeQuery(String)에 전달되는 것입니다.

int resort = Integer.parseInt(x); 
//String sql = "SELECT RESORT_NAME FROM LouwDataBase.Resorts WHERE ID = ?"; 
String sql = "SELECT RESORT_NAME FROM LouwDataBase.Resorts WHERE ID = " + resort; 
try (PreparedStatement pstmt = conn.prepareStatement(sql)) { 
    //pstmt.setInt(1, resort); 
    try (ResultSet rs = pstmt.executeQuery()) { 
     if (rs.next()) { 
      String resortName = rs.getString("RESORT_NAME"); 
      JOptionPane.showMessageDialog(null, 
       "You want to book at " + resortName); 
     } 
    } 
} catch (SQLException ex) { 
    Logger.getLogger(Booking.class.getName()).log(Level.SEVERE, null, ex); 
} 

(일반적으로 사용되는) 준비된 문을 대체적으로 사용합니다.

또한 위와 같이 try-with-resources를 사용하여 자동으로 수행 할 수있는 명령문 및 결과 세트를 닫아야합니다.

오, 거의, 그 rs.next() 호출해야합니다. (이미 언급 된 다른 항목)

+0

java.sql.SQLException : 열 위치 '1'이 범위를 벗어났습니다. 이 ResultSet의 렬수는 '0'입니다. – Swiper

+0

이것은 내가 가지고있는 오류입니다 – Swiper

+0

어디서 ID = "+ 리조트로 WHERE ID ="+ 리조트로 변경했는데이 오류가 – Swiper

3

당신은 rs.next()을 사용해야합니다 :

ResultSet rs = pstmt.executeQuery(sql); 
String resortName = ""; 
if(rs.next()){//<<----------------------------- 
    resortName = rs.getString("RESORT_NAME"); 
} 

JOptionPane.showMessageDialog(null, "You want to book at "+resortName); 

당신이 대신 while(rs.next){...}를 사용할 수있는 많은 결과를 얻을 수 있도록합니다.


참고? 좋은 연습, 사용 ResortName 당신의 변수의 이름을 처음에 위 문자를 사용하지 않는 대신이 resortName 당신은 그것에서 읽으려고하기 전에 ResultSet 결과를 통해 테스트 할 필요가

+0

rs.next()가 아닌'rs.next'입니다. –

+0

죄송합니다. rs.next를 사용해 보았지만 같은 오류가 발생했습니다. 어쨌든 도움을 주셔서 감사합니다. – Swiper

+1

@chsdk 감사합니다.이 타입이 맞습니다 –

2

:

if(rs.next()) { 
    String ResortName = rs.getString(1); 
    JOptionPane.showMessageDialog(null, "You want to book at "+ResortName); 
} 

그리고 getString(1)을 사용하면 RESORT_NAME을 얻을 수 있습니다. 자세한 내용은 ResultSet .getString(int index) method을 확인하십시오.

+0

그냥 루프가 필요하다고 생각하지 마십시오. 사용자가 입력 한 ID의 리조트 이름을 표시하고 싶습니다. – Swiper

+0

@Swiper 제 답변에서 '루프'는 어디에서 언급 했습니까? 나는 그것을 얻지 않는다. –

+0

죄송합니다. 다음()을 의미합니다. – Swiper