我正在尝试使用Java创建一个登录表单。
我已创建表单,但似乎无法连接到数据库,或从数据库中检索用户名和密码。
这是Login.java代码:
package login;
import javax.swing.*;
import java.awt.event.*;
import java.sql.*;
public class Login {
Connection con;
Statement st;
ResultSet rs;
JFrame f = new JFrame("User Login");
JLabel l = new JLabel("Username");
JLabel l1 = new JLabel("Password");
JTextField t = new JTextField(10);
JTextField t1 = new JTextField(10);
JButton b = new JButton("Login");
public Login()
{
connect();
frame();
}
public void connect()
{
try
{
String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(driver);
String db = "jdbc:odbc:credentials";
con = DriverManager.getConnection(db);
st = con.createStatement();
}
catch(Exception ex)
{
}
}
public void frame()
{
f.setSize(600,400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
JPanel p = new JPanel();
p.add(l);
p.add(t);
p.add(l1);
p.add(t1);
p.add(b);
f.add(p);
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
try
{
String username = t.getText().trim();
String password = t1.getText().trim();
String sql = "select user, pass from users where user = '" +username+"'and pass = '"+password+"'" ;
rs = st.executeQuery(sql);
int count = 0;
while(rs.next())
{
count ++;
}
if(count == 1)
{
}
else if(count > 1)
{
JOptionPane.showMessageDialog(null, "Duplicate User, Access Denied!");
}
else
{
JOptionPane.showMessageDialog(null, "User Not Found!");
}
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, "Catch Error");
}
}
});
}
public static void main(String[] args) {
new Login();
}
}
当程序运行时,它会绕过用户的检索并传递,并输出我设置的“catch error”。
这可能是一个愚蠢的事情,就像一个错过的角色,但任何帮助都会非常感激。
非常感谢。
答案 0 :(得分:1)
在单引号后面插入一个空格
String sql = "select user, pass from users where user = '"
+ username + "'and pass = '" + password + "'";
^
此外,通过添加以下内容显示异常中的确切消息:
ex.printStackTrace();
在异常块中。
除此之外:使用PreparedStatement
而不是Statement
来防止SQL注入攻击
编辑:
显示堆栈跟踪:
java.sql.SQLException: [Microsoft][ODBC Driver Manager] The specified DSN contains an architecture mismatch between the Driver and Application at
解决方案是安装&使用32位版本的Java而不是64位JDK / JRE版本。