学习java(二)-----关于jdbc连接的"擦屁股"问题
2006-09-07 22:14
543 查看
今天在某个blog 上看到一篇关于jdbc的数据库连接,当执行完后关闭的问题,被作者形容为"擦屁股",虽然有些不雅,但是给我印像颇深,而且这个问题很常见,所以将此记录下来:
当我们写java的数据库连接时,以连接到SQL Server 为例,
Class.forname("net.sourceforge.jtds.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/NorthWind","sa","");
我们经常是打开了,到最后我们对数据库操作完后,却忘记了con.close();(这被作者称为"没有擦干净屁股")或者即使在正常情况下关闭了,可是出现异常的时候,却不能正在常关闭,所以要写到try{}catch{} finally{}中!
在那篇文章中看到了,以为最好方式是:代码如下:
import java.sql.*;
Class.forname("net.sourceforge.jtds.jdbc.Driver");
final Connection con = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/Northwind","sa","");
try ...{
final Statement stmt = con.createStatement();
try...{
final ResultSet rs = stmt.executeQuery("select * from products");
try...{
while( rs.next() ) ...{
System.out.println( rs.getString(2) );
}
}catch( Exception e)...{
e.printStackTrace();
}finally ...{
rs.close();
}
}catch(Exception e )...{
e.printStackTrace();
}finally...{
stmt.close();
}
}catch( Exception e)...{
e.printStackTrace();
}fianlly...{
con.close();
}
从上面的代码看来,屁股肯定是"擦干净"了!哈哈~~~~~~~~~~~~~~~~~~~~~~~~`
当我们写java的数据库连接时,以连接到SQL Server 为例,
Class.forname("net.sourceforge.jtds.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/NorthWind","sa","");
我们经常是打开了,到最后我们对数据库操作完后,却忘记了con.close();(这被作者称为"没有擦干净屁股")或者即使在正常情况下关闭了,可是出现异常的时候,却不能正在常关闭,所以要写到try{}catch{} finally{}中!
在那篇文章中看到了,以为最好方式是:代码如下:
import java.sql.*;
Class.forname("net.sourceforge.jtds.jdbc.Driver");
final Connection con = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/Northwind","sa","");
try ...{
final Statement stmt = con.createStatement();
try...{
final ResultSet rs = stmt.executeQuery("select * from products");
try...{
while( rs.next() ) ...{
System.out.println( rs.getString(2) );
}
}catch( Exception e)...{
e.printStackTrace();
}finally ...{
rs.close();
}
}catch(Exception e )...{
e.printStackTrace();
}finally...{
stmt.close();
}
}catch( Exception e)...{
e.printStackTrace();
}fianlly...{
con.close();
}
从上面的代码看来,屁股肯定是"擦干净"了!哈哈~~~~~~~~~~~~~~~~~~~~~~~~`
相关文章推荐
- 关于在java中连接MS SQL Server 2005 JDBC的问题及解决办法
- 【java】关于request.getParameter("name");得到值为"??????"的问题
- jdbc的连接问题-----java数据学习笔记之2
- 关于在java中连接MS SQL Server 2005 JDBC的问题及解决办法
- 关于java的JDBC模式连接oracle问题
- Java学习笔记之五——关于"equals"和“==”的区别
- 关于“#ifdef __cplusplus” 和 " extern "C" 的问题
- 关于java使用JDBC连接数据库时更改数据库失效
- 【Android开发之坑爹问题】关于"java/lang/String"类型
- 关于 "响应在此上下文中不可用" 的问题
- 关于CString剖析,"strcmp": 不能将参数1从"CString”"转换为"const char *"问题
- java通过JDBC连接SQL Server2017遇到的一些问题
- eclipse关于 "the serializable class XXX does not declare a static final seriaVersionUID..."的问题
- Java学习笔记——JDBC连接技术
- java通过jdbc连接hive1.0.0(伪分布)的问题
- jdbc连接问题 Class.forName("com.mysql.jdbc.Driver");的作用
- 关于百度地图SDK在" SDKInitializer.initialize(this);"初始化报空指针的问题
- 关于Android4.0 emulator-arm.exe-应用程序错误,内存不能为"read"问题解决方法
- 关于 "the serializable class XXX does not declare a static final seriaVersionUID..."的问题
- 学习安卓开发过程中遇到关于R.Java文件的问题