PreparedStatement佔位符不打算用於表名或列名。它們僅用於實際列值。
但是,您可以使用String#format()
,這也是我經常這樣做的方式。例如:
private static final String SQL_SELECT_ORDER = "SELECT name, id, xyz FROM table ORDER BY %s";
...
public List<Data> list(boolean ascending) {
String order = ascending ? "ASC" : "DESC";
String sql = String.format(SQL_SELECT_ORDER, order);
...
又如:
private static final String SQL_SELECT_IN = "SELECT name, id, xyz FROM table WHERE id IN (%s)";
...
public List<Data> list(Set<Long> ids) {
String placeHolders = generatePlaceHolders(ids.size()); // Should return "?,?,?..."
String sql = String.format(SQL_SELECT_IN, placeHolders);
...
DAOUtil.setValues(preparedStatement, ids.toArray());
...
+1不錯,湯姆。魔鬼的細節 – wowest
jeebus,你以爲我會想到這一點。但是那清除了它。謝謝! – user16208
您只能在預準備語句中指定常量。 –