我实在有些地方不明白,请高人解决。(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();
}
}
}
}
}希望大家说出在实际项目当中怎么处理的.
数据库连接对象我从不声明的成员变量,全是局部变量,而且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();
}
}
}
}
}希望大家说出在实际项目当中怎么处理的.
finally
中的
Connection con) {
try {
if (rs != null) {
rs.close();
rs = null;
}if (pstm != null) {
pstm.close();
pstm = null;
}
if (con != null) {
con.close();
con = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
Connection con) {
try {
if (rs != null) {
rs.close();}if (pstm != null) {
pstm.close();}
if (con != null) {
con.close();}
} catch (Exception e) {
e.printStackTrace();
}
}
或者是这样啊,无所谓的
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);
}
}
}
首先建个基类包随便你怎么起!
下面建一个基础类用于连接数据库和关闭数据库的
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;
注意下作用域问题!
JDBC是逆向关闭的!
必须从底下的对象开始关!
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);
}
Connection PreparedStatement ResultSet 这些你不关?
如果是c3p0的话,ComboPooledDataSource 这个你不关?
finally 的关闭难道就不会出问题?我想是lz的提问本身就有问题