应该在哪里?放在PreparedStatement中?
Where should ? be placed in a PreparedStatement?
我正在使用 PreparedStatement
到 select 来自 table 的记录:
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 = ?
,没有。
?
应该放在准备好的语句中的什么地方?
列名必须硬编码,只能使用?
设置列值。
但您可以通过执行以下操作来设置动态列名称:
String sql = "SELECT "+ columnName +" FROM member WHERE member_id = ?";
?用于输入值(通常在 WHERE
子句条件中)。
?不适用于选定的列。
我正在使用 PreparedStatement
到 select 来自 table 的记录:
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 = ?
,没有。
?
应该放在准备好的语句中的什么地方?
列名必须硬编码,只能使用?
设置列值。
但您可以通过执行以下操作来设置动态列名称:
String sql = "SELECT "+ columnName +" FROM member WHERE member_id = ?";
?用于输入值(通常在 WHERE
子句条件中)。
?不适用于选定的列。