• JDBC基础


    使用jdbc已经是好几年前的事情了,JDBC现在用的人很少,一些ORM持久层框架已经对其进行了很好的封装和扩展,例如Hibernate或者mybatis,更方便在程序当中去使用。

    而JDBC作为JAVA数据库连接的基础API,是java实现数据访问的基础,因此掌握它还是很有必要的,趁着最近学习mybatis就顺便把jdbc的相关内容也整理下。

    一、JDBC的基础

    1. JDBC的定义

    JDBC(Java Database Connectivity,java数据库连接)是一种用于执行SQL语句的java API,可以为多种关系型数据库提供统一访问

    JDBC本身是java语言的组成内容。

    jdbc API的包:

      java.sql

      javax.sql

    JDBC接口(API)包括两个层次:

    • 面向应用的API:java API,一系列抽象接口,供应用程序开发人员使用(连接数据库,执行SQL语句,获得结果)。

    • 面向数据库的API: Java Driver API, 供开发商开发数据库驱动程序用。

    2.JDBC的作用

    JDBC使我们用Java语言编写的软件具备和数据库交互的能力。

    二、JDBC的应用

    1. 加载和注册驱动程序Driver

    • Java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现

    • 在程序中不需要直接去访问实现了 Driver 接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现。

    所用组件:DriverManager,该类是驱动程序管理器类,负责管理驱动程序。

    实现方式:

    • 方式一:

    Class.forName(driverClass);

    //加载oracle驱动

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

    //加载MySql驱动

    Class.forName("com.mysql.jdbc.Driver);

    • 方式二:

    Driver driver = new DriverImpl();  //例如oracle的oracleDriver, mysql的Driver

    DriverManager.registerDriver(driver); 

    //通常不用显示调用该方法来注册驱动程序类的实例,因为Driver接口的驱动程序类都包含了静态代码块,在这个静态代码块中,会调用该方法来注册自身的一个实例。

    • 方式三:

        -Djdbc.drivers=oracle.jdbc.driver.OracleDriver

    2. 建立连接,获取Connection

    组件:Connection,代表数据库连接对象,表示通信上下文,与数据库的所有通信都建立在此连接上。

    • 方式一:

    Connection conn = DriverManager.getConnection( url,user,password);

    /*

    URL定义了连接数据库时的协议、自协议、数据源标识

    书写形式:协议:子协议:数据源标识

    协议:在JDBC中总是以jdbc开始

    子协议:是桥连接的驱动程序或是数据库管理系统名称

    数据源标识:标记找到数据来源的地址与连接端口

    例如(mysql):jdbc:mysql://localhost:3306/test?userUnicode=true&characterEncoding=utf8

         (oracle):  jdbc:oracle:thin:@localhost:1521:test

    */

    • 方式二:

    Driver driver = new DriverImpl(); //例如oracle的oracleDriver, mysql的Driver

    Connection conn = driver.connect(url,pro);

    3. 定义SQL语句

    4. 创建Statement/PreparedStatement/CallableStatement对象

    组件:Statement,用于把SQL语句发送到数据库。特点:该对象用于执行静态的SQL语句,并且返回执行结果。

    Statement stmt = conn.createStatement();

     组件:PreparedStatement,用于执行动态SQL语句并进行预编译

     //和数据库交互,传输sql语句到数据库,sql语句接下来在数据库内编译、优化好等着进一步执行;

     PreparedStatement pstmt = conn.prepareStatement(sql);

       组件:CallableStatement,用于执行对存储过程的调用

          CallableStatement cstmt = conn.prepareCall(sql);

    5. 执行SQL语句

    //到此 stmt 已经存在了,但它还没有把 SQL 语句传递到 DBMS。我们需要提供 SQL 语句作为参数提供给我们使用的 Statement 的方法

    boolean execute(sql); //用于执行返回多个结果集、多个更新计数或二者组合的语句。

    int executeUpdate(sql); //用于执行INSERT、UPDATE、DELETE语句以及DDL语句

    ResultSet stmt.executeQuery(sql); //用于执行查询数据库的SQL语句,返回一个结果集对象

    6. 获取结果

     1).执行更新返回的是本次操作影响到的记录数。   

       2).执行查询返回的结果是一个ResultSet对象。  

    •   ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些行中数据的访问。   

         • 使用结果集(ResultSet)对象的访问方法获取数据

     

     while(rs.next()){            

      String name = rs.getString("name") ;   

          String pass = rs.getString(1) ; // 此方法比较高效   

      }   

      //列是从左到右编号的,并且从列1开始

    7. 关闭JDBC对象

          操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:   

      1、关闭记录集   

      2、关闭声明   

          3、关闭连接对象

      if(rs != null){   // 关闭记录集   

      try{   

              rs.close() ;   

            }catch(SQLException e){   

                e.printStackTrace() ;   

            }   

        }   

     if(stmt != null){   // 关闭声明   

       try{   

              stmt.close() ;   

            }catch(SQLException e){   

               e.printStackTrace() ;   

         }   

     }   

     if(conn != null){  // 关闭连接对象   

         try{   

                conn.close() ;   

             }catch(SQLException e){   

                e.printStackTrace() ;   

             }   

     }  

    至此,JDBC的所有步骤全部完成。

      

  • 相关阅读:
    C connect实现Timeout效果(Linux)
    QSS网址
    C实现读写文件
    crond守护进程实现定时监控某进程占有内存的大小
    Ubuntu17安装Chrome有效
    Ubuntu16安装wine(转)
    直方图均衡化
    函数后面的const修饰符的作用
    C 线程学习记录
    Override Fuction 调用——到底使用的是谁的函数
  • 原文地址:https://www.cnblogs.com/lilala/p/6739299.html
Copyright © 2020-2023  润新知