【问题标题】:MySQL Syntax error in Java class?Java类中的MySQL语法错误?
【发布时间】:2015-02-12 13:21:23
【问题描述】:

我无法运行我的查询语句。说查询语句中存在语法错误,但我很确定这是怎么回事,但显然我错了。以下是部分代码:

private String url = "jdbc:mysql://localhost:3306/MatrixUsers";
private String dbName = "MatrixUsers";
private String driver = "com.mysql.jdbc.Driver";
private String userNameDB = "root"; 
private String passwordDB = "password1"; 

private Connection connectMe = null;
private PreparedStatement selectUsers = null;
private Statement st;
private ResultSet results;


public void validateUserFromDB() {


    try {
        Class.forName("com.mysql.jdbc.Driver");
        connectMe = DriverManager.getConnection(url, userNameDB, passwordDB);
        String newUser = "Sil";
        String query = "SELECT count(*) FROM MatrixUsers.Users WHERE userNames = ?;";

        selectUsers = connectMe.prepareStatement(query);
        selectUsers.setString(1, newUser);
        results = selectUsers.executeQuery(query);

        //System.out.println(results);
        if(results.next()) {
            String count = null;
                    count= results.getString(1);

            if(count == null)
                System.out.println("NO MATCH");
            else
                System.out.println("MATCH");

        }

        connectMe.close();


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


}

错误是这样的:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1

【问题讨论】:

  • 你试试单引号 userName = '?' ;
  • 是的,如果我这样做,我会收到这个新错误:java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0)。
  • 你需要删除 ;
  • 我做了,但仍然是同样的问题。转移到另一个问题的唯一方法是使用 ' '

标签: java mysql database jdbc prepared-statement


【解决方案1】:

删除分号并替换行:

results = selectUsers.executeQuery(query);

通过这个

results = selectUsers.executeQuery();

【讨论】:

  • 成功了,谢谢!将选择正确的答案。
【解决方案2】:

删除问号后的;。并从results = selectUsers.executeQuery(query);中删除查询

results = selectUsers.executeQuery(query); 将执行查询而不替换占位符。这用于“静态”查询。

results = selectUsers.executeQuery(); 将执行之前准备好的语句。

【讨论】:

  • 我做了,但仍然是同样的错误。如果我添加'',我会得到:java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
  • @Silvestrini 单个 qoutes 没有变红。删除它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-23
  • 2015-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
相关资源
最近更新 更多