我正在使用PreparedStatement
从表中选择记录:
public static String getMemberInfo(String columnName, Integer memberId) {
String memberInfo = "";
String sql = "SELECT ? FROM member WHERE member_id = ?";
DatabaseConnector.setConn();
try(Connection conn = DatabaseConnector.getConn();
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, columnName);
ps.setInt(2, memberId);
try(ResultSet rs = ps.executeQuery()) {
if(rs.next()) {
memberInfo = rs.getString(columnName);
}
}
} catch(SQLException se) {
se.printStackTrace();
}
return memberInfo;
}
我用的时候
SELECT " + columnName + " FROM member WHERE member_id = ?
,它有效。
但是当我使用时
SELECT ? FROM member WHERE member_id = ?
,但事实并非如此。
?
应该放在准备好的陈述中?
答案 0 :(得分:4)
?用于输入值(通常在{{1}}子句条件中)。
?不适用于选定的列。
答案 1 :(得分:2)
列名必须是硬编码的,只能使用?
设置列值。
但你可以通过这样的方式设置动态列名:
String sql = "SELECT "+ columnName +" FROM member WHERE member_id = ?";