博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDBC_基础6步骤- 及优化
阅读量:4599 次
发布时间:2019-06-09

本文共 5278 字,大约阅读时间需要 17 分钟。

(一)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.Statement26 27             st = conn.createStatement();28 29            30 31       //    4,执行SQL。java.sql.ResultSet32 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 }

 

 

 

转载于:https://www.cnblogs.com/misscai/p/9537528.html

你可能感兴趣的文章
IaaS,PaaS,SaaS 的区别
查看>>
Python复习基础篇
查看>>
关于Cocos2d-x中背景音乐和音效的添加
查看>>
checkbox和文字对齐
查看>>
JConsole远程连接配置 服务器监控工具
查看>>
了解HTTP协议栈(实践篇)
查看>>
loj10035. 「一本通 2.1 练习 1」Power Strings
查看>>
%s的用法
查看>>
调用底层不能直接访问的类和方法
查看>>
清理缓存的方法 #DF
查看>>
JAVA array,map 转 json 字符串
查看>>
2017-12-27练习
查看>>
NET设计规范(二) 命名规范
查看>>
VMware 9.0.1安装Mac OS X Mountain Lion 10.8.2
查看>>
SSL延迟
查看>>
android新手关于左右滑动的问题,布局把<android.support.v4.view.ViewPager/><ImageView/> 放在上面就不行了。...
查看>>
深入理解DIP、IoC、DI以及IoC容器
查看>>
赋值文件
查看>>
Vue 数组 字典 template v-for 的使用
查看>>
蓝牙模块选择经验谈
查看>>