/** 统计数据源的一些信息 */ public void info() { if (closed) { Log.w(tag, "DataSource is closed."); return; } pool.staticsInfo(); }
/** * 创建数据源 * * @return 创建好的数据源 * @throws SQLException */ protected DataSource createDataSource() throws SQLException { if (closed) throw new SQLException("The DataSource is closed."); if (dataSource != null) { return dataSource; } synchronized (this) { if (dataSource != null) return dataSource; Driver driverToUse = this.driver; if (driverToUse == null) { Class<?> driverFromCCL = null; if (driverClassName != null) { try { driverFromCCL = Class.forName(driverClassName); } catch (ClassNotFoundException e) { Log.e(e, tag, "Cannot load JDBC driver class " + driverClassName); throw new SQLException(e); } } try { if (driverFromCCL == null) { driverToUse = DriverManager.getDriver(url); } else { driverToUse = (Driver) driverFromCCL.newInstance(); if (!driverToUse.acceptsURL(url)) { throw new SQLException("No suitable driver", "08001"); } } } catch (Exception e) { Log.e( e, tag, "Cannot create JDBC driver of class %s for connection url %s", driverClassName != null ? driverClassName : "", url); throw new SQLException(e); } this.driver = driverToUse; } String user = userName; if (user != null) { props.put("user", user); } else { Log.w(tag, "DataSource configured without a 'username'"); } String pwd = password; if (pwd != null) { props.put("password", pwd); } else { Log.w(tag, "DataSource configured without a 'password'"); } try { connectionFactory = new JdbcConnectionFactory(driver, url, props); jdbcConnectionValidator = new JdbcConnectionValidator(); pool = new BoundedBlockingPool<>(maxConnections, jdbcConnectionValidator, connectionFactory); dataSource = new PooledDataSource<>(pool); dataSource.setLogWriter(logWriter); } catch (SQLException e) { Log.e(e, tag, "Cannot create a datasource."); throw new SQLException(e); } return dataSource; } }