我已多次阅读Give me Parameterized SQL or give me death。
参数化SQL对字符串,日期和浮点数的优势非常明显且无可争议。
我的问题是:int
s怎么办?
我问,因为通常情况下,如果我正在编写查询或更新,并且唯一的参数是int
,我只需编写内联sql并将int附加为快捷方式( "select * from table where id = " + id
)。
我的问题:单独为int
使用参数化SQL有什么好处吗?
用Java说明:
这有什么好处:
Connection conn;
int id;
String sql = "select * from table where id = ?";
try (PreparedStatement p_stmt = conn.prepareStatement(sql)) {
p_stmt.setInt(1, id);
ResultSet results = p_stmt.executeQuery();
// ...
} catch (SQLException e) {
// ...
}
对此:
Connection conn;
int id;
String sql = "select * from table where id = " + id;
try (Statement stmt = conn.createStatement()) {
ResultSet results = stmt.executeQuery(sql);
// ...
} catch (SQLException e) {
// ...
}
答案 0 :(得分:1)
我想说最大的优势就是一致性。如果您认为通过字符串连接构建的所有SQL都是“错误的”,那么与诸如“由字符串连接构建的所有SQL错误,除了将int作为参数处理”之类的规则相比,更容易验证您的代码是“正确的” ”
另一种情况,比如:在线下,您想要对查询进行排序或分组,突然之间,您的行变成了这样的东西:
String sql = "select * from table where id = " + id + " order by somecolumn";
希望你能记住order
之前的空间。并且你身后的每个人也都会这样做。
对于只做一种方式的事情有很多话要说,特别是当大多数时候这种方式是正确的时候。