15.2.4 建立一个数据库连接组件
在一般的大型项目开发中,都需要建立一个数据库连接组件,其他的业务逻辑或者是DAO,如果需要访问数据库,只需要调用该组件即可,如代码15.3所示,为一个标准的MySQL数据库连接组件。
代码15.3 MySQL数据库连接组件
package bbs.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.naming.*;
import javax.sql.DataSource;
public class DbConn {
private static DataSource ds = null;
private static Connection conn = null;
// 使用JDBC连接数据库
public static Connection getConn_jdbc() {
try {
//定义url,指定MySQL数据库端口和数据库名
String url = "jdbc:mysql://localhost:3306/bbsdb";
//定义用户名和密码
String username = "root";
String password = "pla";
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(url, username, password);
return conn;
} catch (Exception e) {
System.err.println("数据库连接异常: " + e.getMessage());
return null;
}
}
// 使用数据源连接
public static Connection getCon() {
try {
//使用数据源访问数据库
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/bbsdb");
conn = ds.getConnection();
return conn;
} catch (Exception e) {
System.err.println("数据库连接异常: " + e.getMessage());
return null;
}
}
// 关闭数据库连接
public void CloseConn() {
try {
conn.close();
} catch (Exception e) {
System.err.println("数据库连接关闭异常: " + e.getMessage());
}
}
// 测试数据库连接
public static void main(String[] a) {
Connection conn;
DbConn dc = new DbConn();
conn = dc.getConn_jdbc();
try {
Statement stmt = conn.createStatement();
String strSql = "select * from bbs";
//查询建立数据集
ResultSet rs = stmt.executeQuery(strSql);
while (rs.next()) {
System.out.println("标题:" + rs.getString("title"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 注意,必须在最后关闭数据库连接,否则将严重影响系统性能
dc.CloseConn();
}
}
}
该连接组件提供了两种访问数据库的方式:使用基本的JDBC和数据源。一般的应用都建议使用数据源的方式来访问数据库,该组件中,使用main函数对JDBC连接方式进行了测试,在后面的论坛示例中,就是使用了本数据库连接组件。
★ 注意 ★
在main测试函数中,不能采用数据源的方式来访问数据库,否则会出现异常,因为main函数是采用一个Java Apllication方式执行的,不能访问Tomcat的上下文内容;但是可以在Action或者是Action所调用的业务逻辑组件中使用数据源的方式来访问数据库。