我正在尝试从登录应用程序查询数据库到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);
}
答案 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中的文本字段获得的动态数据进行查询。