2012-10-07 2 views
0

가능한 중복 :
retrieving values from database in java검색 중 값

나는 다시 내가 만든 데이터베이스에서 필드의 입력 데이터/값을 검색 다른 프로그램을 제작하고있다. 하지만 이번에는 입력 한 값이 내가 만든 JtextField에서 올 것입니다. 여기에 무엇이 잘못되었는지 궁금해하는데, 출력 할 때 항상 null입니다.

이 프로그램에서 나는 입력 된 JTextField 값을 int로 변환합니다. 여기있다 : 내 두 번째 클래스

public class ButtonHandler implements ActionListener 
{ 
public void actionPerformed(ActionEvent e) 
{ 
if(e.getSource() == extendB) 
{ 
    ExtensionForm extend = new ExtensionForm(); 
    extend.setVisible(true); 
    } 
else if(e.getSource()== searchB)    
{ 
//get text from the textField 
String guest = guestIDTF.getText(); 
//parse the string to integer for retrieving of data 
int id = Integer.parseInt(guest); 
GuestsInfo guestInfo = new GuestsInfo(id); 
Room roomInfo = new Room(id); 
String labels[] = {guestInfo.getFirstName()+" "+guestInfo.getLastName(),""+roomInfo.getRoomNo(),roomInfo.getRoomType(),guestInfo.getTime(),"11:00"}; for(int z = 0; z<labels.length; z++) { labelDisplay[z].setText(labels[z]); } 

그것이 내가 여기 을 만든 데이터베이스의 필드의 입력 값을 검색하는 코드이다 :. 수입 java.sql의 *;

공용 클래스 룸 {

private String roomType; 
private int guestID, roomNo; 

private Connection con; 
private PreparedStatement statement; 

public Room(){ 
    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     con = DriverManager.getConnection(
         "jdbc:mysql://localhost:3306/3moronsdb","root","");   
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
public Room(int guestsID) 
{ 
    this(); 
    try{ 
     statement = con.prepareStatement("SELECT * FROM guest WHERE guestID=?"); 
     statement.setInt(1, guestID); 
     ResultSet rs = statement.executeQuery(); 
     while(rs.next()){ 
      this.guestID = rs.getInt(1); 
      this.roomType = rs.getString(2); 
      this.roomNo = rs.getInt(3); 
     } 
    }catch(Exception e){ 
     System.out.print(e); 
    } 
} 
//Constructor for setting rate 
public Room(String roomType, int roomNo) 
{ 
    this(); 
    try 
    { 
     statement = con.prepareStatement("Insert into room(roomType, roomNo) values(?,?)"); 
      statement.setString(1, roomType); 
      statement.setInt(2, roomNo); 
      statement.executeUpdate(); 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace();   
     return; 
    } 
} 
//getting roomType 
public String getRoomType(){ 
    return roomType; 
} 
//getting roomNo 
public int getRoomNo(){ 
    return roomNo; 
} 
//getting guestID 
public int getGuestId(){ 
    return guestID; 
} 

}

나는 이미 내 3moronsdb (1, 클래식, 103)에서 일부 값을 삽입합니다.

public class TestMain { 
    public static void main(String [] a){ 

     GuestsInfo guest = new GuestsInfo(1); //note that this instantiation is the other class which i just 
ask the other day.. (https://stackoverflow.com/questions/12762835/retrieving-values-from-database-in-java) 
     Room rum = new Room(1); 
    System.out.print(rum.getRoomType()+" "+ guest.getFirstName()); 
} 
} 

내가 그것을 실행하는거야 그것은 단지 나에게 객실 클래스에 대한 널 (null) 출력을 제공하지만 난 'Ericka'인 GuestsInfo 클래스의 출력을 얻고있다 : 여기 내 TEST 메인 클래스입니다. 너희들 나를 도울 수 있니? 나는 어제 이런 종류의 문제를 묻는 것을 알고 있지만, 지금 여기서 무엇이 잘못되었는지를 모른다. ..

+0

'Room' 클래스에서'SELECT * FROM guest WHERE guestID =?'에 관해 궁금해하는데, 이것을 선택하면 안된다. 방 테이블에서?열 인덱스를 사용하는 대신 결과 집합에서 값을 검색 할 때 열 이름을 사용했다면이 옵션을 선택했을 것입니다. 순서가 데이터베이스가 결과를 리턴해야한다고 결정하는 f}에 따라 순서가 변경되기 때.에 C 럼 인덱스가 변경 될 수 있습니다 (동일한 것이 이름에 대해 언급 될 수 있음). – MadProgrammer

+0

@MadProgrammer는 당신이 말하는 것에 대해 모범을 보여줄 수 있습니까? 사실, 나는 select 문을 사용하여 데이터베이스에서 데이터를 검색한다. pls. 정정 해줘. – NOOBprogrammer

+0

@MadProgrammer의 말은 select 문이 'SELECT fname, lname from TABLE'인 경우 rs.getString ("fname") 대신 rs.getString (1)을 사용해야합니다. 쿼리를 'SELECT lname , fname ... 'rs.getString (1) 더 이상 fname을 검색하지 않지만 rs.getString ("fname")은 검색합니다. – jcern

답변

2

이 방법의 select 문은 틀리게 보인다. Room 테이블에서 정보를 선택하면 안됩니까?

public Room(int guestsID) 
{ 
    this(); 
    try{ 
     // This line looks wrong, shouldn't this be selecting from the 
     // room table?? 
     // statement = con.prepareStatement("SELECT * FROM room WHERE guestID=?"); 
     // instead??? 
     statement = con.prepareStatement("SELECT * FROM guest WHERE guestID=?"); 
     statement.setInt(1, guestID); 
     ResultSet rs = statement.executeQuery(); 
     while(rs.next()){ 
      this.guestID = rs.getInt(1); 
      this.roomType = rs.getString(2); 
      this.roomNo = rs.getInt(3); 
     } 
    }catch(Exception e){ 
     System.out.print(e); 
    } 
} 

값을 검색하기 위해 열 인덱스를 사용하는 대신 열 이름을 사용해야합니다. 아마도 매우 드물 긴하지만 코드에서 예상하는 순서대로 데이터베이스가 열을 반환 할 수도 있습니다.

가 (이 여러가지 이유로 일어날 수, 데이터베이스, 데이터베이스가 다시 만들어집니다 업데이트되면, DB 엔진이 ... 마음의 변화입니다 : P)

while(rs.next()){ 
    this.guestID = rs.getInt("guestID"); 
    this.roomType = rs.getString("roomType"); 
    this.roomNo = rs.getInt("roomNumber"); 
} 

이제 분명이, 나는 데이터베이스 구조에 대해 아무 것도 모르므로 열 이름을 적절하게 업데이트해야합니다. 이것은 실수를해서 틀린 표를 선택할 때 강조됩니다 ...

또한. P

나는 또한 클래스 당 Connection을 만들 수없는 것 : 더 이상

PreparedStatement statement = null; 
try{ 
    statement = con.prepareStatement("SELECT * FROM guest WHERE guestID=?"); 
    statement.setInt(1, guestID); 
    ResultSet rs = statement.executeQuery(); 
    while(rs.next()){ 
     this.guestID = rs.getInt(1); 
     this.roomType = rs.getString(2); 
     this.roomNo = rs.getInt(3); 
    } 
}catch(Exception e){ 
    System.out.print(e); 
} finally { 
    try { 
     statement.close(); 
    }catch(Exception e){ 
    } 
} 

을 필요로 할 때 당신은 그렇지 않으면 데이터베이스 리소스 부족의 위험을 실행하는 데이터베이스 리소스를 해제 할 수 없습니다. 나는 하나의 응용 프로그램 연결을 만들거나 어떤 종류의 연결 풀을 사용한다.

+0

감사합니다. 나는 심지어 그것을 알아 차리지 못했다. 아마 bec. 수면 부족과 어쩌면 프로그래밍에서 바보 같은 짓이야. XD – NOOBprogrammer

+0

수면 부족. 나는 6 개월 된 행복한 아빠 야, 나는 잠을 자지 만 ... : P – MadProgrammer