我是一个菜鸟,刚写了一个用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是成功了还是失败了呢??
谢谢!!!
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是成功了还是失败了呢??
谢谢!!!
以下是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??
}
}
}
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;
}
///////////////////////////////////////////////////////////////////////////////////////////////}
把CreatCN方法中的Statement St = Scn.createStatement();
改为St = Scn.createStatement();
Main函数的参数:String arg[]是做什么的,我一直没弄明白,谢谢!!
问题已经解决。不过我家了一个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());
} }
}
Connection Scn = DriverManager.getConnection(url,user,password);
改为Scn = DriverManager.getConnection(url,user,password);
JDBCOBJ.CloseCN()
的
Scn.close();
出错
谢谢piaopiao11()!!
问题都搞定了!