码迷,mamicode.com
首页 > 数据库 > 详细

JDBC_基础6步骤- 及优化

时间:2018-08-26 16:50:16      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:class   取数据   static   指针   name   state   source   for   jdbcutil   

(一)JDBC过程

//    1,注册驱动com.mysql.jdbc.Driver

      DriverManager.registerDriver(new Driver());

      这种注册方式有两个缺点

     1.  注册了两次驱动(new Driver()中有和这个一样的代码,这样就注册了两次,不好)

                  2. 产生了紧耦合关系(必须导入 com.mysql.jdbc.Driver   写死了,耦合度太高,不好

 

       解决方案: Class.forName(com.mysql.jdbc.Driver”);  

     

//    2,获取数据库连接java.sql.Connection

     Connection conn =

            DriverManager.getConnection(

            "jdbc:mysql://localhost:3306/jtdb",  "root","root");

     

//    3,获取传输器java.sql.Statement

      Statement st = conn.createStatement();

      常用方法:

         executeQuery()   ---  用来执行查询的SQL

         executeUpdate()   --  用来执行增删改的SQL

     

//    4,执行SQL。java.sql.ResultSet

      String sql ="select * from user";

      ResultSet rs = st.executeQuery(sql);

     

//    5,遍历结果集

      while(rs.next()){

         //根据列的索引获取第一列的数据

         String id = rs.getString(1);

        

         //根据列的索引获取第二列的数据

         String username = rs.getString(2);

        

         //根据列的索引获取第三列的数据

         String password = rs.getString(3);

        

         System.out.println(id+username+password);

        

      }

     

//    6,释放资源

    在jdbc的开发中,释放资源的过程是必须要保证完成的,jdbc资源非常稀缺。在释放资源的过程中,会发生异常,这个时候为了保证资源一定会被释放,需要把释放资源的代码放在finally语句块中,来保证finally块中的代码一定会被执行到。

  正着开,倒着关

      rs.close();//释放结果集资源

      st.close();//释放传输器资源

      conn.close();//释放连接资源

 

(二)对其进行优化和改进(JDBCUtils工具类)

      因为每次 第一步注册驱动 和 第二步获取数据库连接 和 第六步释放资源 每次连接数据库这三步都是一样的。所以将其封装成工具方法。对其进行调用就可以了,没有必要每次进行重写。  

   我们将注册驱动不要写死,并将jdbcUrl和root和password都放到属性文件中,这样可以灵活的修改。

           编写属性文件注意事项:

                 位置:src    new-file     jdbc.properties   后缀名:properties

                 格式:key=value,想要获取value时,通过get(key)来实现。

技术分享图片

 

         调用属性文件中的内容,需要用到

         ResourceBundle rb = ResourceBundle.getBundle("jdbc");    //标红的为你的属性文件的名字,后缀必须为properties!!!

  1 public class JDBCUtils {
  2 
  3   
  4 
  5    //1,私有化构造函数,外界无法直接创建对象
  6 
  7    private JDBCUtils(){}
  8 
  9   
 10 
 11    //终极优化:只加载一次属性文件
 12 
 13    static ResourceBundle rb = null;
 14 
 15    static{
 16 
 17       //a,,,,读取属性文件
 18 
 19       rb = ResourceBundle.getBundle("jdbc");
 20 
 21    }
 22 
 23   
 24 
 25   
 26 
 27    //2,提供公共的,静态的,getConnection 方法,
 28 
 29    //用来给外界提供数据库连接
 30 
 31    public static Connection getConnection(){
 32 
 33       try {
 34 
 35         
 36 
 37          //1,注册驱动
 38 
 39          //b,,获取属性文件里的内容
 40 
 41          Class.forName(rb.getString("driverClass"));
 42 
 43         
 44 
 45          //2,获取数据库连接
 46 
 47          String url=rb.getString("jdbcUrl");
 48 
 49          String user=rb.getString("user");
 50 
 51          String password=rb.getString("password");
 52 
 53         
 54 
 55          Connection conn =
 56 
 57                 DriverManager.getConnection(
 58 
 59                       url, user, password);
 60 
 61      
 62 
 63          return conn;
 64 
 65       } catch (Exception e) {
 66 
 67          e.printStackTrace();
 68 
 69       }
 70 
 71       return null;
 72 
 73    }
 74 
 75   
 76 
 77    //3,提供公共的,静态的,close方法,
 78 
 79    //用来释放资源
 80 
 81    public static void close(ResultSet rs,
 82 
 83                        Statement st,
 84 
 85                        Connection conn){
 86 
 87       //释放结果集资源
 88 
 89       //非空判断,防止空指针异常
 90 
 91       if(rs!=null){
 92 
 93          try {
 94 
 95             rs.close();
 96 
 97          } catch (SQLException e) {
 98 
 99             e.printStackTrace();
100 
101          }finally{
102 
103             rs=null;//手动置空
104 
105          }
106 
107       }
108 
109       //释放传输器资源
110 
111       //非空判断,防止空指针异常
112 
113       if(st!=null){
114 
115          try {
116 
117             st.close();
118 
119          } catch (SQLException e) {
120 
121             e.printStackTrace();
122 
123          }finally{
124 
125             st=null;//手动置空
126 
127          }
128 
129       }
130 
131       //释放数据库连接资源
132 
133       //非空判断,防止空指针异常
134 
135       if(conn!=null){
136 
137          try {
138 
139             conn.close();
140 
141          } catch (SQLException e) {
142 
143             e.printStackTrace();
144 
145          }finally{
146 
147             conn=null;//手动置空
148 
149          }
150 
151       }
152 
153      
154 
155      
156 
157    }

 

测试代码如下所示

 1 public class TestUtils {
 2 
 3    //单元测试方法:@Test  +  void
 4 
 5       @Test
 6 
 7       public void hello(){
 8 
 9          Connection conn = null;//声明连接对象
10 
11          Statement st = null;//声明传输器对象
12 
13          ResultSet rs = null;//声明结果集对象
14 
15         
16 
17          try {
18 
19             //1,注册驱动   2,获取数据库连接
20 
21             conn = JDBCUtils.getConnection();
22 
23            
24 
25       //    3,获取传输器java.sql.Statement
26 
27             st = conn.createStatement();
28 
29            
30 
31       //    4,执行SQL。java.sql.ResultSet
32 
33             String sql ="select * from user";
34 
35             rs = st.executeQuery(sql);
36 
37            
38 
39       //    5,遍历结果集
40 
41             while(rs.next()){
42 
43                 //根据列的索引获取第一列的数据
44 
45       //       String id = rs.getString(1);
46 
47                 //根据列的名字获取第一列的数据
48 
49                 String id = rs.getString("id");
50 
51       //       int id1  = rs.getInt(1);
52 
53                
54 
55                 //根据列的索引获取第二列的数据
56 
57                 String username = rs.getString(2);
58 
59                
60 
61                 //根据列的索引获取第三列的数据
62 
63                 String password = rs.getString(3);
64 
65                
66 
67                 System.out.println(id+username+password);
68 
69                
70 
71             }
72 
73            
74 
75          } catch (SQLException e) {
76 
77             e.printStackTrace();
78 
79          }finally{//保证资源一定会被释放
80 
81       //    6,释放资源
82 
83             JDBCUtils.close(rs, st, conn);
84 
85          }
86 
87         
88 
89       }
90 
91 }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JDBC_基础6步骤- 及优化

标签:class   取数据   static   指针   name   state   source   for   jdbcutil   

原文地址:https://www.cnblogs.com/misscai/p/9537528.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!