2012-10-06 86 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我觉得这个改变就够了..你可以尝试在进行上述修改后运行你的代码..它将会给你输出.. –