2012-12-30 1 views
1
private void btgetinvActionPerformed(java.awt.event.ActionEvent evt) { 
     //JOptionPane.showMessageDialog(null, "REMITTANCE ID IS VALID!"); 
     try { 
      DBUtil util = new DBUtil(); 
      Connection con = util.getConnection(); 
      PreparedStatement stmt = con.prepareStatement("select bk_det.rm_id from bk_det WHERE dbo.bk_det.rm_id = ?"); 
      ResultSet rs; 
      String rm = tf_rmid.getText().trim(); 
      stmt.setInt(1, Integer.parseInt(rm)); 
      rs = stmt.executeQuery(); 
      while (rs.next()) { 
       int i = Integer.parseInt(rs.getString("box_no")); 
       tfbrname.setText(rs.getString(i)); 
      } 
     } catch (Exception ex) { 
      JOptionPane.showMessageDialog(null, ex.getMessage()); 

     } 
    } 

실제로 데이터베이스 테이블 dbo.bk_det에서 값을 검색하려고합니다. 나는 텍스트 필드 tf_rmid에서 WHERE 값을 취하고있다. 모든 것이 오류없이 잘 진행되지만 일단 rm_id를 삽입하고 btgetinv 버튼을 클릭하면 내 rm_id가 범위를 벗어났다는 것을 알 수 있습니다. 오류가 어디서 발생했는지 그리고 문제가 무엇인지 이해합니다.데이터베이스에서 값을 텍스트 필드로 설정하는 방법

답변

1

문제를 참조 아래 내용이다 :

int i = Integer.parseInt(rs.getString("box_no")); 
tfbrname.setText(rs.getString(i)); 

첫 번째 문은 당신이 원하는 방식으로 작동하지 않습니다 왜냐하면 select 절에 "box_no"라는 열이 없기 때문입니다. 예외가 throw됩니다. select 절에서 box_no를 갖도록 코드를 변경했다고 가정 해 봅시다. 그런 다음 두 번째 명령문은 열이 box_no의 값인 n 번째 열을 검색하려고 시도합니다. 난 그냥 싶은 생각 :

tfbrname.setText(rs.getString("box_no")); 

다시 말하지만, 위의에만 SELECT 문은 필드 목록에서 box_no가 포함 된 경우 작동합니다.

+0

남자 정말 대단히 감사합니다. –

1

rs.next()은 더 이상 레코드가 없으면 false를 반환합니다. 따라서 레코드를 찾을 수 없을 때 뭔가 행동하고 싶다면 레코드 수를 확인해야합니다. 예를 들어

, 자세한 내용은

int recordCount = 0; 
while (rs.next()) { 
    recordCount++; 
    int i = Integer.parseInt(rs.getString("box_no")); 
    tfbrname.setText(rs.getString(i)); 
} 
if(recordCount == 0) { 
    // do something : report an error or log 
} 

, http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#next()

관련 문제