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
您只能在预准备语句中指定常量。 –