DBUtil中使用为什么要为什么使用静态类方法getConn() ?和使用非...

使用dbutils封装的一个数据库操作类 - 很技术,很生活! - ITeye技术网站
博客分类:
使用commons-dbutils-1.3.jar,请自行下载.
关于Connection对象和事务在业务层作了处理.
主要代码如下:
package keel.
import java.sql.C
import java.util.L
import java.util.M
import mons.dbutils.QueryR
import mons.dbutils.handlers.BeanListH
import mons.dbutils.handlers.MapH
import mons.dbutils.handlers.MapListH
import org.apache.log4j.L
* 操作数据库方法
* @author 蔡治平
public class SqlUtil {
private static Logger logger = Logger.getLogger(SqlUtil.class);
private static QueryRunner qr = new QueryRunner();
* @param conn
* @param sql
* @param params
* @return List&Map&String, Object&&
@SuppressWarnings("deprecation")
public static List&Map&String, Object&& search(Connection conn, String sql, Object[] params){
List&Map&String, Object&& mapList =
if(params==null){
mapList = qr.query(conn, sql, new MapListHandler());
mapList = qr.query(conn, sql, params, new MapListHandler());
} catch (Exception e) {
logger.error("查询出现异常!原因:"+e);
return mapL
* 查询,将结果返回到bean中,多个bean通过List包装返回
* @param &T&
* @param conn
* @param entityClass
* @param sql
* @param params
* @return List&T&
@SuppressWarnings("unchecked")
public static &T&List&T& search(Connection conn, Class&T& entityClass, String sql, Object[] params){
List&T& list =
if (params == null) {
list = (List&T&) qr.query(conn, sql, new BeanListHandler(entityClass));
list = (List&T&) qr.query(conn, sql, new BeanListHandler(entityClass), params);
}catch(Exception e){
logger.error("查询出现异常!原因:"+e);
* 通过主键查找记录
* @param conn
* @param sql
* @param params
* @return Map&String, Object&
public static Map&String, Object& getById(Connection conn, String sql, Object[] params){
Map&String, Object& map =
if (params == null) {
map = qr.query(conn, sql, new MapHandler());
map = qr.query(conn, sql, new MapHandler(), params);
}catch (Exception e) {
logger.error("查询出现异常!原因:"+e);
* 查询表的记录总数
* @param conn
* @param table
* @return int
public static int getTotal(Connection conn, String table){
int total = 0;
String field = "TOTAL";
if(conn!=null){
String sql = "SELECT COUNT(*) AS "+field+" FROM "+
Map&String, Object& map = (Map&String, Object&) qr.query(conn, sql, new MapHandler());
String n = map.get(field).toString();
total = Integer.parseInt(n);
} catch (Exception e) {
logger.error("查询["+table+"]表记录总数出现异常!原因:"+e);
logger.error("查询["+table+"]表记录总数出现异常!原因:连接为空!");
* 更新,返回更新记录条数
* @param conn
* @param sql
* @param params
* @return int
public static int update(Connection conn, String sql, Object[] params){
int n = 0;
if(params==null){
n = qr.update(conn, sql);
n = qr.update(conn, sql, params);
}catch(Exception e){
logger.error("更新出现异常!原因:"+e);
测试代码片段:
List&Map&String, Object&& list = SqlUtil.search(conn, sql, new Object[]{"1001","admin"});
for(int i=0;i&list.size();i++){
System.out.println(list.get(i).get("id"));
System.out.println(list.get(i).get("userName"));
List&User& userList = SqlUtil.search(conn, User.class, sql, new Object[]{"1001","admin"});
for(int i=0;i&userList.size();i++){
System.out.println(userList.get(i).getId());
System.out.println(userList.get(i).getUserName());
String sql1 = "update rg_user set flag = 1 where id=?";
int n = SqlUtil.update(conn, sql1, new Object[]{"1001"});
System.out.println(n);
String sql2 = "select * from rg_user where id ='1001'";
Map&String,Object& map = SqlUtil.getById(conn, sql2, null);
System.out.println(map.get("id"));
论坛回复 /
(2 / 2877)
如何考虑到事务的处理?特别是UPDATE类的操作手动关闭自动提交
浏览: 365603 次
来自: 广州
&div class=&quote_title ...
为什么我的弄完了之后点击选择文件都没有反应呢?
请问code.java.web.WebFilter该类文件呢
file_post_name: 'file'这样我的strut ...
另外upload_start_handler方法中调用了set ...我写了一个类 封装了MySQL数据库的连接方法,一个是用类方法实现,一个是用对象方法实现,如下:
public static Connection getConn() throws Exception{
Connection conn=
Class.forName(strDataDriverName);
} catch (ClassNotFoundException e) {
// TODO: handle exception
throw new Exception(e);
conn=DriverManager.getConnection(strDataURL,strDataUserName,strDataPWD);
} catch (SQLException e) {
// TODO: handle exception
throw new Exception(e);
public Connection getConnection() throws Exception {
Connection conn=
Class.forName(strDataDriverName);
} catch (ClassNotFoundException e) {
// TODO: handle exception
throw new Exception(e);
conn=DriverManager.getConnection(strDataURL,strDataUserName,strDataPWD);
} catch (SQLException e) {
// TODO: handle exception
throw new Exception(e);
这两个方法都没有关闭conn, 因为要返回conn, 我想问下 如果在外部声明一个 conn=类.getConn& 后 然后关闭conn 是不是接可以了也就同样的关闭了类.getConn中的conn,主要是 这两个conn对象是不是一个?
如果用下面的对象.getConnection, 疑惑同上!!
问题补充:ljjclub 写道在你这个工具类里面写上关闭方法
public static void close(Connection conn) {
if (conn != null) {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
然后在哪调用连接就在哪关闭
那这样就要& 在类中声明一个private 的 conn的对象了& ,然后添加一个close方法
这样在其他类中使用的时候 要 关闭2个 conn 了& ,对吗 ?
采纳的答案
比如你在这个类里写的conn 和 close;
public class DBUtil {
public static Connection getConnection() {
Connection conn =
Class.forName("oracle.jdbc.driver.OracleDriver");
String dbUrl = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String username = "scott";
String password = "tiger";
conn = DriverManager.getConnection(dbUrl, username, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
&&&&&&& public static void close(Connection conn) {
if (conn != null) {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
在其他类中需要连接数据库时这样
Connection& =
conn = DBUtil.getConnection();
然后
conn.close(); 就行了
怎么会关闭俩个conn呢,什么意思
在你这个工具类里面写上关闭方法
public static void close(Connection conn) {
if (conn != null) {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
然后在哪调用连接就在哪关闭
应该不是同一个!
已解决问题
未解决问题web和Servlet_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
软件工程师
评价文档:
web和Servlet
主​要​基​本​J​A​V​A​中​w​e​b​端​的​开​发​知​识​盘​点
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢DBUtil中getConnection方法的一个小问题
[问题点数:40分,结帖人u]
DBUtil中getConnection方法的一个小问题
[问题点数:40分,结帖人u]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。数据库_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者
评价文档:
j​a​v​a​程​序​中​连​接​数​据​库​的​步​骤
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
大小:9.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢}

我要回帖

更多关于 为什么使用静态类 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信