日期:2014-05-20  浏览次数:20744 次

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);这行代码就可以了。