Java SQL语句语法错误时ResultSet的值?
我正在使用mySQL。如您所见,SQL语句在Java SQL语句语法错误时ResultSet的值?,java,mysql,jdbc,Java,Mysql,Jdbc,我正在使用mySQL。如您所见,SQL语句在SELECT处出错。所以,我想知道rs的值是多少? 我希望得到一些建议。我非常感谢你 String sql = "SELCT * FROM user WHERE username = '" + username + "' and password = '" + password + "'"; ResultSet rs = stm.executeQuery(sql); 没有价值,因为它会抛出一个错误。正如链接的Javadoc所说 返回: 包含给定查询
SELECT
处出错。所以,我想知道rs
的值是多少?
我希望得到一些建议。我非常感谢你
String sql = "SELCT * FROM user WHERE username = '" + username + "' and password = '" + password + "'";
ResultSet rs = stm.executeQuery(sql);
没有价值,因为它会抛出一个错误。正如链接的Javadoc所说 返回: 包含给定查询生成的数据的
ResultSet
对象;从不null
抛出:
-如果发生数据库访问错误,则对关闭的语句调用此方法
,给定的SQL语句生成除单个结果集
对象以外的任何对象,对PreparedStatement
或CallableStatement
调用此方法
它将返回一个异常,其中包含语法错误之类的消息。最简单的方法是通过在代码中放置断点并检查/监视变量值来调试代码。大多数IDE都有这些调试特性。除了Elliott Frisch的回答之外,如果我像下面那样重新构造代码,那么在SQL无效/不正确的情况下,控制将转到
catch
块,您可以看到rs
的值保持null
public void executeQuery(Connection conn, String username,String password) {
String sql = "SELCT * FROM user WHERE username = '" + username + "' and password = '" + password + "'";
ResultSet rs = null;
Statement stm = null;
try {
stm = conn.createStatement();
rs= stm.executeQuery(sql);
while(rs.next()) {
//Extract ResultSet here as per needed logic
}
} catch (SQLException e) {
// Your control comes here if query is wrong , put a break point at below line & examine value of rs
e.printStackTrace();
}finally {
// Close resources not needed after this method call like - result sets , statements & connection
}
}
第一个语句不会执行,所以下一个执行取决于您将如何处理该异常。因此,如果出现异常,并且您也处理了异常,则ResultSet中会出现null,因为没有为其分配值。与您的问题无关,但您应该使用
PreparedStatement
,而不是将SQL注入查询中。它会引发异常,不返回异常。我也是这么说的,但感谢您的提及。返回和抛出在Java中是根本不同的事情。精确有助于避免混淆。