1. 我们先在Tomcat 中创建一个DataSource- jdbc/Panabia,然后再创建一个java“基类”,这个类封装了数据库连接和连接的释放。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
package
Panabia.db;
import
javax.sql.DataSource;
import
javax.naming.*;
import
java.sql.*;
public
class
SQLFactory
{
private
static
DataSource ds =
null
;
private
static
Object Lock =
new
Object();
// 生成DataSource**
public
static
DataSource gainDataSource()
{
try
{
if
(ds==
null
)
{
synchronized
(Lock)
{
if
(ds==
null
)
{
Context ctx=
new
InitialContext();
ds=(DataSource)ctx.lookup(\"java:comp/env/jdbc/Panabia\");
}
}
}
}
catch
(NamingException e){
e.printStackTrace();
}
return
ds;
}
// 生成SQL连接**
public
static
synchronized
Connection gainConnection()
{
Connection con =
null
;
try
{
if
(ds ==
null
)
{
gainDataSource();
}
con = ds.getConnection();
}
catch
(SQLException e){
e.printStackTrace();
}
return
con;
}
// 释放SQL连接**
public
static
void
releaseConnection(ResultSet rs, PreparedStatement ps,
Statement sql, Connection con)
{
try
{
if
(rs !=
null
)
rs.close();
}
catch
(SQLException e) {
e.printStackTrace();
}
try
{
if
(ps !=
null
)
ps.close();
}
catch
(SQLException e) {
e.printStackTrace();
}
try
{
if
(sql !=
null
)
sql.close();
}
catch
(SQLException e) {
e.printStackTrace();
}
try
{
if
(con !=
null
&& !con.isClosed())
con.close();
}
catch
(SQLException e) {
e.printStackTrace();
}
}
}
|
大家都应该注意到了,这个类的所有的方法全部是static的,之所以这样,主要是为了方便其它“扩展类”的调用,当然,还有其它好处--- :)
2. 然后,这个类就封装完毕了,现在我们就可以针对不同的应用要求单独写javaBean了,比如一个简单的:在JSP中列出verify表中的所有用户名与密码列表。
该怎么做?--使用SQLFactory生成Connection,再生成Statement,再生成ResultSet--然后枚举吗?好象不错,哦,等等......这样做你难道没有一种“非常亲切”的感觉吗?---对了,ASP,PHP中就是如此-Faint~我们怎么又回到“原始社会”了....
有没有更好的方式?答案是肯定的,JAVA的能力是“通天”的强大,只要你能想得到,仔细看看它的API Document,就不难找出解决办法。
答案出来了:
我们在查询类中返回Iterator到JSP枚举,而不是ResultSet。
好了,我们的UserQuery类就产生了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
package
Panabia.operate;
import
Panabia.db.SQLFactory;
import
java.util.*;
import
java.sql.*;
public
class
UserQuery
{
private
ArrayList list =
null
;
private
Connection con =
null
;
private
Statement sql =
null
;
private
ResultSet rs =
null
;
public
Iterator getResult()
{
try
{
con=SQLFactory.gainConnection();
sql=con.createStatement();
rs=sql.executeQuery(\"select * from verify\");
//verify表只有两个字段:username,password;
list=
new
ArrayList();
while
(rs.next())
{
list.add(rs.getString(
1
));
list.add(rs.getString(
2
));
}
}
catch
(SQLException e){
e.printStackTrace();
}
finally
{
SQLFactory.releaseConnection(rs,
null
,sql,con);
}
return
list.iterator();
}
}
|
3. 在jsp页面进行查询
1
2
3
4
5
|
Iterator it=UserQuery.getResult();
while
(it.hasNext())
{
out.print((String)it.next());
}<br><br>
//尚不完善的地方:虽然情况好了一些,但当使用ArrayList取出体积很大的数据时,会相当耗费系统资源[系统会在内存单独开一块空间存放结果]---相关的优化方法是有的,我在这里就不作陈述了,大家可以参考一下其它的相关资料。
|
本文转自二郎三郎博客园博客,原文链接:http://www.cnblogs.com/haore147/p/3618220.html,如需转载请自行联系原作者