zoukankan      html  css  js  c++  java
  • 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太棒了和传智播客的李勇老师的视频眨眼
  • 相关阅读:
    HDU 3951 (博弈) Coin Game
    HDU 3863 (博弈) No Gambling
    HDU 3544 (不平等博弈) Alice's Game
    POJ 3225 (线段树 区间更新) Help with Intervals
    POJ 2528 (线段树 离散化) Mayor's posters
    POJ 3468 (线段树 区间增减) A Simple Problem with Integers
    HDU 1698 (线段树 区间更新) Just a Hook
    POJ (线段树) Who Gets the Most Candies?
    POJ 2828 (线段树 单点更新) Buy Tickets
    HDU 2795 (线段树 单点更新) Billboard
  • 原文地址:https://www.cnblogs.com/yefengyu/p/5079095.html
Copyright © 2011-2022 走看看