[英]com.microsoft.sqlserver.jdbc.SQLServerexception:incorrect syntax near'='
[英]com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '='
private void DN_ButtonActionPerformed(java.awt.event.ActionEvent evt) {
if(tenDN.getText().equals("")){
JOptionPane.showMessageDialog(this, "Dien ten dang nhap");
}else if(Matkhau.getText().equals("")){
JOptionPane.showMessageDialog(this, "Dien mat khau");
}else {
try {
String DB_URL = "jdbc:sqlserver://localhost;"
+ "databaseName=QLSinhVien;"
+ "user=sa;"
+ "password=123";
Connection conn = DriverManager.getConnection(DB_URL);
String sql;
sql = "SELECT * FROM SINHVIEN"
+ "WHERE TENDN = ? AND MATKHAU = HASHBYTES('MD5',?)";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, tenDN.getText());
ps.setString(2, Matkhau.getText());
System.out.println("a");
ResultSet rs = ps.executeQuery();
System.out.println("e");
if(rs.next()){
JOptionPane.showMessageDialog(this,"Dang nhap thanh cong");
}else{
sql = "SELECT * FROM NHANVIEN"
+ "WHERE TENDN = ? AND MATKHAU = HASHBYTES('SHA1',?)";
ps = conn.prepareStatement(sql);
ps.setString(1, tenDN.getText());
ps.setString(2, Matkhau.getText());
rs = ps.executeQuery();
System.out.println(sql);
if(rs.next()){
JOptionPane.showMessageDialog(this,"Dang nhap thanh cong");
}else{
JOptionPane.showMessageDialog(this,"Ten dang nhap va mat khau khong hop le");
}
}
} catch (Exception ex) {
System.out.println(ex);
}
}
}
我不知道這段代碼有什么問題。 請幫幫我 !!!!! 我使用了 NetBeans 和 SQL Server 2019
WHERE
子句之前的兩個 SQL 查詢中都缺少一個空格,並且斷行似乎是多余的:
所以查詢字符串應該是:
String sql = "SELECT * FROM SINHVIEN WHERE TENDN = ? AND MATKHAU = HASHBYTES('MD5',?)";
// or
String sql = "SELECT * FROM SINHVIEN " // add a space here
+ "WHERE TENDN = ? AND MATKHAU = HASHBYTES('MD5',?)";
同樣,針對NHANVIEN
表的另一個查詢需要修改:
sql = "SELECT * FROM NHANVIEN WHERE TENDN = ? AND MATKHAU = HASHBYTES('SHA1',?)";
為避免代碼重復,使用try-with-resources
修復連接/准備語句的關閉,代碼可以重構如下:
// Create constant connection string and SQL queries
private static final String DB_URL =
"jdbc:sqlserver://localhost;databaseName=QLSinhVien;user=sa;password=123";
private static final String SQL_1 =
"SELECT * FROM SINHVIEN WHERE TENDN = ? AND MATKHAU = HASHBYTES('MD5',?)";
private static final String SQL_2 =
"SELECT * FROM NHANVIEN WHERE TENDN = ? AND MATKHAU = HASHBYTES('SHA1',?)";
private void DN_ButtonActionPerformed(java.awt.event.ActionEvent evt) {
String tenDnText = tenDN.getText();
String matkhauText = Matkhau.getText();
if (tenDnText.isEmpty()) {
JOptionPane.showMessageDialog(this, "Dien ten dang nhap");
} else if(matkhauText.isEmpty()){
JOptionPane.showMessageDialog(this, "Dien mat khau");
} else {
// auto-close connection
try (Connection conn = DriverManager.getConnection(DB_URL)) {
if (runSqlQuery(conn, SQL_1, tenDnText, matkhauText) ||
runSqlQuery(conn, SQL_2, tenDnText, matkhauText)) {
JOptionPane.showMessageDialog(this, "Dang nhap thanh cong");
} else {
JOptionPane.showMessageDialog(this,
"Ten dang nhap va mat khau khong hop le");
}
} catch (Exception ex) {
System.out.println(ex);
}
}
}
private boolean runSqlQuery(Connection conn, String sql, String... params)
throws Exception {
// auto-close prepared statement
try (PreparedStatement ps = conn.prepareStatement(sql)) {
if (params.length > 1) {
ps.setString(1, params[0]);
}
if (params.length > 2) {
ps.setString(2, params[1]);
}
return ps.executeQuery().next(); // using implicit ResultSet
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.