我有一個(gè)使用 JDBC API 從 MySQL 數(shù)據(jù)庫表中獲取記錄的方法。我一直在使用的命令是:"SELECT column_1, column_2, ... FROM table;"列名以 ArrayList 的形式提供給方法,使用 StringBuilder 根據(jù)列名和表名構(gòu)造查詢。當(dāng)使用 createStatement() 執(zhí)行構(gòu)造查詢時(shí),它會(huì)拋出:"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; }運(yùn)行代碼時(shí),生成的查詢表單打印語句如下所示:"query:select territory from offices"我已經(jīng)直接針對 db 和另一個(gè)簡單的 JDBC 程序測試了這個(gè)查詢,它們都運(yùn)行良好。除了在這個(gè)方法中。請幫忙。
2 回答

慕沐林林
TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個(gè)贊
問題 ID 在
for (int i = 0; i < selectedParams.size(); i++) {
query.append(selectedParams.get(i)).append(", ");
}
上面的代碼將在參數(shù)名稱之后附加一個(gè)額外的“,”,您可以使用
query.append(String.join(", ", selectedParams))

青春有我
TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊
問題是
query.append("\b\b from ")
不會(huì)從 StringBuilder中刪除尾隨的逗號(hào)和空格。當(dāng)您將其打印到控制臺(tái)時(shí),它可能看起來像,但該字符串實(shí)際上確實(shí)包含
select territory, ?? from offices
而 MySQL 顯然不喜歡這樣。
相反,您實(shí)際上想從 StringBuilder 中刪除逗號(hào)(并留出空格):
query.deleteCharAt(query.length() - 2).append("from ")
添加回答
舉報(bào)
0/150
提交
取消