JDBC访问SQLServer出现:java.lang.NullPointerException问题???

wts173 2006-07-13 10:56:50
我是一个菜鸟,刚写了一个用JDBC访问SQLServer的小程序,出现如下错误:
CreatCnSuc!
java.lang.NullPointerException
at JDBCOBJ.JDBCOBJ.RsQuery(JDBCOBJ.java:50)
at JDBCOBJ.TestDB.main(TestDB.java:24)
QueryErr!
java.lang.NullPointerException
at JDBCOBJ.TestDB.main(TestDB.java:25)



我的源代码:



package JDBCOBJ;
import java.sql.*;
public class TestDB {
public static void main(String args[])
{
String sqlStr = "select * From M_Oper";
ResultSet mRs;
boolean rtn = false;
String ServerNa = "w";
String DBNa = "HospitalDB";
String UserNa = "sa";
String PWD = "";
JDBCOBJ jdbc = new JDBCOBJ();
if(jdbc.CreatCN(ServerNa,DBNa,UserNa,PWD)==false)
{
System.out.println("CreatCnErr!");
}
else
{
System.out.println("CreatCnSuc!");

try
{
mRs = jdbc.RsQuery(sqlStr);
while(mRs.next())
{
System.out.print(mRs.getString("OperID") + " ");
System.out.print(mRs.getString("OperNa") + " ");
System.out.println(mRs.getString("OperCNa"));
}
}
catch(Exception err)
{
err.printStackTrace(System.out);
}



}

}
}



这是调用它的代码:

package JDBCOBJ;
import java.sql.*;
public class TestDB {
public static void main(String args[])
{
String sqlStr = "select * From M_Oper";
ResultSet mRs;
boolean rtn = false;
String ServerNa = "w";
String DBNa = "HospitalDB";
String UserNa = "sa";
String PWD = "";
JDBCOBJ jdbc = new JDBCOBJ();
if(jdbc.CreatCN(ServerNa,DBNa,UserNa,PWD)==false)
{
System.out.println("CreatCnErr!");
}
else
{
System.out.println("CreatCnSuc!");

try
{
mRs = jdbc.RsQuery(sqlStr);
while(mRs.next())
{
System.out.print(mRs.getString("OperID") + " ");
System.out.print(mRs.getString("OperNa") + " ");
System.out.println(mRs.getString("OperCNa"));
}
}
catch(Exception err)
{
err.printStackTrace(System.out);
}



}

}
}


请教各位高手,请帮我看一下是什么地方出问题了??谢谢了先!


还有,能不能帮我把这个类优化一下?由于我是初学Java这个类有好多地方写的有问题,比如RsQuery里,如果出现异常怎么办?还是返回Rs么?那么我怎么判断RsQuery是成功了还是失败了呢??


谢谢!!!
...全文
700 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
seesea10523 2006-07-14
  • 打赏
  • 举报
回复
学习ing
wts173 2006-07-14
  • 打赏
  • 举报
回复

谢谢piaopiao11()!!
问题都搞定了!
piaopiao11 2006-07-14
  • 打赏
  • 举报
回复
因为你没有给class的全局变量赋值,然后你又去用它当然空指针了
wts173 2006-07-14
  • 打赏
  • 举报
回复
好像是
JDBCOBJ.CloseCN()

Scn.close();
出错
piaopiao11 2006-07-14
  • 打赏
  • 举报
回复
在class中声明了全局变量后就不要在方法中在定义局部变量了
Connection Scn = DriverManager.getConnection(url,user,password);
改为Scn = DriverManager.getConnection(url,user,password);
wts173 2006-07-14
  • 打赏
  • 举报
回复
就是在:rtn=jdbc.CloseCN();这里。
wts173 2006-07-14
  • 打赏
  • 举报
回复
谢谢piaopiao!!
问题已经解决。

不过我家了一个CloseCN的过程,怎么又出现空指针了呢??

不好意思阿,我刚接触java,什么都不会。能不能给我讲得详细一点??


package JDBCOBJ;
import java.sql.*;
public class TestDB {
public static void main(String args[])
{
String sqlStr = "select * From M_Oper";
ResultSet mRs;
boolean rtn = false;
String ServerNa = "w";
String DBNa = "HospitalDB";
String UserNa = "sa";
String PWD = "";
JDBCOBJ jdbc = new JDBCOBJ();
if(jdbc.CreatCN(ServerNa,DBNa,UserNa,PWD)==false)
{
System.out.println("CreatCnErr!");
}
else
{
System.out.println("CreatCnSuc!");

try
{
mRs = jdbc.RsQuery(sqlStr);
while(mRs.next())
{
System.out.print(mRs.getString("OperID") + " ");
System.out.print(mRs.getString("OperNa") + " ");
System.out.println(mRs.getString("OperCNa"));
}
}
catch(Exception err)
{
err.printStackTrace(System.out);
}
}
try
{
rtn=jdbc.CloseCN();
if (rtn)
{
System.out.println("CloseCnSuc!");
}
else
{
System.out.println("CloseCnErr!");
}
}
catch(Exception e)
{
System.out.println(e.getMessage());
}

}
}


wts173 2006-07-14
  • 打赏
  • 举报
回复
请问:mx1029()
Main函数的参数:String arg[]是做什么的,我一直没弄明白,谢谢!!
piaopiao11 2006-07-14
  • 打赏
  • 举报
回复
RsQuery方法的St为null
把CreatCN方法中的Statement St = Scn.createStatement();
改为St = Scn.createStatement();
kevinliuu 2006-07-14
  • 打赏
  • 举报
回复
很乱
mx1029 2006-07-14
  • 打赏
  • 举报
回复
import java.sql.*;
import java.lang.*;
import java.util.*;

public class ConMSSQL{

String sDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
String sConn="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=northwind";
Connection conn=null;
ResultSet rs=null;
String user="sa";
String password="";
Statement stmt=null;
//public String STR;

public ConMSSQL(){
Connection con=null;
try{
Class.forName(sDriver).newInstance();//
con=DriverManager.getConnection(sConn,this.user,this.password);
}catch(Exception e){
System.err.println(e.getMessage());
//e.printStackTrace();
}
}

public void User(String user){
this.user=user;
}

public void Password(String password){
this.password=password;
}

////////////////////////////////////////////////////////////////////////////////////////////throws Exception
public String getSTR(String v){
String STR = "";
rs=null;
String sql = "select productid,productname,unitsinstock,unitprice from products";
try{
conn=DriverManager.getConnection(sConn,this.user,this.password);;
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);//
rs=stmt.executeQuery(sql);

try{
//while(rs.next()){
// int id = rs.getInt(1);
// String name= rs.getString(2);
// String unitsinstock = rs.getString(3);
// float unitprice = rs.getFloat(4);
//}
//if(rs.next()){
// STR="ok";
//}
//rs.close();
long CurTime = System.currentTimeMillis();

for(int i=0;i<200;i++){
rs=stmt.executeQuery(sql);
}
long AfterTime = System.currentTimeMillis();
//System.out.println("耗时:"+(AfterTime-CurTime)+"毫秒");
STR = String.valueOf(AfterTime-CurTime);

}catch(Exception e){
STR="wrong"+e;
//System.out.print(e);
}

}catch(SQLException a){
System.err.println(a.getMessage());
STR="wrongfff"+a;
}
//System.out.print(STR);
//STR="kao";
//rs=null;
return STR;
}
////////////////////////////////////////////////////
public static void main(String args[]) {
ConMSSQL p = new ConMSSQL();
if(args.length == 0) {
System.out.println("Not Set!");
}else{
for (int i=0; i < args.length; i++) {
String arg = args[i];

long CurTime = System.currentTimeMillis();

System.out.println(p.executeQuery(arg));

//System.out.println(CurTime);
//for(int x=0; x<200; x++){
//p.getSTR(arg);
//}
long AfterTime = System.currentTimeMillis();
System.out.println("耗时:"+(AfterTime-CurTime)+"毫秒");
}
}
}
/////////////////////////////////////////////////////
public ResultSet executeQuery(String sql){
rs=null;
try{
conn=DriverManager.getConnection(sConn,this.user,this.password);
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs=stmt.executeQuery(sql);
}catch(SQLException a){
System.err.println(a.getMessage());
}
return rs;
}
///////////////////////////////////////////////////////////////////////////////////////////////

}
wts173 2006-07-14
  • 打赏
  • 举报
回复
哦,不好意思,贴错了!!
以下是JDBCOBJ这个类

package JDBCOBJ;
import java.sql.*;
public class JDBCOBJ {
Connection Scn; // connection object
Statement St; //Statement object
ResultSet Rs; //ResultSet object
JDBCOBJ()
{

}
public boolean CreatCN(String ServerNa,String DBName ,String UserNa,String PWD)
{//OpenCN
String url="jdbc:microsoft:sqlserver://" + ServerNa + ":1433;DatabaseName=" + DBName;
String user="sa";
String password="";
try
{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection Scn = DriverManager.getConnection(url,user,password);
Statement St = Scn.createStatement();
return true;

}
catch(Exception err)
{
err.printStackTrace(System.out);
return false;
}
}
public boolean CloseCN()
{//CloseCN
try
{
Rs.close();
St.close();
Scn.close();
return true;

}
catch(Exception err)
{
err.printStackTrace(System.out);
return false;
}
}
public ResultSet RsQuery(String sqlStr)
{
try
{
Rs = St.executeQuery( sqlStr );
System.out.println("QuerySuc!");
return Rs;

}
catch(Exception err)
{
err.printStackTrace(System.out);
System.out.println("QueryErr!");

//Rs = new ResultSet;

return Rs; //Can return Or Not??
}
}

}
kingdoom 2006-07-13
  • 打赏
  • 举报
回复
mRs = jdbc.RsQuery(sqlStr); 出错 jdbc应该为NULL

JDBCOBJ jdbc = new JDBCOBJ();这个类怎么写的
limbo1982 2006-07-13
  • 打赏
  • 举报
回复
空对象..
believefym 2006-07-13
  • 打赏
  • 举报
回复
如果我没看走眼的话,两段代码是同一段

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧