我有这些代码
DBCollection.java
public LogInHandler userGreetName()
{
LogInHandler login = new LogInHandler();
String query = null;
try
{
query = "SELECT First_Name FROM user_information WHERE Username = '"+login.getUsername()+"'";
rs = stmt.executeQuery(query);
rs.next();
login.setGreetName(rs.getString("First_Name"));
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,e.toString());
}
return login;
}
在我的mainWindow.java
我有formWindowOpened事件并包含代码
DBCollection dbc = new DBCollection();
greetNameL.setText(dbc.userGreetName().getGreetName());
LogInHandler.java
public class LogInHandler extends ValidateLogin{
DBCollection dbc = new DBCollection();
private String username;
private String greetName;
public void setGreetName(String temp)
{
greetName = temp;
}
public String getGreetName()
{
return greetName;
}
public void setUsername(String temp)
{
username = temp;
}
public String getUsername()
{
return username;
}
我的login.setUsername(usernameTF.getText());
loginWindowGUI
这是我的问题..我无法检索数据库中的First_Name列..它显示为null。并且我的查询中的WHERE条件是否正确?请帮忙..
答案 0 :(得分:0)
首先,您设置代码的方式会让您进行SQL注入。
query = "SELECT First_Name FROM user_information WHERE Username = '"+login.getUsername()+"'";
rs = stmt.executeQuery(query);
rs.next();
login.setGreetName(rs.getString("First_Name"));
类似下面的内容应该与您的代码完成相同的工作,但保护您免受SQL注入。
query = "SELECT First_Name FROM user_information WHERE Username = ?";
PreparedStatement preparedStatement = dbConnection.prepareStatement(query);
preparedStatement.setString(1, login.getUsername());
ResultSet rs = preparedStatement.executeQuery(query);
rs.next();
login.setGreetName(rs.getString("First_Name"));
我不认为这是导致您的代码无法正常工作的原因。您需要向我们提供更多信息。
您是否尝试使用以下字符串直接查询数据库?
SELECT First_Name FROM user_information WHERE Username = 'A user name that is definitely in the DB';
这应验证您的查询是否正确。如果它工作,那么我将进入Netbeans的调试模式。在下一行之前放置一个断点
rs = stmt.executeQuery(query);
检查是否填充了login.username变量。如果该字段为空,那么您的问题就在那里。