代码15.3 MySQL数据库连接组件
Code
1package bbs.db;
2
3import java.sql.Connection;
4
5import java.sql.DriverManager;
6
7import java.sql.ResultSet;
8
9import java.sql.SQLException;
10
11import java.sql.Statement;
12
13import javax.naming.*;
14
15import javax.sql.DataSource;
16
17public class DbConn {
18
19 private static DataSource ds = null;
20
21 private static Connection conn = null;
22
23 // 使用JDBC连接数据库
24
25 public static Connection getConn_jdbc() {
26
27 try {
28
29 //定义url,指定MySQL数据库端口和数据库名
30
31 String url = "jdbc:mysql://localhost:3306/bbsdb";
32
33 //定义用户名和密码
34
35 String username = "root";
36
37 String password = "pla";
38
39 Class.forName("com.mysql.jdbc.Driver").newInstance();
40
41 conn = DriverManager.getConnection(url, username, password);
42
43 return conn;
44
45 } catch (Exception e) {
46
47 System.err.println("数据库连接异常: " + e.getMessage());
48
49 return null;
50
51 }
52
53 }
54
55 // 使用数据源连接
56
57 public static Connection getCon() {
58
59 try {
60
61 //使用数据源访问数据库
62
63 InitialContext ctx = new InitialContext();
64
65 DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/bbsdb");
66
67 conn = ds.getConnection();
68
69 return conn;
70
71 } catch (Exception e) {
72
73 System.err.println("数据库连接异常: " + e.getMessage());
74
75 return null;
76
77 }
78
79 }
80
81 // 关闭数据库连接
82
83 public void CloseConn() {
84
85 try {
86
87 conn.close();
88
89 } catch (Exception e) {
90
91 System.err.println("数据库连接关闭异常: " + e.getMessage());
92
93 }
94
95 }
96
97 // 测试数据库连接
98
99 public static void main(String[] a) {
100
101 Connection conn;
102
103 DbConn dc = new DbConn();
104
105 conn = dc.getConn_jdbc();
106
107 try {
108
109 Statement stmt = conn.createStatement();
110
111 String strSql = "select * from bbs";
112
113 //查询建立数据集
114
115 ResultSet rs = stmt.executeQuery(strSql);
116
117 while (rs.next()) {
118
119 System.out.println("标题:" + rs.getString("title"));
120
121 }
122
123 } catch (SQLException e) {
124
125 e.printStackTrace();
126
127 } finally {
128
129 // 注意,必须在最后关闭数据库连接,否则将严重影响系统性能
130
131 dc.CloseConn();
132
133 }
134
135 }
136
137}
138
139
1package bbs.db;
2
3import java.sql.Connection;
4
5import java.sql.DriverManager;
6
7import java.sql.ResultSet;
8
9import java.sql.SQLException;
10
11import java.sql.Statement;
12
13import javax.naming.*;
14
15import javax.sql.DataSource;
16
17public class DbConn {
18
19 private static DataSource ds = null;
20
21 private static Connection conn = null;
22
23 // 使用JDBC连接数据库
24
25 public static Connection getConn_jdbc() {
26
27 try {
28
29 //定义url,指定MySQL数据库端口和数据库名
30
31 String url = "jdbc:mysql://localhost:3306/bbsdb";
32
33 //定义用户名和密码
34
35 String username = "root";
36
37 String password = "pla";
38
39 Class.forName("com.mysql.jdbc.Driver").newInstance();
40
41 conn = DriverManager.getConnection(url, username, password);
42
43 return conn;
44
45 } catch (Exception e) {
46
47 System.err.println("数据库连接异常: " + e.getMessage());
48
49 return null;
50
51 }
52
53 }
54
55 // 使用数据源连接
56
57 public static Connection getCon() {
58
59 try {
60
61 //使用数据源访问数据库
62
63 InitialContext ctx = new InitialContext();
64
65 DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/bbsdb");
66
67 conn = ds.getConnection();
68
69 return conn;
70
71 } catch (Exception e) {
72
73 System.err.println("数据库连接异常: " + e.getMessage());
74
75 return null;
76
77 }
78
79 }
80
81 // 关闭数据库连接
82
83 public void CloseConn() {
84
85 try {
86
87 conn.close();
88
89 } catch (Exception e) {
90
91 System.err.println("数据库连接关闭异常: " + e.getMessage());
92
93 }
94
95 }
96
97 // 测试数据库连接
98
99 public static void main(String[] a) {
100
101 Connection conn;
102
103 DbConn dc = new DbConn();
104
105 conn = dc.getConn_jdbc();
106
107 try {
108
109 Statement stmt = conn.createStatement();
110
111 String strSql = "select * from bbs";
112
113 //查询建立数据集
114
115 ResultSet rs = stmt.executeQuery(strSql);
116
117 while (rs.next()) {
118
119 System.out.println("标题:" + rs.getString("title"));
120
121 }
122
123 } catch (SQLException e) {
124
125 e.printStackTrace();
126
127 } finally {
128
129 // 注意,必须在最后关闭数据库连接,否则将严重影响系统性能
130
131 dc.CloseConn();
132
133 }
134
135 }
136
137}
138
139
该连接组件提供了两种访问数据库的方式:使用基本的JDBC和数据源。一般的应用都建议使用数据源的方式来访问数据库,该组件中,使用main函数对JDBC连接方式进行了测试,在后面的论坛示例中,就是使用了本数据库连接组件。
在main测试函数中,不能采用数据源的方式来访问数据库,否则会出现异常,因为main函数是采用一个Java Apllication方式执行的,不能访问Tomcat的上下文内容;但是可以在Action或者是Action所调用的业务逻辑组件中使用数据源的方式来访问数据库。