Java 使用MySQL检查用户名和密码
我正在尝试用MySQL验证用户名和密码。但它不起作用。我找不到问题。谁能帮我修一下吗Java 使用MySQL检查用户名和密码,java,mysql,Java,Mysql,我正在尝试用MySQL验证用户名和密码。但它不起作用。我找不到问题。谁能帮我修一下吗 private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { String user = jTextField1.getText(); char[] pass = jPasswordField1.getPassword(); try {
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
String user = jTextField1.getText();
char[] pass = jPasswordField1.getPassword();
try
{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/JEREN","root","");
Statement stat = con.createStatement();
String sql = "Select * from tbl_User Where username='" + user + "' and password='"+pass+"'";
rs = stat.executeQuery(sql);
while (rs.next())
{
if (user.equals(rs.getString("username")))
{
if (pass.equals(rs.getString("password")))
{
JOptionPane.showMessageDialog(null,"Login Successfully");
main.getWindows();
}
else
{
JOptionPane.showMessageDialog(null,"Incorrect Password");
}
else
{
JOptionPane.showMessageDialog(null,"Incorrect Login");
}
}
stat.close();
con.close();
}
catch (SQLException | HeadlessException e)
{
//e.printStackTrace();
JOptionPane.showMessageDialog(null,"PROBLEM OCCURED !!!! ");
}
catch (ClassNotFoundException ex) {
Logger.getLogger(Users.class.getName()).log(Level.SEVERE, null, ex);
}
// TODO add your handling code here:
}
实际上,我认为这并不是在数据库中检查带有用户名和密码的条目。我说得对吗?首先,选择“按
用户名”
,然后对用户输入的密码进行哈希运算,检查它是否与数据库中的哈希密码匹配。我建议像SHA-2
我还建议您编写类来处理代码,即User
类。。
您还忘记关闭结果集
还有一件事,使用PreparedStatement
这样做
Statement stat = con.createStatement();
user = user.toLowerCase();
pass = pass.toLowerCase();
String sql = "Select * from tbl_User Where LOWER(username)='" + user + "' and LOWER(password)='"+pass+"'";
rs = stat.executeQuery(sql);
if(rs.next())
{
JOptionPane.showMessageDialog(null,"Login Successfully");
main.getWindows();
}
else
{
JOptionPane.showMessageDialog(null,"Incorrect Login");
}
您正在检查密码和用户名是否匹配2次
String sql = "Select * from tbl_User Where username='" + user + "' and password='"+pass+"'";
您已经检查了密码和用户,首先应该检查密码是否存储为MD5或任何其他哈希类型
在该sql之后,您只需要检查它是否返回任何类似@Prabhakaran所说的行检查编写的代码是否连接到数据库,下面的代码中没有密码
con=DriverManager.getConnection(“jdbc:mysql://localhost:3306/JEREN“,”根“,”)代码>
第二个是检查用户和pass变量是否从操作事件中获取值。第一件事
代码将仅用于验证错误。因此,必须粘贴程序触发的错误
由于我们没有足够的信息来解决这个问题,我将尽力帮助你
1-您的连接变量似乎缺少“连接”,请尝试以下操作:
Connection con=DriverManager.getConnection(“jdbc:mysql://localhost:3306/“DATABASENAME”?useTimezone=true&serverTimezone=UTC”、“用户名”、“密码”)代码>
2-您已经在开始时对查询执行了if语句,因此不必重新开始,只需键入:
if(rs.next()){
}
其他的
{
showMessageDialog(null,“密码不正确”);
}
然后继续处理例外部分
代码如下:
try
{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/JEREN","root","");
Statement stat = con.createStatement();
String sql = "Select * from tbl_User Where username='" + user + "' and password='"+pass+"'";
rs = stat.executeQuery(sql);
if (rs.next())
{
JOptionPane.showMessageDialog(null,"Login Successfully");
main.getWindows();
}
else
{
JOptionPane.showMessageDialog(null,"Incorrect Password");
}
else
{
JOptionPane.showMessageDialog(null,"Incorrect Login");
}
stat.close();
con.close();
}
catch (SQLException | HeadlessException e)
{
//e.printStackTrace();
JOptionPane.showMessageDialog(null,"PROBLEM OCCURED !!!! ");
}
catch (ClassNotFoundException ex) {
Logger.getLogger(Users.class.getName()).log(Level.SEVERE, null, ex);
}
//TODO在此处添加您的处理代码:
}`用户名和密码在数据库中都是varchar吗?首先是;请告诉我您没有在数据库中存储原始密码。其次,您需要学习布尔逻辑-&&
。第三,你到底有什么问题?事实上,永远不要将密码存储为纯文本。这将是一个简单但安全的实现。存储时必须对其进行散列,检查时必须使用另一个函数查看字符串是否与散列匹配。虽然这是正确的,但这只会有助于进入坟墓。我这样做了,但它一直说登录不正确。我输入的用户名和密码正确!它成功了,谢谢大家。密码字段有问题。添加了.getText(),它成功了