繁体   English   中英

com.microsoft.sqlserver.jdbc.SQLServerException: '=' 附近的语法不正确

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM