JDBC

1. Why
   JDBC使我们用Java语言编写的软件具备和数据库交互的能力;
2. What
   通过Java语言如何和数据库进行CRUD:
   . 和数据库连接、交互的六大步骤;
   . 六大步骤的细节补充;

Module 1: JDBC Overview
1. JDBC和ODBC的对比:
   优点: 1) 没有指针;
         2) 没有ODBC复杂;
     3) 纯Java;
2. jdbcapi的包
   java.sql
   javax.sql

   JDBC API

   . 能以一致的形式访问不同类型的关系数据库;

   . 本身是Java语言的组成内容;

   分为:

   . 一系列接口: 由Sun公司制定,由数据库软件程序员使用;

   . 接口实现类: 由数据库厂商实现;

     oracle  ->   ojdbc14.jar,ojdbc5.jar,classes12.jar
     mysql:mysql.jar

程序打包操作:
   jar cvf a.jar A.class B.class C.class

JDBC驱动:
   JDBC驱动程序:Sun公司所制定的JDBC接口实现类的集合,由数据库
厂商提供,不同数据库其JDBC驱动程序是不同的;
   java.sql.Driver: 建立和数据库的连接, Oracle数据库对该接口的
实现类名为:oracle.jdbc.driver.OracleDriver
   JDBC驱动程序实现的四种类型:
   TYPE I: JDBC-ODBC桥: 将对数据库的调用转嫁为对ODBC的调用,
   需要在Java程序所在的机器安装ODBC驱动管理器,效率差,不能跨平台;

   TYPE II: JDBC程序由二部分组成,一部分用Java编写,一部分是其它
            语言编写的二进制代码。

   TYPE III: 纯Java, 将对数据库的调用转嫁为中间服务器的调用;
   TYPE IV:  纯Java,直接和数据库进行交互。对相关代码进行了优化,
             性能最高。



java.sql
Driver: 通过connect()方法实现和数据库的连接;
        Connection connect(String url, Properties pro);
    url: 用来区分不同的驱动程序;
    pro: 封装数据库的用户名和密码,其中用户名和密码的key
         值分别为:user和password;     
DriverManager: 管理多个加载的驱动程序;
Connection: 和数据库连接的对象形式,代表了一个和数据库的连接;
Statement:  用以执行SQL语句,推荐异构操作的时候使用;
1) Statement的三个接口:
       a. Statement;
       b. PreparedStatement(继承自Statement);
       c. CallableStatement(继承自PreparedStatement);
 2) 使用方法Connection.createStatement()得到一个Statement对象
PreparedStatement:用以执行sql语句,推荐同构的sql语句使用,并配合占位符号使用


CallableStatement:
    1) 通过CallableStatement调用数据库中的存储过程;
    2) 继承自PreparedStatement;
    3) CallableStatement cstm = connection.prepareCall("{call return_student(?,?)}");
       cstm.setString(1,"8623034");
       cstm.registerOutparameter(2, Types.REAL);
       cstm.execute();
       float gpa = cstm.getFloat(2);

Statement和PreparedStatement区别:
1)建立
   stm=conn.createStatement();
   pstm=conn.prepareStatement(sql);
 2)执行
   stm.execute(sql);   包含数据的完整的sql命令
   pstm.execute();     只含数据
 3)stm 可以执行多条(异构的)sql
   pstm 只能执行一条sql
 4)使用pstm的环境
   a.执行同构sql,用pstm效率高
     执行异构sql,用stm效率高    
   b.构成sql语句时需要外部的变量值,用pstm

           | Statement           | PreparedStatement         |  CallableStatement
    ------------------------------------------------------------------------------
    写代码位置   |   客户端            | 客户端                    |  服务器端
    ------------------------------------------------------------------------------
    存储代码位置   |   客户端            | 服务器端                  |  服务器端
    ------------------------------------------------------------------------------
    编写代码技术 |Java,SQL操作        |Java,SQL操作              |  数据库的程序语言,如PL/SQL
    ------------------------------------------------------------------------------
    可配置性     |   高                |第一次低,以后高           |  低
    ------------------------------------------------------------------------------
    可移植性     |   高                |假设支持PreparedStatement的话高    
    ------------------------------------------------------------------------------
    传输效率     |   低                |第一次低,以后高           |  高


ResultSet: 封装Select语句返回的数据集,提供方法对数据集中内容
           进行获取和其它操作;
DatabaseMetadata: 获取数据库版本、用户名、对象名等
                  数据库信息;
ResultSetMetadata:获取一次查询结果的列名、数量、类型
                  等信息;
Types: 提供一系列常量代表数据类型;


JDBC的使用:
1. 注册Driver   ->  oracle.jdbc.driver.OracleDriver

   *方式一:Class.forName("oracle.jdbc.driver.OracleDriver");

    方式二:Driver driver = new DriverImpl();

           DriverManager.registerDriver(driver);

    方式三:-Djdbc.drivers=oracle.jdbc.driver.OracleDriver

常见的数据库驱动名:




2. 获得Connection

   *方式一:Connection conn = DriverManager.getConnection(

       url,user,password);

    方式二:Driver driver = new DriverImpl();

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

        

3. 创建Statement
   . Statement stmt = conn.createStatement();

   //和数据库交互,传输sql语句到数据库,sql语句接下来

   //在数据库内编译、优化好等着进一步执行;

   . PreparedStatement pstmt =

    conn.prepareStatement(sql);



4. 执行SQL语句

   //实现和数据库交互,传输SQL语句到数据库并执行SQL

   ResultSet rs = stmt.executeQuery(sql);

   int i = stmt.executeUpdate(sql);

   boolean flag = stmt.execute(sql);



   //实现和数据库交互,传输参数值到数据库并执行SQL

   pstmt.setInt(1,100);

   pstmt.setString(2,"zs");

   pstmt.setDate(3,Date.valueOf("1979-9-1"));

   ResultSet rs = pstmt.executeQuery();

   int i = pstmt.executeUpdate();

   boolean flag = pstmt.execute();



5. 处理结果集
1) 使用结果集(ResultSet)对象的访问方法获取数据;
       a. next():下一个记录
       b. first():第一个记录
       c. last():最后一个记录
       d. previous():上一个记录
    2) 通过字段名或索引取得数据
    3) 结果集保持了一个指向了当前行的指针,初始化位置为第一个记录前。
6. 关闭对象、释放资源,一般推荐先构建的后释放
   一般在finally里定义;
    1) 首先关闭记录集;
    2) 其次关闭声明;
    3) 最后关闭连接对象。

7,数据表和类对应的三种关系:
1) 一个表对应一个类;
2) 一个表对应相关类;
3) 一个表对应整个类关系层

8,SQL数据类型及其相应的Java数据类型
答:SQL数据类型                     Java数据类型              说明
    ------------------------------------------------------------------
    INTEGER或者INT                  int                     通常是个32位整数
    SMALLINT                        short                   通常是个16位整数
    NUMBER(m,n) DECIMAL(m,n)        Java.sql.Numeric        合计位数是m的定点十进制数,小数后面有n位数
    DEC(m,n)                        Java.sql.Numeric        合计位数是m的定点十进制数,小数后面有n位数
    FLOAT(n)                        double                  运算精度为n位二进制数的浮点数
    REAL                            float                   通常是32位浮点数
    DOUBLE                          double                  通常是64位浮点数
    CHARACTER(n)或CHAR(n)           String                  长度为n的固定长度字符串
    VARCHAR(n)                      String                  最大长度为n的可变长度字符串
    BOOLEAN                         boolean                 布尔值
    DATE                            Java.sql.Date           根据具体设备而实现的日历日期
    TIME                            Java.sql.Time           根据具体设备而实现的时戳
    TIMESTAMP                       Java.sql.Timestamp      根据具体设备而实现的当日日期和时间
    BLOB                            Java.sql.Blob           二进制大型对象
    TEXT                            Java.sql.Clob           字符大型对象
    ARRAY                           Java.sql.Array






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值