应该在哪里?被放置在PreparedStatement?

时间:2015-06-08 06:20:04

标签: java mysql sql jdbc prepared-statement

我正在使用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 = ?,但事实并非如此。

?应该放在准备好的陈述中?

2 个答案:

答案 0 :(得分:4)

?用于输入值(通常在{{1}}子句条件中)。

?不适用于选定的列。

答案 1 :(得分:2)

列名必须是硬编码的,只能使用?设置列值。

但你可以通过这样的方式设置动态列名:

String sql = "SELECT "+ columnName +" FROM member WHERE member_id = ?";