为什么要自定义数据库连接的工具类:
在开发中,我们在对数据库进行操作时,必须要先获取数据库的连接,在上一篇随笔中提到的获取数据库连接的步骤为:
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 }