2012-10-06 117 views
0

我正在製作一個程序,從我創建的數據庫中檢索輸入的數據/字段值。但是當我運行它時,輸出始終爲空。我不知道什麼是錯的?這裏是我的代碼:從java數據庫檢索值

import java.sql.*; 

public class GuestsInfo 
{ 
private String firstName, lastName; 
private int age; 
private Connection con; 
private PreparedStatement statement; 

public GuestsInfo() 
{ 
    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     con = DriverManager.getConnection(
         "jdbc:mysql://localhost:3306/3moronsdb","root",""); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
public GuestsInfo(String firstName, String lastName, int age) 
{ 
    this(); 
    try 
    { 
     statement = con.prepareStatement("Insert into guest(firstName,lastName,age)values(?,?,?)"); 

     statement.setString(1, firstName); 
     statement.setString(2, lastName); 
     statement.setInt(3, age); 

     statement.executeUpdate(); 
     con.close(); 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
     return; 
    } 
} 


public void setFirstName(String firstName) 
{ 

    try{ 
     statement= con.prepareStatement("SELECT * FROM guest WHERE firstName = ?"); 
     statement.setString(1, firstName); 
     ResultSet rs = statement.executeQuery(); 
     while(rs.next()){ 
      firstName = rs.getString(1); 
     } 
    }catch(Exception e){ 
     System.out.print(e); 
    } 
} 

public String getFirstName(){ 
    return firstName; 
} 

public void setLastName(String lastName) 
{ 

    try{ 
     statement= con.prepareStatement("SELECT * FROM guest WHERE lastName = ?"); 
     statement.setString(2, lastName); 
     ResultSet rs = statement.executeQuery(); 
     while(rs.next()){ 
      lastName = rs.getString(2); 
     } 
    }catch(Exception e){ 
     System.out.print(e); 
    } 
} 

public String getLastName(){ 
    return lastName; 
} 

public void setAge(int age){ 
    try{ 
     statement = con.prepareStatement("SELECT * FROM guest WHERE age=?"); 
     statement.setInt(3, age); 
     ResultSet rs = statement.executeQuery(); 
     while(rs.next()){ 
      age = rs.getInt(3); 
     } 
    }catch(Exception e){ 
     System.out.print(e); 
    } 
} 

public int getAge(){ 
    return age; 
} 

在我的主類,我有這樣的代碼:

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

    GuestsInfo gi = new GuestsInfo(); 
    gi.setFirstName("Ericka"); 
    System.out.println(gi.getFirstName()); 

} 
} 

我不知道爲什麼它總是說空當我運行它。

+0

忽略事情發生的地方,可能性是你沒有「Ericka」存儲在數據庫中的字符串。考慮到你正在提供加載的價值,這也沒有意義。如果你已經知道了,那你爲什麼要打數據庫來加載它? – pickypg

+0

看起來您的GUESS表格沒有「firstName」列中的「Ericka」值。 –

+0

毫米..實際上,我已經在我的主插入了這個:GuestsInfo gi = new GuestsInfo(「Ericka」,「Asi」,18);我的數據庫中有數據。我想要的是從我的數據庫中獲取數據。我怎樣才能做到這一點? – NOOBprogrammer

回答

1

你實際上並不是在設置者中「設置」任何東西。

public void setFirstName(String firstName) 
{ 

    try{ 
    // Here you create a READing statement. 
     statement= con.prepareStatement("SELECT * FROM guest WHERE firstName = ?"); 
     statement.setString(1, firstName); 
     ResultSet rs = statement.executeQuery(); 
     while(rs.next()){ 
    // Here you set the >>method param<< to a non-existing String 
      firstName = rs.getString(1); 
     } 
    }catch(Exception e){ 
     System.out.print(e); 
    } 
} 
// After the method is done you have done nothing because you didn't even set your class member variable "firstName", which you would have set using "this.firstName". 

最重要的是:我對getter和setter的理解是,你會在你的getter中做查詢。

0

您似乎沒有在主要方法中插入任何數據。您的無參數構造函數不會創建任何數據。 setFirstName方法使用select語句,所以不這樣做。數據庫中是否有用戶叫Ericka?因爲如果沒有,你還沒有任何數據可以返回。

我想你的意思是使用具有多個ARGS構造:

GuestsInfo gi = new GuestsInfo("Ericka", "Something", 30); 
+0

先生其實我插入這在我的主 GuestsInfo gi = new GuestsInfo(「Ericka」,「Asi」,18); 我在數據庫中獲得了數據。我想要的是從我的數據庫中獲取數據。我怎樣才能做到這一點? – NOOBprogrammer

0
GuestsInfo gi = new GuestsInfo(); 

你是不是在你的0參數的構造函數填充數據庫......你只是用它來初始化connection ..所以,你不會得到任何數據或者..

嘗試致電3參數的構造函數創建對象..

GuestsInfo gi = new GuestsInfo("Ericka", "lastName", 23); 
+0

先生其實我插入在我的主GuestsInfo gi =新嘉賓信息(「Ericka」,「Asi」,18);我的數據庫中有數據。我想要的是從我的數據庫中獲取數據。我怎樣才能做到這一點? – NOOBprogrammer

+0

@AccireAtienza ..你不能獲取數據,除非你把數據..現在獲取數據,你可以嘗試把正確的數據在選擇查詢.. –

+0

@AccireAtienza我覺得這個改變就夠了..你可以嘗試在進行上述修改後運行你的代碼..它將會給你輸出.. –