在Java中使用PreparedStatement操作数据库时产生了一个小问题,想当然的把数据库的列放入了占位符里:
public void updateUser(User user, String columnLabel, Object value) { connection = JDBCUtils.getConnection(); String sql = "update user set ? = ? where uid = ?"; try { ps = connection.prepareStatement(sql); ps.setObject(1,columnLabel); ps.setObject(2,value); ps.setInt(3,user.getUid()); ps.executeUpdate(); } catch (SQLException e) { System.out.println(this.getClass()+"updateUser"); e.printStackTrace(); }finally { JDBCUtils.close(connection,ps,rs); } System.out.println("修改成功"); }
这种做法会产生SQL语法错误,正确的做法是在sql变量中拼接columnLabel,然后对另外两个占位符进行设置,这样就不会产生SQL的语法错误。
String sql = "update user set "+columnLabel+" = ? where uid = ?"; ps.setObject(1,value); ps.setInt(2,user.getUid());