dbcp jdbc数据库连接池问题!
//jdbcUtil (ConnectionJDBC 同时实现单例)
private static String driverName="com.microsoft.jdbc.sqlserver.SQLServerDriver";
private static String url="jdbc:microsoft:sqlserver://192.168.11.33:1433;databasename=cicenterv2test;sendStringParametersAsUnicode=false";
private static String userName="cicenter";
private static String passworld="123456";
public static Connection getConn(){
Connection conn=null;
try {
BasicDataSource bds=new BasicDataSource();
bds.setDriverClassName(driverName);
bds.setUrl(url);
bds.setUsername(userName);
bds.setInitialSize(2);//初始连接
bds.setMaxActive(5);//最大连接
bds.setMaxIdle(2);//最大空闲
bds.setMinIdle(1);//最小连接数
bds.setMaxWait(1000);
conn=bds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//关闭连接的方法这里就不写出来了。我这个主要是用dbcp做连接池
下面是实际的一个用户登录的DAo:
private PreparedStatement ps=null;
private ResultSet rs=null;
private Connection conn=null;
public User userLogin(String username,String pwd) {
User user =new User();
try {
conn=ConnectionJDBC.getInstance().getConn();
String sql="select * from wuuser where username=? and pwd=?";
ps=conn.prepareStatement(sql);
ps.setString(1, username);
ps.setString(2, pwd);
rs=ps.executeQuery();
while(rs.next()){
user.setId(rs.getInt("id"));
user.setPwd(rs.getString("pwd"));
user.setUsername(rs.getString("username"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
ConnectionJDBC.getInstance().closConn(conn,ps, rs);
}
return user;
}
我断点 当执行到登录这个dao的时候,conn是null,程序也没有报错 直接到了finally里面去
这是怎么回事,连接没有获取到
数据库,密码,用户什么的保证都是正确的,因为之前我用的jdbc连接都就可以只是太慢了,我就想用连接池,但是就这样不行了
[解决办法]
这个代码不敢恭维啊,你这连接池就没作用,每次都new个datasouce,比直接jdbc开销还大。
你原来用jdbc连接慢应该是你用了jdk1.5或更高的版本才会出现这个问题,jdk1.4就不会慢,要解决这个问题很简单,在你获取连接之前,先执行ProxySelector.setDefault(null);这行代码就可以了。