我自横刀香甜笑的专栏

没有最好的,只有更好的.只有想不到的,没有找不到的.

用户操作
[即时聊天] [发私信] [加为好友]
我自横刀香甜笑ID:lye2000000_super
78052次访问,排名1412,好友28人,关注者37人。
偶的座右铭:没有阳光俺也要灿烂.
lye2000000_super的文章
原创 97 篇
翻译 0 篇
转载 65 篇
评论 4 篇
我自横刀香甜笑的公告

最近评论
shangzhihaohao:你有MySQLDriverCS的使用手册么,项目需要,我得学习一下
冷雪吟:老大,图呢?
carole:前两天我的电脑也出现CPU占用100%的现象,然后查看进程,发现是emule.exe(电驴下载工具)造成的.当时我在用电驴下载东西,查看了进程之后就把电驴关闭了,但进程中emule.exe还是存在,强行关闭此进程也没有用,只好重启电脑才得以解决.请问其根本原因是什么?谢谢!
我心:不错。写的好!
文章分类
收藏
相册
06世界杯
动物
搞笑
好玩
山水风景
我喜欢的靓丽图片
物品
植物
资料-桌面
自然风光
博客
Xpath
Xquery
操作系统相关
操作系统知识
常去的论坛
IT学习者
PCWORD
华夏黑客同盟
南方英才网
天极网
安全中国
我是IT人
黑客风云
常去的网站
中国IT实验室
中国X黑客小组(RSS)
汇编
黑客在线
日语学习
考研论坛
书籍
书籍下载(RSS)
免费书籍下载(RSS)
我要电子书(下载)
清华大学出版社
特效
各种免费的特效1
网页
Asp.net入门教程(RSS)
Css教程
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

转载 将数据库操作封装到Javabean收藏

新一篇: WMI 可以访问的信息类型 | 旧一篇: Java学习从入门到精通

封装数据库操作,目的就是为了隐藏java.sql包内的类,在编码中去掉核心的数据库操作代码。以杜绝直接数据库操作容易带来的资源未释放问题。同时也减少了数据库操作的编码量。

但是很多网友在封装时,却喜欢返回结果集(ResultSet对象),那么这个封装就没有意义了。
1. 又是直接操作核心数据库类,跟封装前几乎没什么变化。
2. 结果集总是依赖于它使用的连接(Connection)对象。因此当连接对象在方法内被关闭后,你返回的ResultSet就没有用了。

如果真的要获得查询数据库的结果集,就把结果集对象内的所有数据,转储到以Map为元素的List对象内。
当然,这种方式,不能适应大数据量的查询,不过如果真的碰到大数据量的查询,那用什么封装都不好,还是得直接数据库操作. :)))

下面是简单的数据库操作Javabean的代码

DbWrapper.java
import java.sql.*;
import java.util.*;
public class DbWrapper
{
    // 定义连接池对象为静态变量,将一直存在,直到工作目录关闭。
    private static DataSource ds = null;
// 1.用连接池的方式获得连接 // 如果不是做多数据库程序,推荐使用此方法 // 相关内容:在tomcat管理界面配置连接池 public static Connection openConnection() throws Exception { // 只需要初始化1次 if ( ds == null ) { Context initContext = new InitialContext(); Context envContext = (Context) initContext.lookup("java:/comp/env"); DataSource ds = (DataSource) envContext.lookup("jdbc/MyDataSource"); } return ds.getConnection(); } // 2.用jdbc驱动获得连接 // 相关内容:JSP数据库连接大全 public static Connection openConnection( String driver, String url, String username, String password) throws Exception { Class.forName(driver).newInstance(); return DriverManager.getConnection(url, username, password); } public static void closeConnection(Connection conn) throws Exception { if ( conn != null ) { conn.close(); } }
public static int executeUpdate(String sql) throws Exception { int count = 0; Connection conn = null; Statement stmt = null; try { conn = openConnection(); stmt = conn.createStatement(); count = stmt.executeUpdate(sql); } catch ( Exception e ) { throw e; } finally { closeConnection(conn); } return count; } public static List executeQuery(String sql) throws Exception { List list = new ArrayList(); Connection conn = null; Statement stmt = null; ResultSet rs = null; try { conn = openConnection(); stmt = conn.createStatement(); rs = stmt.executeQuery(sql); ResultSetMetaData rsmd = rs.getMetaData(); while ( rs.next() ) { Map map = new HashMap(); for ( int i = 1; i <= rsmd.getColumnCount(); i++ ) { map.put(rsmd.getColumnName(i), rs.getObject(i)); } list.add(map); }
} catch ( Exception e ) { e.printStackTrace(); } finally { if ( rs != null ) rs.close(); closeConnection(conn); } return list;
} }


使用示例:
// 1.对于insert, update, delete语句
int count = DbWrapper.executeUpdate(sql);
// 2.对于selete语句 java.util.List list = DbWrapper.executeQuery(sql);
// 方法一:按名字取值,注意大小写是严格区分的 for ( int i = 0; i < list.size(); i++ ) { java.util.Map map = (java.util.Map)list.get(i); out.println(mag.get("column_name").toString()); }
// 方法二:遍历取值 for ( int i = 0; i < list.size(); i++ ) { java.util.Map map = (java.util.Map)list.get(i);
for (java.util.Iterator it = map.keySet().iterator(); it.hasNext();) { String column_name = it.next().toString());

// 取值时注意null判断 out.println(column_name + " = " + map.get(column_name) == null ? "" :
map.get(column_name).toString()); } }

发表于 @ 2006年03月14日 10:07:00|评论(loading...)|编辑

新一篇: WMI 可以访问的信息类型 | 旧一篇: Java学习从入门到精通

评论:没有评论。

发表评论  


登录
Csdn Blog version 3.1a
Copyright © 我自横刀香甜笑