助学系统设计

发布时间 : 星期日 文章助学系统设计更新完毕开始阅读

沈阳理工大学学士学位论文

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 t1 = new 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

联系合同范文客服:xxxxx#qq.com(#替换为@)