jdbc连接数据库,你关闭连接对象了吗?

山城忙碌人 2010-08-20 04:38:25
我实在有些地方不明白,请高人解决。(jdbc连接sqlserver,没用框架。如果现在找不到解决方法,可能要用hibernate)
数据库连接对象我从不声明的成员变量,全是局部变量,而且daoimpl我是extends数据库类的(这块大家怎么做的).
进入主题:
public void close(Connection con, PreparedStatement ps, ResultSet rs){
try {
if (rs != null)
rs.close();//这里出现异常了,rs关闭了吗?,如果没有怎么解决,ps , con也是一样的。
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (st != null)
st.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (conn != null)
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}

希望大家说出在实际项目当中怎么处理的.
...全文
811 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
political 2010-08-27
  • 打赏
  • 举报
回复
finally里面rs.close()
liuyuhua0066 2010-08-27
  • 打赏
  • 举报
回复
如果我没记错的话,rs可以不用关闭,只需要关闭connection,statement即可。
  • 打赏
  • 举报
回复
怎么写没关系,关键是看逻辑是否正确。是否在恰当的时间、恰当的地点对正确的对象关闭。
  • 打赏
  • 举报
回复
怎么写没关系,关键是看逻辑是否正确。是否在恰当的时间、恰当的地点对正确的对象关闭。
  • 打赏
  • 举报
回复
怎么写没关系,关键是看逻辑是否正确。是否在恰当的时间、恰当的地点对正确的对象关闭。
any0007 2010-08-25
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 qingyuan18 的回复:]

一般要想干净的关闭数据库connection,在finally里面写即可
[/Quote]

finally 的关闭难道就不会出问题?我想是lz的提问本身就有问题
any0007 2010-08-25
  • 打赏
  • 举报
回复
关闭出现问题,只好抛异常了,不然怎麽处理?暂时想不到更好的办法
qingyuan18 2010-08-23
  • 打赏
  • 举报
回复
一般要想干净的关闭数据库connection,在finally里面写即可
backtosong 2010-08-23
  • 打赏
  • 举报
回复
finally里面一个一个关 - -
山城忙碌人 2010-08-23
  • 打赏
  • 举报
回复
各们大哥,连接池也需要关闭啊。
Connection PreparedStatement ResultSet 这些你不关?
如果是c3p0的话,ComboPooledDataSource 这个你不关?
龙四 2010-08-22
  • 打赏
  • 举报
回复
其实是没有必要的,conn是个电闸,stmt和rs是灯的开关

正常是应该先关灯再关电闸

你直接关电闸也是没问题的

可以参加commons-DBUtil开源jar的写法,代码比较简单



[Quote=引用 14 楼 jiachen588 的回复:]

引用 11 楼 ticmy 的回复:
connection关闭了,其他都会关闭,不用担心

不好意思!
JDBC是逆向关闭的!
必须从底下的对象开始关!
[/Quote]
饭炒蛋2009 2010-08-22
  • 打赏
  • 举报
回复
用连接池就不用关闭了吧
编程学童 2010-08-21
  • 打赏
  • 举报
回复
我平时只这样写的:
public static void close(Connection connection){
try{
if(connection != null){
connection.close();
}
}catch(SQLException e){
connection = null;
}
}

public static void close(Statement statement){
try{
if(statement != null){
statement.close();
}
}catch(SQLException e){
statement = null;
}
}

public static void close(ResultSet rs){
try{
if(rs != null){
rs.close();
}
}catch(SQLException e){
rs = null;
}
}

public static void close(Connection connection,Statement statement,ResultSet rs){
close(connection);
close(statement);
close(rs);
}
hchjjun 2010-08-21
  • 打赏
  • 举报
回复
用连接池嘛,还用关闭
jiachen588 2010-08-21
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ticmy 的回复:]
connection关闭了,其他都会关闭,不用担心
[/Quote]
不好意思!
JDBC是逆向关闭的!
必须从底下的对象开始关!
jiachen588 2010-08-21
  • 打赏
  • 举报
回复
哥们儿很诚心的给你写个!哥们前阵子天天JSP!
首先建个基类包随便你怎么起!
下面建一个基础类用于连接数据库和关闭数据库的
public static void closeConn(ResultSet rs,PreparedStatement ps,Statement st,Connection con){
try{
if(rs != null){
rs.close();
}
if(ps != null){
ps.close();
}
if(st != null){
st.close();
}
if(con != null){
con.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
不敢说绝对不会出错只要你在实现类的封装的父类中有声明了
Connection con;
Statement st;
PreparedStatement ps;
ResultSet rs;
注意下作用域问题!
ljm19891118 2010-08-20
  • 打赏
  • 举报
回复
我都是这样写的。。。

public static void close(Connection con) {
if (con != null)
try {
con.close();
} catch (SQLException e) {
// 不做任何处理,静默处理
}
}

public static void close(ResultSet rs) {
if (rs != null)
try {
rs.close();
} catch (SQLException e) {
// 不做任何处理,静默处理
}
}

public static void close(Statement stmt) {
if (stmt != null)
try {
stmt.close();
} catch (SQLException e) {
// 不做任何处理,静默处理
}
}

public static void DBClose(ResultSet rs, Statement stmt, Connection conn) {
try {
close(rs);
} finally {
try {
close(stmt);
} finally {
close(conn);
}
}
}

龙四 2010-08-20
  • 打赏
  • 举报
回复
connection关闭了,其他都会关闭,不用担心
冰山6 2010-08-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mon9012 的回复:]
一般这样的关闭都是写在
finally
中的
[/Quote]
恩 是这样的
qq14017152 2010-08-20
  • 打赏
  • 举报
回复
public static void closed(ResultSet rs, PreparedStatement pstm,
Connection con) {
try {
if (rs != null) {
rs.close();

}

if (pstm != null) {
pstm.close();

}
if (con != null) {
con.close();

}
} catch (Exception e) {
e.printStackTrace();
}
}
或者是这样啊,无所谓的
加载更多回复(8)

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧