我正在尝试创建一个连接到SQL数据库的登录表单。这是我的代码:
private void cmd_loginActionPerformed(java.awt.event.ActionEvent evt) {
String sql="Selet * from inventor1";
try{
Class.forName("com.mysql.jdbc.Driver");
Connection conn= (Connection);
DriverManager.getConnection("jdbc:mysql://localhost:3306/inventor","root","root");
Statement stmt=conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
String user=t1.getText();
String pass=new String(t2.getText());
while(rs.next()){
String username=rs.getString("username");
String password=rs.getString("password");
if(user.equals("username") && pass.equals("password")){
new Mainmenu().setVisible(true);
}
}
}catch(Exception e){
JOptionPane.showMessageDialog(this, "password and username not match");
}
}
然而,即使我输入的内容与数据库中的内容匹配,用户名和密码也似乎永远不匹配。为什么用户名和密码永远不匹配?
答案 0 :(得分:3)
首先是Typos (必须):
Selet * from inventor1
应该是Select
而不是Selet
Connection conn= (Connection); <---- Remove ;
现在您可能会收到Exception
,但是您正在使用
JOptionPane.showMessageDialog(this, "password and username not match");
所以我认为出现此问题的原因是您的查询因SQLException
而每次都在抛出Selet
。
其次,您使用*
检索所有数据我想您的表只有两列用户名和密码而不是很好但是编程中的确实很好的做法是在您的代码中更具体。
答案 1 :(得分:1)
这里有一个额外的分号
Connection conn= (Connection);
DriverManager.getConnection("jdbc:mysql://localhost:3306/inventor","root","root");
我想你想要
Connection conn= (Connection)
DriverManager.getConnection("jdbc:mysql://localhost:3306/inventor","root","root");
答案 2 :(得分:1)
问题不在于密码不匹配(如果这是问题,代码将永远不会使主菜单可见但不会引发错误)。而是抛出错误(可能是由于与数据库的连接问题)。需要更多信息来诊断确切的问题,因此对于初学者来说,请尝试替换它:
catch(Exception e){
JOptionPane.showMessageDialog(this, "password and username not match");
}
用这个:
catch(Exception e){
e.printStackTrace();
JOptionPane.showMessageDialog(this, "An error occurred, see log for details.");
}
一般来说,简单地捕获Exception
然后忽略它是不好的做法,正如您的代码段所做的那样,正是因为这个问题。收到错误消息后,您可以自行研究问题,如果仍然无法解决问题,请在此处发布消息。