【问题标题】:JDBC4/MySQL syntax error: when retrieving data from mysql tableJDBC4/MySQL 语法错误:从 mysql 表中检索数据时
【发布时间】:2013-01-13 07:11:21
【问题描述】:

下面的代码有什么问题吗?

String sql = "SELECT username, password FROM REGCUSTOMERS" + "WHERE username = ? AND password = ?";

我正在尝试从 REGCUSTOMERS 表的用户名和密码列中获取数据。

Eclipse 错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 '= 附近使用的正确语法?和密码=?在第 1 行

 private boolean isAuthenticated(String userid, String password) {

    // JDBC logic to verify from database.

    try {
        Class.forName(driverName);
        Connection conn = null;
        PreparedStatement st = null;
        String sql = "SELECT username, password FROM REGCUSTOMERS" + "WHERE username = ? AND password = ?";

        conn = DriverManager.getConnection(databaseURL, USERNAME, PASSWORD);

        st = conn.prepareStatement(sql);
        ResultSet rs = st.executeQuery(sql);

        if (rs.getString("username") != userid && rs.getString("password") != password) {

            return false;
        }
        rs.close();
        st.close();
        conn.close();

    } catch (Exception e) {
        e.printStackTrace();
    } 
    return true;

}

【问题讨论】:

    标签: mysql jdbc


    【解决方案1】:

    REGCUSTOMERS 和 WHERE 之间没有空格。添加空间,你应该没问题:

        String sql = "SELECT username, password FROM REGCUSTOMERS " + "WHERE username = ? AND password = ?";
    

    【讨论】:

    • 是的,所以 MySQL 看到 FROM REGCUSTOMERSWHERE username 并认为 username 是不存在的表 REGCUSTOMERSWHERE 的别名。然后= 不合适了。
    【解决方案2】:

    这部分:

    ... FROM REGCUSTOMERS" + "WHERE username ...
    

    将产生以下 SQL:

    FROM REGCUSTOMERSWHERE
    

    这当然是错误的。

    + 在那里没有意义,但如果你想要它,至少在一侧需要一个空间

    "... FROM REGCUSTOMERS " + "WHERE username ..."
    

    【讨论】:

      猜你喜欢
      • 2013-02-13
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 2022-08-14
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 2011-12-23
      相关资源
      最近更新 更多