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
怎么回事?头又晕了...
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
怎么回事?头又晕了...
返回的rs是类的实例变量 ,不是而executeQuery(String sql)中try{}语句中定义的rs
解决方法
删掉try{}中的ResultSet rs = null;
或者把ResultSet rs = null; 拿到try{}语句外面