0%

JDBC

JDBC概述

  • jdbc概述

    JDBC从物理结构上说就是Java语言访问数据库的一套接口集合。
    从本质上来说就是调用者(程序员)和实现者(数据库厂商)之间的协议。

    JDBC API 使得开发人员可以使用纯Java的方式来连接数据库,并进行操作。
    ODBC:基于C语言的数据库访问接口。
    JDBC:是Java版的ODBC。
    JDBC 特性:高度的一致性、简单性(常用的接口只有4、5个)。

JDBC 编程的步骤

  • 基本步骤:

    1.加载和注册数据库驱动
    2.连接数据库
    3.创建Statement对象 //为了类型安全和批量更新的效率,改用PreparedStatement
    4.操作数据库,执行SQL语句
    5.处理数据(游标)
    6.释放资源,断开与数据库的连接

  • 代码示例

      public class ConnTest2 {
          private static final String URL = "jdbc:mysql://localhost:3306/jdbc_test";
          private static final String USER = "root";
          private static final String PASSWORD = "123";
      
          public static void main(String[] args) throws ClassNotFoundException, SQLException {
              //加载驱动
              Class.forName("com.mysql.jdbc.Driver");
              //获取数据库连接
              Connection conn = DriverManager.getConnection(URL,USER,PASSWORD);
              Statement stmt = conn.createStatement();
              //通过数据库的连接操作数据库,实现对数据库的增删改查
              ResultSet rs = stmt.executeQuery("SELECT user_name,age FROM person");
              while(rs.next()){
                  System.out.println(rs.getString("user_name")+","+rs.getInt("age"));
              }
          }
      }
    
  • 但是通常情况下,为了代码复用,都会将连接语句封装成一个工具类DBUtils

      package com.jdbc.utils;
      
      import java.sql.Connection;
      import java.sql.DriverManager;
      import java.sql.SQLException;
      
      /**
       * 数据库连接工具类 供其他类使用
       */
      public class DBUtils {
          private static final String URL = "jdbc:mysql://localhost:3306/jdbc_test";
          private static final String USER = "root";
          private static final String PASSWORD = "123";
          private static Connection conn = null;
      
          public static Connection getConnection() throws ClassNotFoundException, SQLException {
              //加载数据库驱动
              Class.forName("com.mysql.jdbc.Driver");
              //获取数据库连接信息
              conn = DriverManager.getConnection(URL, USER, PASSWORD);
              //Statement stmt = conn.createStatement();
              //返回数据库连接信息对外提供使用
              return conn;
          }
      
      }
    
  • Dao层方法调用DBUtils

      //删除
      public void del(Person person) throws SQLException, ClassNotFoundException {
          Connection conn = DBUtils.getConnection();
          String sql;
          sql = "DELETE FROM person WHERE id=?";
          PreparedStatement ptmt = conn.prepareStatement(sql);
          ptmt.setInt(1, person.getId());
          ptmt.execute();
    
      }
    

JDBC几个重要接口

  • 参考博客:

    http://blog.csdn.net/gotohbu/article/details/4501811

  • JDBC中包括了两个包:java.sql和javax.sql

      java.sql  基本功能。
      javax.sql  扩展功能。
    
  • java.sql

    这个包中的类和接口主要针对基本的数据库编程服务,如生成连接、执行语句以及准备语句和运行批处理查询等。同时也有一些高级的处理,比如批处理更新、事务隔离和可滚动结果集等

  • javax.sql

    它主要为数据库方面的高级操作提供了接口和类。

    如为连接管理、分布式事务和旧有的连接提供了更好的抽象,它引入了容器管理的连接池、分布式事务和行集等。

  • Statement与PreparedStatement

  • Statement

    SQL语句执行接口,代表了一个数据库的状态,在向数据库发送相应的SQL语句时,都需要创建Statement接口或PreparedStatement接口。

    在具体应用中,Statement主要用于操作不带参数(可以直接运行)的SQL语句,比如删除语句、添加或更新

  • PreparedStatement

Statement、PreparedStatement、CallableStatement

  • 三种方式分析比较

    1.JDBC提供了Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句,

      其中 Statement 用于通用查询, 
      PreparedStatement 用于执行参数化查询,
      而 CallableStatement则是用于存储过程
      
    

    2.对于PreparedStatement来说,数据库可以使用已经编译过及定义好的执行计划,
    由于PreparedStatement对象已预编译过,所以其执行速度要快于Statement对象。

    3.PreparedStatement:

      可变参数的SQL,编译一次,执行多次,效率高;
      支持批量更新,批量删除;  
      可以阻止常见的SQL注入式攻击。
      PreparedStatement中,“?” 叫做占位符,一个占位符必定只能对应一个值
    

JDBC中Transaction编程(事务编程)

  • 事务的特点

    1. 原子性(Atomicity):事务是一个完整的操作
    2. 一致性(Consistency):当事务完成时,数据必须处于一致状态
    3. 隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的
    4. 永久性(Durability):事务完成时,它对数据库的修改被永久保持

JDBC替代品

  • 主要有一下替代品

    • commons-dbutils
    • hibernate
    • mybatis