JDBC ResultSet SQL错误

时间:2011-11-24 10:50:18

标签: sql jsp jdbc

我编写了以下部分,它是一个Java方法,带有两个STRING参数login和pass,表示用户的登录名和密码,以检查用户是否在数据库表中找到。

Statement stmt = connection.createStatement();

ResultSet rs = statement.executeQuery ("SELECT * FROM users WHERE username = '" 
        + login + "' AND passwd = '" + pass + "'");

测试时的代码工作正常。我在一本书中读到,有些情况下它可能会产生SQL错误,但它没有提到上述代码可能导致SQL错误的情况。你能否简单地告诉我这些情况?此外,我如何编写一个代码版本,以防止发生此类错误的可能性?

2 个答案:

答案 0 :(得分:0)

第一个问题是这段代码对SQL Injection是可以理解的。为了狂热,您可以使用Prepared Statements。这可能是本书可能讨论的一个潜在威胁。

http://www.unixwiz.net/techtips/sql-injection.html

使用预准备陈述的例子

String query = "SELECT * FROM users WHERE username = ? AND passwd = ?";

PreparedStatement ps = connection.prepareStatement(query);

ps.setString(1, login);
ps.setString(2, passwd);

Resultset rs = rs = ps.executeQuery();

答案 1 :(得分:0)

你应该编写prevent sql注入的代码。使用PreparedStatement(参数化语句)和Stored proc而不是硬编码的sql字符串。