学习目标:
使用try-with-resourced的方式自动关闭JDBC连接
学习内容:
1.try-with-resourced原理及使用方法
2.使用try-with-resourced的方式自动关闭JDBC连接
3.传统JDBC连接方式与使用try-with-resourced的方式比较
一、try-with-resourced原理及使用方法
原理:
所有的流,无论是输入流还是输出流,使用完毕之后,都应该关闭。 如果不关闭,会产生对资源占用的浪费。 当量比较大的时候,会影响到业务的正常开展。
把流定义在try()里,try,catch或者finally结束的时候,会自动关闭,这种编写代码的方式叫做 try-with-resources。
所有的流,都实现了一个接口叫做 AutoCloseable,任何类实现了这个接口,都可以在try()中进行实例化。 并且在try, catch, finally结束的时候自动关闭,回收相关资源。
使用方法:
try(流){
}catch(){
}
package stream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class TestStream {
public static void main(String[] args) {
File f = new File("d:/hello.txt");
//把流定义在try()里,try,catch或者finally结束的时候,会自动关闭
try (FileInputStream fis = new FileInputStream(f)) {
byte[] all = new byte[(int) f.length()];
fis.read(all);
for (byte b : all) {
System.out.println(b);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果为:
104
101
108
108
111
32
119
111
114
108
100
二、使用try-with-resourced的方式自动关闭JDBC连接
因为Connection和Statement都实现了AutoCloseable接口,所以可以使用try-with-resource的方式自动关闭连接
public class TestJDBC {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//使用try-with-resourced
try (
Connection c = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8",
"root", "admin");
Statement s = c.createStatement();
)
{
String sql = "insert into hero values(null," + "'提莫'" + "," + 313.0f + "," + 50 + ")";
s.execute(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
总结
数据库的连接是有限资源,相关操作结束后,养成关闭数据库的好习惯
先关闭Statement
后关闭Connection
但是使用try-with-resourced的方法就可以自动关闭。