绑定变量 这个就是Java里面的PreparedStatement了。 PreparedStatement pstmt = con.prepareStatement("UPDATE table4 SET m = ? WHERE x = ?"); pstmt.setString(1, "Hi"); for (int i = 0; i < 10; i++) { pstmt.setInt(2, i); int rowCount = pstmt.executeUpdate(); } 123456 123456 这样一个更新的sql语句分成了两部,第一步是把带?的sql语句发送到服务器做预编译。第二步就是设置参数并且执行了。 这样做会有如下的好处: 解析一次sql执行计划会有部分缓存二进制的方式只发送参数和句柄减少通信量 还有一种预发可以SQL接口绑定变量,这个不常用不说了 限制 会话级别的如果只执行一次的SQL,使用绑定变量会多一次通讯的开销不要忘记释放使用绑定变量的资源,因为mysql对这个有一个上线 SQL注入 使用绑定变量还能够额外获得一个好处,即能够防止SQL注入攻击。 比如登陆的时候我们的代码是这样的: String sql = "SELECT COUNT(*) FROM user WHERE username='"+ username+"' AND password ='"+ password +"';" // 如果password 传入 ' OR '1'='1这个时候sql就变成了: // SELECT COUNT(*) FROM user WHERE username='wzj' AND password = '' OR '1'='1' 这个时候就是查询所有,就相当于永远为true了。 1234 1234 使用绑定变量就可以有效的避免这个问题。