#java #mysql
#java #mysql
Вопрос:
Очевидно, мы застряли в программе входа в систему, потому что она не считывает имя пользователя и пароль. Он запускается, даже если имя пользователя и пароль неверны.
ЭКСПЕРИМЕНТАЛЬНЫЙ РАБОЧИЙ КОД (входит в систему, даже если данные для входа неверны):
JButton btnLogin = new JButton("Log-In");
btnLogin.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Connection conn;
java.sql.PreparedStatement ps;
try{
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/tupaness","ivanaldwin","frankscanteen");
Statement mystmt = conn.createStatement();
ps = conn.prepareStatement("SELECT * FROM 'admin' WHERE 'uname' = ? AND 'pass' = ?");
String user = uname.getText(); // Collecting the input
char[] password = pass.getPassword(); // Collecting the input
String pwd = String.valueOf(pass); // converting from array to string
if(validate_login(user,pwd)){
/* ps.setString(1, uname.getText());
ps.setString(2, String.valueOf(pass.getPassword()));
ResultSet result = ps.executeQuery();
if(result.next()){
JOptionPane.showMessageDialog(null, "Login Success");
TupanessHome th = new TupanessHome();
}
*/
}
}catch(Exception e) {
JOptionPane.showMessageDialog(null, "An Error has been Detected: n" e);
}TupanessHome th = new TupanessHome();
}
private boolean validate_login(String user, String pwd) {
try{
Class.forName("com.mysql.jdbc.Driver"); // MySQL database connection
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/tupaness","ivanaldwin","frankscanteen");
PreparedStatement pst = conn.prepareStatement("Select * from admin where uname=? and pass=?");
pst.setString(1, user);
pst.setString(2, pwd);
ResultSet rs = pst.executeQuery();
if(rs.next()){
return true;
}
else
return false;
}
catch(Exception e){
e.printStackTrace();
return false;
}
}
});
btnLogin.setBounds(65, 117, 89, 23);
login.getContentPane().add(btnLogin);
ДОЛЖЕН БЫТЬ КОД (не могу с этим работать, говорит, что у нас какая-то синтаксическая ошибка)
JButton btnLogin = new JButton("Log-In");
btnLogin.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Connection conn;
java.sql.PreparedStatement ps;
try{
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/tupaness","ivanaldwin","frankscanteen");
ps = conn.prepareStatement("SELECT * FROM 'admin' WHERE 'uname' = ? AND 'pass' = ?");
ps.setString(1, uname.getText());
ps.setString(2, String.valueOf(pass.getPassword()));
ResultSet result = ps.executeQuery();
if(result.next()){
JOptionPane.showMessageDialog(null, "Login Success");
TupanessHome th = new TupanessHome();
}
}catch(Exception e) {
JOptionPane.showMessageDialog(null, "An Error has been Detected: n" e);
}
}
});
btnLogin.setBounds(65, 117, 89, 23);
login.getContentPane().add(btnLogin);
Редактировать
Нам удалось исправить ошибку в столбце, но он по-прежнему не входит в систему
ps = conn.prepareStatement("SELECT * FROM admin WHERE 'uname' = ? AND 'pass' = ?");
(Утверждение взято из «ДОЛЖЕН БЫТЬ КОД»)
Комментарии:
1. У вас есть кавычки вокруг имен таблиц и столбцов в вашем
SELECT
запросе. Вероятно, есть и другие ошибки, но начните с исправления запроса.2. Хорошо, мы начнем находить эти ошибки, спасибо ^ _ ^
Ответ №1:
"SELECT * FROM 'admin' WHERE 'uname' = ? AND 'pass' = ?"
Должно быть
"SELECT * FROM `admin` WHERE `uname` = ? AND `pass` = ?"
Или даже
"SELECT * FROM admin WHERE uname = ? AND pass = ?"
Комментарии:
1. НАКОНЕЦ-ТО ЭТО СРАБОТАЛО, СПАСИБО YOOOOOOOOOOOOOOOU