为什么要自定义数据库连接的工具类:
在开发中,我们在对数据库进行操作时,必须要先获取数据库的连接,在上一篇随笔中提到的获取数据库连接的步骤为:
1、定义好4个参数并赋值
2、加载驱动类
3、获取数据库连接
具体代码如下:
1 String username="root"; //连接数据库的用户名
2 String password="root"; //连接数据库的密码
3 //连接MySql数据库的url,不同数据库url不同,语法:jdbc:子协议:厂商内容
4 String url="jdbc:mysql://localhost:3306/MyBookStore";
5 //数据库驱动程序的全类名,加载相应数据库的jar包,在Web App Libraries中找到driver.class复制其全类名即可
6 String driver="com.mysql.jdbc.Driver";
7 //2.加载驱动类
8 Class.forName(driver);
9 //3.获取数据库连接,对数据库的一切操作都是从Connection连接开始的
10 Connection connection=DriverManager.getConnection(url, username, password);
如果我们每次操作数据库,都要先编写这些代码来获取数据库连接,未免太麻烦,为了实现代码的重用性,加快开发进度,我们将获取数据库连接的方法封装成一个工具类,只需要通过该类调用相应的方法就可以获取数据的连接。
具体步骤如下:
1、新建类,我们通常定义类名为JDBCUtils
2、加载驱动类
由于驱动程序不经常改变,且没有多次加载数据库驱动的必要,将加载驱动程序的代码放在静态代码块中,
静态代码块只在类加载的时候加载一次,且在构造方法前被加载
3、定义静态Connection类对象
将Connection类的对象定义为Static,由于conn被静态方法getConnection调用,必须修饰为static
4、定义静态方法GetConnection,用于获取数据库连接
5、定义closeStatement方法,用于关闭结果集,statement和connection连接
具体代码如下:
1 import java.sql.Connection;
2 import java.sql.DriverManager;
3 import java.sql.ResultSet;
4 import java.sql.SQLException;
5 import java.sql.Statement;
6
7 public class JDBCUtils {
8 //由于驱动程序不经常改变,且没有多次加载数据库驱动的必要,
9 //将驱动程序放在静态代码块中,只在类加载的时候加载一次,且在构造方法前被加载
10 private static String driver="com.mysql.jdbc.Driver";
11 static{
12 try {
13 Class.forName(driver);
14 } catch (ClassNotFoundException e) {
15 e.printStackTrace();
16 }
17 }
18 private static Connection conn=null;
19
20 //获取数据库连接的方法
21 public static Connection getConnection(String url,String user,String password) throws Exception{
22 conn=DriverManager.getConnection(url, user, password);
23 return conn;
24 }
25
26 //关闭资源的方法
27 public static void closeStament(ResultSet rs,Statement st,Connection conn){
28 if(rs!=null){
29 try {
30 rs.close();
31 } catch (SQLException e) {
32 e.printStackTrace();
33 }
34 }
35 if(st!=null){
36 try {
37 st.close();
38 } catch (SQLException e) {
39 e.printStackTrace();
40 }
41 }
42 if(conn!=null){
43 try {
44 conn.close();
45 } catch (SQLException e) {
46 e.printStackTrace();
47 }
48 }
49 }
50 }