尝试执行sqllite数据库查询时出现SQL异常错误

时间:2018-05-04 00:51:45

标签: java database sqlite prepared-statement sqlexception

我正在尝试从登录应用程序查询数据库到SQLite数据库。一旦用户输入用户名和密码并单击输入,它应检查数据库中的凭据。当我点击登录按钮时,它显示:

java.sql.SQLException:sql error or missing database

以下是更好理解的代码。代码中的错误是什么?

注意:

  • 我的数据库中有登录表。
  • 连接成功
try
{
    String query="select * from Login where username=? Password=?";
    PreparedStatement pst=connection.prepareStatement(query);
    pst.setString(1, userField.getText());
    pst.setString(2, passwordField.getText());
    ResultSet rs=pst.executeQuery();
    int count=0;

    while(rs.next()) {
        count=count+1;
    }

    if(count==1) {
        JOptionPane.showMessageDialog(null, "Username and Password is correct");
    }
    else if (count>1)
    {
        JOptionPane.showMessageDialog(null, " Duplicate Username and Password is correct");
    }
    else
    {
        JOptionPane.showMessageDialog(null, "  Username and Password is not correct");
    }
    rs.close();
    pst.close();

} catch(Exception e){
    JOptionPane.showMessageDialog(null, e);
}

1 个答案:

答案 0 :(得分:1)

String query="select * from Login where username=user123 Password=password123";
PreparedStatement pst=connection.prepareStatement(query);
pst.setString(1, userField.getText());
//pst.setString(2, passwordField);

使用PreparedStatement的基础知识应该是:

String query="select * from Login where username = ? and Password = ?";
PreparedStatement pst=connection.prepareStatement(query);
pst.setString(1, userField.getText());
pst.setString(2, passwordField.getText());

即查询字符串指示要向字符串添加参数的位置。然后,您需要使用GUI的文本组件中的值替换参数。

另外,为什么你有一个while循环?查询的重点不是确定是否在数据库中找到用户标识/密码?如果是这样,ResultSet中只能返回一个条目。

阅读有关SQL基础的JDBC Database Access部分。

这个问题与Swing无关。首先通过在setString(...)方法中对用户标识/密码值进行硬编码来了解如何正确执行SQL查询。一旦你开始工作,那么你尝试使用从GUI中的文本字段获得的动态数据进行查询。