为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

撒科打诨 2022-05-12 18:19:32
我有一个使用 JDBC API 从 MySQL 数据库表中获取记录的方法。我一直在使用的命令是:"SELECT column_1, column_2, ... FROM table;"列名以 ArrayList 的形式提供给方法,使用 StringBuilder 根据列名和表名构造查询。当使用 createStatement() 执行构造查询时,它会抛出:"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 $tableName' at line 1"这是该方法的完整代码: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 程序测试了这个查询,它们都运行良好。除了在这个方法中。请帮忙。
查看完整描述

2 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

问题 ID 在


 for (int i = 0; i < selectedParams.size(); i++) {

                query.append(selectedParams.get(i)).append(", ");

            }

上面的代码将在参数名称之后附加一个额外的“,”,您可以使用


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


查看完整回答
反对 回复 2022-05-12
?
青春有我

TA贡献1784条经验 获得超8个赞

问题是

query.append("\b\b from ")

不会从 StringBuilder删除尾随的逗号和空格。当您将其打印到控制台时,它可能看起来像,但该字符串实际上确实包含

select territory, ␈␈ from offices

而 MySQL 显然不喜欢这样。

相反,您实际上想从 StringBuilder 中删除逗号(并留出空格):

query.deleteCharAt(query.length() - 2).append("from ")


查看完整回答
反对 回复 2022-05-12
  • 2 回答
  • 0 关注
  • 548 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号