java - Statement.executeQuery() 在 MySQL 中执行 SELECT 命令时抛出 java.sql.SQLSyntaxErrorException

标签 java mysql select jdbc sqlexception

我有一个方法可以使用 JDBC API 从 MySQL 数据库表中获取记录。 我一直在使用的命令是:

"SELECT column_1, column_2, ... FROM table;"

列名以 ArrayList 的形式提供给方法,使用 StringBuilder 根据列名和表名构造查询。

当使用 createStatement() 执行构造的查询时,它会抛出:"java.sql.SQLSyntaxErrorException:你的 SQL 语法有错误;检查与你的 MySQL 服务器版本对应的手册以获得正确的语法在第 1 行使用 near from $tableName'

这是该方法的完整代码:

public ObservableList<ObservableList<String>> getTableData(String tableName, List<String> selectedParams, int rowCount) {
        try {
            StringBuilder query = new StringBuilder("select ");
            for (int i = 0; i < selectedParams.size(); i++) {
                query.append(selectedParams.get(i)).append(", ");
            }
            query.append("\b\b from ").append(tableName).append(" limit ").append(rowCount);
            System.out.println("query:" + query);
            ObservableList<ObservableList<String>> rows;
            try (ResultSet rset = st.executeQuery(query.toString())) {
                ResultSetMetaData rsmd = rset.getMetaData();
                rows = FXCollections.observableArrayList();
                while (rset.next()) {
                    ObservableList<String> row = FXCollections.observableArrayList();
                    int count = 1;
                    while (count <= rsmd.getColumnCount()) {
                        row.add(rset.getString(count));
                        count++;
                    }
                    rows.add(row);
                }
            }
            rows.forEach((row) -> {
                System.out.println(row);
            });
            return rows;
        } catch (SQLException ex) {
            Logger.getLogger(DBHelper.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

运行代码时,生成的查询表单打印语句如下所示:

"query:select territory from offices"

我已经直接针对 db 和另一个简单的 JDBC 程序测试了这个查询,它们都运行良好。除了在这个方法中。请帮忙。

----------------编辑:忘记粘贴异常消息:----------------

java.sql.SQLSyntaxErrorException: 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 from offices limit 10' at line 1
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
    at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1218)

最佳答案

问题编号在

 for (int i = 0; i < selectedParams.size(); i++) {
                query.append(selectedParams.get(i)).append(", ");
            }

上面的代码会在参数名后附加一个额外的',' 相反,你可以使用

query.append(String.join(", ", selectedParams))

关于java - Statement.executeQuery() 在 MySQL 中执行 SELECT 命令时抛出 java.sql.SQLSyntaxErrorException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54253269/

相关文章:

mysql - 从具有 "and"条件和 MIN() 函数的两个表中选择

java - 使用 DateTimeFormatterBuilder 解析缺失日期的日期,默认为月底

java - 使 Jar 文件成为应用程序

java - 如何将代码/描述扩展到复杂的对象?

mysql - SOLR 多个数据源上的索引和搜索

php - 如何将从 SQL 数据库表中提取的时间戳显示为用户时区?

php - 在 MySQL SELECT 中比较具有多个值的相同字段

java - while 和 do while 循环

java - weblogic服务器中thymeleaf登录错误

mysql - SQL-Oracle 查询