我总是阅读博客Java Revisited,今天我正在阅读文章Why use PreparedStatement in Java JDBC - Example Tutorial。在一个点上笔者写了关于查询的参数,那就是更好的,更安全,更表演使用API提供比来连接字符串的参数,并使用下面的例子:即使值始终相同,参数化PreparedStatement是否更好?
SQL查询1:PreparedStatement的使用字符串连接
String loanType = getLoanType();
PreparedStatement pstmt = conn.prepareStatement("select banks from loan where loan_type=" + loanType);
SQL查询2:使用PreparedStatement的
PreparedStatement pstmt = conn.prepareStatement("select banks from loan where loan_type=?");
pstmt.setString(1, loanType);
笔者解释说,通过使用参数,JDBC驱动程序将检查数据和连接字符串司机d参数化查询它不会运行发送的SQL,即如果我们有着名的OR 1 = 1
,查询将始终返回true,并且有经典的SQL注入情况。
我不清楚的是,为什么一个人比另一个更具表现力,再加上,如果我的价值总是相同的,这是真的吗?
PreparedStatement pstmt = conn.prepareStatement(select * from users where active = 'S');
或者是更多表演用途如下:
PreparedStatement pstmt = conn.prepareStatement(select * from users where active = ?);
pstmt.setString(1, "S");
另一个问题是,在这种情况下,我认为安全问题是一样的,因为没有参数,通过用户传递有没有攻击,对吧?
不幸的是,人们在不解释原因的情况下保持低调。多么可怜! –