今天在某个blog 上看到一篇关于jdbc的数据库连接,当执行完后关闭的问题,被作者形容为"擦屁股",虽然有些不雅,但是给我印像颇深,而且这个问题很常见,所以将此记录下来:
当我们写java的数据库连接时,以连接到SQL Server 为例,
Class.forname(
"
net.sourceforge.jtds.jdbc.Driver
"
);
Connection con = DriverManager.getConnection( " jdbc:jtds:sqlserver://localhost:1433/NorthWind " , " sa " , "" );
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();
}
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();
}
从上面的代码看来,屁股肯定是"擦干净"了!哈哈~~~~~~~~~~~~~~~~~~~~~~~~`