📄 dbenvinit.java
字号:
package pub.conn;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;
import pub.log.LogOutPut;
/**
* 数据库环境初始化类,封装了两个函数工具,完成对数据库的连接。
* 2009-03-19.
*
* @author zhengguohua
* @version 1.0
* @since JDK1.6(建议)
*/
public class DBEnvInit {
/** The instance. */
private static DBEnvInit instance = null;
private static List<Connection> connlist = Collections.synchronizedList(new LinkedList<Connection>());
private static Properties prop = new Properties();
/**
* The Constructor.
*/
public DBEnvInit(){
prop = getDBParamter();
String driver = prop.getProperty("driver");
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
LogOutPut.getInstance().info("加载驱动程序失败-驱动不存在");
e.printStackTrace();//加载驱动程序失败-驱动不存在。
}
}
/**
* 单例模式,保证系统只有一个DBEnvInit存活.
*
* @return 返回DBEnvInit对象
*/
public static synchronized DBEnvInit getInstance(){
if (instance == null){
instance = new DBEnvInit();
}
return instance;
}
/**
* 负责从属性文件读取数据库连接参数.
*
* @return 返回NULL就表示失败
*/
private Properties getDBParamter(){
InputStream in = null;
Properties prop = null;
try {
String db_properties = "db.properties";
prop=new Properties();
if(!(new File(db_properties)).exists()){
db_properties = "./bin/" + db_properties;
}
in = new FileInputStream(db_properties);
prop.load(in);
} catch (FileNotFoundException e) {
return null;
} catch (IOException e) {
return null;
} finally {
try {
in.close();
} catch (IOException e) {
in = null;
e.printStackTrace();
}
}
return prop;
}
/**
* 负责根据连接属性打开与数据库的连接.
*
* @param prop the prop
*
* @return 返回NULL表示数据库连接失败。失败的原因:驱动不存在、连接参数错误。
*/
private Connection getConnection(Properties props){
Connection con = null;
try {
String driver = props.getProperty("driver");
Class.forName(driver);
con = DriverManager.getConnection(props.getProperty("url"),
props.getProperty("user"),
props.getProperty("password"));
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null;//数据库连接失败-驱动不存在
} catch (SQLException e) {
e.printStackTrace();
return null;//数据库连接失败-连接错误
}
return con;
}
/**
* 负责创建一个数据库联接.
*
* @param prop the prop
*
* @return 返回NULL表示数据库连接创建失败。
*/
private void createConnection(){
try {
LogOutPut.getInstance().info("创建了一个连接...");
Connection con = DriverManager.getConnection(prop.getProperty("url"),
prop.getProperty("user"),
prop.getProperty("password"));
LogOutPut.getInstance().info("真正创建了一个连接...");
connlist.add(con);
} catch (SQLException e) {
e.printStackTrace();//数据库连接失败-连接错误
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 负责获取一个数据库的连接.
*
* @param prop the prop
*
* @return 返回NULL表示数据库连接获取失败。。
*/
public Connection getConnection(){
Connection con = null;
if(connlist==null || connlist.size()<1){
createConnection();
}
for(Connection conn: connlist){
con = conn;
break;
}
return con;
}
/**
* 关闭和数据库的相关连接.
*
* @param o Object对象。
*/
public void close(Object o) {
try {
if (o instanceof ResultSet) {
((ResultSet) o).close();
} else if (o instanceof Statement) {
((Statement) o).close();
} else if (o instanceof Connection) {
LogOutPut.getInstance().info("释放了一个连接.");
connlist.remove(o);
if(!(((Connection) o).isClosed())){
((Connection) o).close();
}
o = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -