Scott Zone
似水流年,勤勉无价
BlogJava
首页
新随笔
联系
聚合
管理
posts - 27, comments - 14, trackbacks - 0
JDBC之代码复用(转)
在使用JDBC连接数据库的时,我们会采用executeQuery(String sql)获得一个结果集。当数据库结构变化或者获得其他数据库表结果集的时候我们需要将ResultSet结果集根据不同的数据结构重新遍历。
如何才能建立一个与数据库结构无关的JDBC连接呢?我们可以通过使用ResultSetMetaData()方法获得表结构。然后使用Object[]数组遍历结果集。当我们要取得相应的结果时,我们可以使用Iterator迭代器。只要遍历迭代器就可以取出结果。
下面是我写的一个方法:
1
import
java.math.BigDecimal;
2
import
java.sql.Connection;
3
import
java.sql.DriverManager;
4
import
java.sql.ResultSet;
5
import
java.sql.ResultSetMetaData;
6
import
java.sql.SQLException;
7
import
java.sql.Statement;
8
import
java.util.ArrayList;
9
import
java.util.Iterator;
10
import
java.util.List;
11
12
public
class
newJdbc
{
13
private
String url
=
"
jdbc:oracle:thin:@localhost:1521:nitpro
"
;
14
15
private
String dbUserName
=
"
scott
"
;
16
17
private
String dbUserPassword
=
"
tiger
"
;
18
19
private
Connection conn
=
null
;
20
21
private
Statement stmt
=
null
;
22
23
private
ResultSet rs
=
null
;
24
25
public
newJdbc()
{
26
try
{
27
Class.forName(
"
oracle.jdbc.driver.OracleDriver
"
);
28
}
catch
(ClassNotFoundException e)
{
29
e.printStackTrace();
30
}
31
}
32
33
public
Connection getConnection()
{
34
try
{
35
conn
=
DriverManager.getConnection(url, dbUserName, dbUserPassword);
36
}
catch
(SQLException e)
{
37
e.printStackTrace();
38
}
39
return
conn;
40
}
41
42
public
void
close(ResultSet rs, Statement stmt, Connection conn)
{
43
if
(rs
!=
null
)
{
44
try
{
45
rs.close();
46
}
catch
(SQLException e)
{
47
e.printStackTrace();
48
}
49
}
50
if
(stmt
!=
null
)
{
51
try
{
52
stmt.close();
53
}
catch
(SQLException e)
{
54
e.printStackTrace();
55
}
56
}
57
if
(conn
!=
null
)
{
58
try
{
59
conn.close();
60
}
catch
(SQLException e)
{
61
e.printStackTrace();
62
}
63
}
64
}
65
66
public
List query(String sql)
{
67
List list
=
new
ArrayList();
68
69
conn
=
this
.getConnection();
70
try
{
71
stmt
=
conn.createStatement();
72
rs
=
stmt.executeQuery(sql);
73
//
获取数据库表结构
74
ResultSetMetaData rsm
=
rs.getMetaData();
75
//
取得数据库的列数
76
int
col
=
rsm.getColumnCount();
77
//
生成col长度的Object数组
78
Object[] obj
=
new
Object[col];
79
//
遍历结果集,将结果存入Object数组
80
while
(rs.next())
{
81
for
(
int
i
=
0
; i
<
col; i
++
)
{
82
obj[i]
=
rs.getObject(i
+
1
);
83
}
84
list.add(obj);
85
}
86
}
catch
(SQLException e)
{
87
e.printStackTrace();
88
}
finally
{
89
this
.close(rs, stmt, conn);
90
}
91
return
list;
92
}
93
94
public
void
update(String sql)
{
95
try
{
96
conn
=
this
.getConnection();
97
stmt
=
conn.createStatement();
98
stmt.executeUpdate(sql);
99
}
catch
(SQLException e)
{
100
e.printStackTrace();
101
}
102
}
103
104
public
static
void
main(String args[])
{
105
newJdbc nj
=
new
newJdbc();
106
String sql
=
"
select * from users
"
;
107
List list
=
nj.query(sql);
108
//
返回list的迭代器
109
Iterator it
=
list.iterator();
110
//
遍历迭代器,取出结果
111
while
(it.hasNext())
{
112
Object[] o
=
(Object[]) it.next();
113
int
id
=
((BigDecimal) o[
0
]).intValue();
114
System.out.println(id);
115
}
116
117
}
118
}
119
posted on 2007-07-12 16:30
Scott.Pan
阅读(358)
评论(0)
编辑
收藏
所属分类:
代码收藏夹
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
insertAdjacentHTML方法示例
转JS校验
封装了Jakarta 文件上传功能的一个类(转)
几种js实现的动态多文件上传
动态WEB应用中的用户SESSION管理方案
JDBC之代码复用(转)
目录树程序
<
2007年7月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
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
1
2
3
4
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(4)
给我留言
查看公开留言
查看私人留言
随笔分类
Database
IM例举(1)
J2EE(2)
JBPM(1)
Liferay(7)
SSH(2)
Web开发
代码收藏夹(7)
生活记事(6)
目录服务(3)
随笔档案
2007年8月 (5)
2007年7月 (22)
搜索
最新评论
1. re: Portlet学习分析笔记[未登录]
来学习一下
--zz
2. re: 几种js实现的动态多文件上传
最后一种不能用
--11
3. re: insertAdjacentHTML方法示例[未登录]
1
--1
4. re: Portlet学习分析笔记
写的很不错。学习了
--chailieyang
5. re: insertAdjacentHTML方法示例
评论内容较长,点击标题查看
--啊打发
阅读排行榜
1. insertAdjacentHTML方法示例(23432)
2. 经典英语200句(4356)
3. Portlet学习分析笔记(3613)
4. SearchContainer的用法说明(2791)
5. 几种js实现的动态多文件上传(2759)
评论排行榜
1. Portlet学习分析笔记(4)
2. insertAdjacentHTML方法示例(2)
3. 几种js实现的动态多文件上传(1)
4. 经典英语200句(1)
5. Liferay项目中问题及解决方法列举(1)