JDBC学习笔记(2)

上一篇博客简单介绍了JDBC连接的简单知识,下面就详细介绍。李勇老师对JDBC连接有很好的比喻:

    首先加载驱动,其实就是一些类,就是jar包,要加载到classpath里面的。实际的程序,服务和数据库不是在同一台机器上的。首先要建立一个网络连接,有这个连接之后就可以通过java语言来访问数据库。比如两个城市之间运送货物,但是有个河,所以要建一座桥,这就是建立连接,而汽车运送货物,汽车就是Statement。而查询语句就是货物,这些货物发送之后获得的数据就是ResultSet。一次发送之后就要把数据清空,汽车销毁,桥也拆掉。

      一 注册驱动。

         你可以使用下面的六种方法注册,但是一般不常见,其中第一种使用方式最多。

        image 

       1,DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

      这是注册驱动的代码:

      image

      其中上面的图片的倒数第三行有个drivers,其定义如下,说明是个列表,可以把多个驱动放进去。

      image

      当把驱动加载进去之后,你调用DriverManager.getConnection(xxx)之后,会在驱动列表根据URL挨个找驱动,看哪个驱动可以连接上数据库。如果所有驱动都不能建立连接则报错。

    2, System.setProperty("jdbc.driver", "oracle.jdbc.driver.OracleDriver");

       这种方法也可以使得虚拟机加载驱动。并且可以一次加载多个,例如:

      System.setProperty("jdbc.driver", "oracle.jdbc.driver.OracleDriver:com.mysql.jdbc.Driver");

       image

     3,Class.forName("oracle.jdbc.driver.OracleDriver");

      这种是最常用的方法,他只是把类装载到虚拟机里面,但是没有构造实例了。一般都是把驱动放到驱动列表里面,但是这里面是怎么实现的呢?当一个类被加载到虚拟机之后呢,就要调用的该类的静态代码块,这是类的初始化的内容。那么看看实现该接口的JDBC驱动里面代码是怎么样的(这里是mysql的):可以看出,当类被加载到虚拟机的时候就会执行静态代码块的内容了。

      image

     上面三种方法哪种最好呢?当然是第三种,因为:

      第一、二种相当于注册两次,第三种只注册一次。

      第一种依赖数据库驱动,如果没有驱动,当然不能通过编译。第二种即使没有驱动,都可以通过编译。

      因此建议使用第三种方式。

二 建立连接

     一般的连接建立如下:

     这里主要讲一下URL是什么。

String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String user ="scott";//用户权限
String password = "scott";
Connection conn = DriverManager.getConnection(url, user, password);

      image

jdbc是个协议,上面的url最后面orcl是数据库实例。每个数据库的url格式都不同 ,下面是总结了大部分的数据库的URL格式:

      image

三 其他     

     当建立连接之后,用户就可以访问数据库了,相当于桥建好了。但是怎么访问了,当然是使用查询等sql语句,但是这些语句该怎么传送给数据库呢,当然要使用车来运输了,这个车就是要创建Statement对象,它可以传送要发送的sql语句,也会传送查询等的结果。但是有个问题是在数据执行所得到的结果放在哪里呢?一直放在车上?不会的,他会给ResultSet对象,这个对象是个二维表的结构,然后用户可以使用ResultSet对象里面查到的值做一系列操作了。当然最后要释放资源了,释放的顺序也很重要,先创建的后释放。为什么要释放资源呢?因为一个数据库有很多应用来操作,用了数据库之后要及时关闭,不然当超过一定值得时候会导致系统负载很大,导致宕机。

         // 3,创建语句
        Statement stmt = conn.createStatement();
        // 4,执行语句,返回结果集
        ResultSet rs = stmt.executeQuery(sql);
        // 5,处理结果
        while (rs.next()) {
            
        }
        // 6,关闭连接
        rs.close();
       stmt.close();
       conn.close();
这些代码是个简单的演示,只是为了熟悉过程。本文来自《JDBC Recipes A Problem-Solution Approach太棒了和传智播客的李勇老师的视频眨眼
posted @ 2015-12-26 21:22  yefengyu  阅读(264)  评论(0编辑  收藏  举报