Java SQL语句语法错误时ResultSet的值?

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所说 返回: 包含给定查询

我正在使用mySQL。如您所见,SQL语句在
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中是根本不同的事情。精确有助于避免混淆。