public Database(String url, String user, String password) { this.url = url; this.user = user; this.password = password; } /** * 用JNDI数据源名初始化数据库对象,这个构造器用于从连接池取数据库连接的情况。 * @param datasource */ public Database(String datasource) { this.datasource = datasource; } /** * 得到数据库连接,对于是否从连接池里取连接做了自动处理即根据用户调用了哪个构造器 * 来判断是否直接与数据库建立连接还是从连接池里取连接。 * 对于用户来说不用考虑程序是从那里取得连接,他只管正确的初始化数据库对象。 * @return * @throws SQLException */ public Connection getConnection() throws Exception { if (datasource == null) { //直接与数据库建立连接 if (conn == null) { conn = DriverManager.getConnection(url, user, password); } } else { //从应用服务器的连接池里取得连接 ServiceLocator sl = ServiceLocator.getInstance(); DataSource ds = sl.getDataSource(datasource); return ds.getConnection();//每调用一次都返回一个连接池中的数据库连接 } return conn; } /** * 释放连接,如果是直接与数据库连接的情况则什么也不做 * 如果是从连接池中取得的连接那么释放传来的连接 * @param conn */ public void disConnect(Connection connection) { if (datasource != null) { //只处理从连接池取连接的情况 try { if (connection != null) { connection.close(); } } |