我正在制作一个程序,用于从我创建的数据库中检索输入的数据/字段值。但是当我运行它时,输出始终为null。我想知道出了什么问题?这是我的代码:
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 :(得分: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中进行查询。
答案 1 :(得分:0)
您似乎没有在main方法中插入任何数据。你的无参数构造函数不会创建任何数据。 setFirstName方法使用select语句,因此不执行此操作。是否有一个名为Ericka的用户已经在数据库中了?因为如果没有,你没有任何数据可以返回。
我认为你的意思是使用带有多个args的构造函数:
GuestsInfo gi = new GuestsInfo("Ericka", "Something", 30);
答案 2 :(得分:0)
GuestsInfo gi = new GuestsInfo();
您没有在0-arg构造函数中填充数据库...您只是用它来初始化connection
..所以,您不会得到任何数据..
尝试通过调用3-arg构造函数创建对象..
GuestsInfo gi = new GuestsInfo("Ericka", "lastName", 23);