【问题标题】:How can I retrieve Firstname in my database?如何在我的数据库中检索名字?
【发布时间】:2014-03-18 17:10:22
【问题描述】:

我有这些代码

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;
}

我的loginWindowGUI 中有login.setUsername(usernameTF.getText());

这是我的问题.. 我无法检索数据库中的 First_Name 列.. 它显示为空。我在查询中的 WHERE 条件是否正确?请帮忙..

【问题讨论】:

  • +1 用于格式化.. 好几天没见过这么干净的格式化代码了..
  • 你能调试一下,看看 login.username 里有什么,并确保它在数据库里吗?

标签: java mysql database netbeans


【解决方案1】:

首先,您设置代码的方式会使您面临 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 变量。如果该字段为空,那么您的问题就在那里。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-24
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多