package RMS;
import   java.sql.*;   
import   java.io.*; 
import   java.util.*;  public class data{
//成员变量初始化 
Connection conn=null; //数据库连接 
Statement stmt=null;
ResultSet rs = null; //记录集 
String url="jdbc:sqlserver://localhost:1433;DatabaseName=demodb";
String user="sa";
String pa="123";public data() { 
try

 //注册数据库驱动程序为SQLserver2005驱动 
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); } 
catch(java.lang.ClassNotFoundException e)

System.err.println("mydb(): " + e.getMessage()); 
}}
//用来验证用户(username)及密码(password)的函数isRegister(),通过调用自定义(重载?)的executeQuery(String s)进行查询的
public boolean isRegister(String username,String password)
{
try{
//验证用户名与密码
String sSql="select * from db where username='"+username+"' AND password='"+password+"';";
//为了看运行的中间结果而加的语句:
System.out.println("sSql:"+sSql);
//调用executeQuery()函数
         rs = this.executeQuery(sSql); 
//为了看运行的中间结果而加的语句:
System.out.println("rs="+rs);
if(rs.next())
{
return true;
}
     else
    {
return false;
    }
}
catch(Exception e){
return false;
}
}public ResultSet executeQuery(String sql) { 
try { 
ResultSet rs = null;
    conn = DriverManager.getConnection(url,user,pa); 
    Statement stmt = conn.createStatement(); 
//后台输出传递的sql值:
    System.out.println("sql:"+sql);
//
    rs = stmt.executeQuery(sql); 

catch(SQLException ex) { 
     System.err.println("db.executeQuery: " + ex.getMessage()); 

return rs; 
} 我在JSP页面里传递的数据:?username=a&password=123(数据库里有这个数据,已经用其他方式验证过。)
后台显示:
sSql:select * from db where username='a' AND password='123';
sql:select * from db where username='a' AND password='123';
rs=null
就是在我定义的executeQuery()里rs始终是null.
但是我直接在isRegister()里调用Statement.executeQuery(String s)就能得到下面的结果,并且正确连接数据:
rs=com.microsoft.sqlserver.jdbc.SQLServerResultSet@b51c29
怎么回事?头又晕了...

解决方案 »

  1.   

    你把那个ResultSet rs = null; 这一句放到try的外面 
      

  2.   

    public ResultSet executeQuery(String sql) 
    返回的rs是类的实例变量 ,不是而executeQuery(String sql)中try{}语句中定义的rs
    解决方法
    删掉try{}中的ResultSet rs = null; 
    或者把ResultSet rs = null; 拿到try{}语句外面
      

  3.   

        2楼的 说法正确。try语句块定义的变量作用域只在{}里有效