沈阳理工大学学士学位论文
4 详细设计
4.1 编写连接数据库工具类
在com.zpark.soft.tool包下有一个叫JavaTool.java的工具类。该类主要是负责加载数据库连接驱动程序,以及创建连接和关闭连接。为了最大程度地应用每一个已经创建的数据库连接,这里将其保存到了TreadLocal类的对象中。如果数据库不存在,还负责建立数据库,同时加入连接池保证多用户同时访问数据库,减少创建连接负担,提高性能。
首先在数据库连接累中定义一些常量,包括连接数据库使用的驱动程序、连接数据库的路径,并且定义一个TreadLocal类的对象,用来保存已经创建的数据库连接。具体代码如下:
// 批处理
public static final int batchSize;
// 读取配置文件 , 避免修改Java源代码 private static Properties prop = new Properties();
// 定义中介接口 用泛型定义类型 泛型是用来表示要存取的对象类型 private static ThreadLocal
然后编写用来加载数据库驱动程序的代码。通常情况下将其放到静态代码块中,这样做的好处是只是在该类第一次被加载(即第一次被调用)时执行加载数据库驱动程序以及创建数据库的动作,避免了反复加载数据库驱动程序,或者是反复判断数据库是否已经存在,从而提高软件的性能。具体代码如下:
static {
InputStream is = null; try {
is = JavaTool.class
.getResourceAsStream(\);
prop.load(is); // 读取配置文件中的内容至Properties对象 batchSize = Integer.valueOf(prop.getProperty(\));
19
沈阳理工大学学士学位论文
}
} catch (Exception e) {
throw new RuntimeException(e);
} finally { }
if (is != null) { }
try {
is.close();
} catch (Exception e) { }
e.printStackTrace();
编写用来创建连接和关闭数据库连接的方法。这里将这两个方法均定义为静态的,这样通过类名就可以调用方法,方便调用。在这两个方法中首先TreadLocal
类的对象中获得连接,然后判断是否存在可用的数据库连接,在判断连接池的状态,判断是否要从连接池中获得连接还是重新创建链接。然后在执行如果连接存在则直接返回或关闭连接,否则重新建立连接。具体代码如下:
//获得连接方法
public static Connection getConnection() {
Connection conn = null; try {
conn = t1.get(); // 从当前线程中获得存储的conn if (conn == null) { // 第一次,线程中还没有conn
if (Boolean.valueOf(prop.getProperty(\))) { //
使用连接池创建创建
Context context = new InitialContext(); DataSource ds = (DataSource) context
.lookup(\);
conn = ds.getConnection();// 使用原始办法,直接从数据
20
沈阳理工大学学士学位论文
库获得连接
} else {
Class.forName(prop.getProperty(\)); // 创建新连接
conn=DriverManager.getConnection(
prop.getProperty(\), prop.getProperty(\), prop.getProperty(\));
}
}
return conn;
}
t1.set(conn);// 存储conn至当前线程
} catch (Exception e) { }
e.printStackTrace();
throw new RuntimeException(e);// 保留原始异常的信息
// 在DAO层关闭的方法
public static void close(PreparedStatement stmt, ResultSet rs) {
if (rs != null) { }
if (stmt != null) { }
try {
stmt.close(); try {
rs.close();
} catch (SQLException e) { }
} catch (SQLException e) { }
21
沈阳理工大学学士学位论文
}// 关闭连接时,应当从当前线程清除 原先存储的conn // 在业务层中关闭的连接
public static void closeConnection() { }
Connection conn = t1.get();// 取得当前线程的conn if (conn != null) { }
try {
conn.close();// 关闭连接
} catch (SQLException e) { }
t1.set(null);// 从当前线程清除conn
e.printStackTrace();
22
相关推荐: