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的所有步骤全部完成。

  

原文地址:https://www.cnblogs.com/lilala/p/6739299.html