package dbconn ;
import java.sql.* ;
// 接数据库、关闭数据库
public class DbConnection
{
private final String DBDRIVER = "sun.jdbc.odbc.JdbcOdbcDriver" ;
private final String DBURL = "jdbc:odbc:logistics" ;
private final String DBUSER = "admin3" ;
private final String DBPASSWORD = "admin3" ;
private static Connection conn = null ;
public DbConnection()
{
try
{
Class.forName(DBDRIVER) ;
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;
}
catch (Exception e)
{
}
}
// 取得数据库连接
public static Connection getConnection()
{
return conn ;
}
// 关闭数据库连接
public static void close()
{
try
{
conn.close() ;
}
catch (Exception e)
{
}
}
};
////////////////////////////////////////////////////////
package wh;
import java.sql.*;
import dbconn.*;
//把从表corp中的corp_name字段全部存放到数组str中,并返回这个数组
public class WhCorp {
public String[]updateUser( ){
String []str = null;
Statement stmt=null;
try{
stmt = DbConnection.getConnection().createStatement();
ResultSet rs = stmt.executeQuery(" select corp_name from corp ");
ResultSet rsCount =stmt.executeQuery("select count(*) from corp");
rsCount.next();
int tc = rsCount.getInt(1); //得到记录的个数
for(int i=0;i<tc;i++){
str[i]=(String) rs.getObject(i+1); //通过循环存如str中
}
rsCount.close();
rs.close();
}catch(SQLException e){
e.printStackTrace();
}
finally{
DbConnection.close();
}
return str;
}
}
/////////////////////////////////////
然后我在jsp里调用第二个javabean说我数组里什么也没有,直接空指针错误.
[此贴子已经被作者于2007-5-29 23:06:54编辑过]
----------------解决方案--------------------------------------------------------
stmt = DbConnection.getConnection().createStatement();
这样写你的con是空的啊,你的con对连实例化在DbConnection的构造函数中,如果你要用单例模式就应该把实例化写到getConnection中,把构造函数改成私有的。
String[] str这写的好像也有问题,你下面直接str[i]这样用了,没有对数据分配大小空间。
rsCount.next();//这里也有问题,你指针下移了,查出的数据会少一个。
int tc = rsCount.getInt(1); //得到记录的个数 -----行得记录总数也不是这样用的,有别的方法
所以你后面的for可能就是空的。
----------------解决方案--------------------------------------------------------
str[i]=(String) rs.getObject(i+1);
改成这个:
str[i]=(String)rs.getObject(1);
----------------解决方案--------------------------------------------------------
[QUOTE]
[QUOTE]rsCount.next();
int tc = rsCount.getInt(1);
改为:
int tc = 0;
if(rsCount.next){
tc = rsCount.getInt(1);
}
[/QUOTE]stmt = DbConnection.getConnection().createStatement();
这样写你的con是空的啊,你的con对连实例化在DbConnection的构造函数中,如果你要用单例模式就应该把实例化写到getConnection中,把构造函数改成私有的。
我认为这里的conn,不为空。在构造函数里已经获得值了
改成这个:
str[i]=(String)rs.getObject(1);
将i+1改为1,这只能得到一个值。
----------------解决方案--------------------------------------------------------
int tc = rsCount.getInt(1);
改为:
int tc = 0;
if(rsCount.next){
tc = rsCount.getInt(1);
}
这样写你的con是空的啊,你的con对连实例化在DbConnection的构造函数中,如果你要用单例模式就应该把实例化写到getConnection中,把构造函数改成私有的。
我认为这里的conn,不为空。在构造函数里已经获得值了
这里根本就没得到CONN,他的DbConnection根本没实例化,怎么会调用构造函数。他这种写法是想用单例模式或是想把方法写成类调用静态方法的模式,但是构造方法不会被运行的。
----------------解决方案--------------------------------------------------------