• JDBC


    JDBC

    面向关系型数据库的 Java 数据库连接,Java DataBase Connectivity,用于执行 SQL语句的 Java-API,由一组用 Java 语言编写的类和接口组成。Java 应用程序通过通用的 JDBC-API 在不同的 JDBC 驱动程序的管理下访问不同的数据库。目前常用的 JDBC 驱动是纯 Java 的、智能的,直接与数据库实例交互。

    • 与数据库建立连接;
    • 执行 SQL 语句;
    • 获取并处理执行结果;

    JDBC-API 支持两层 C/S 和三层 B/S 处理模型进行数据库访问,包括两个层次:

    • 面向应用的 API:Java (JDBC) API,抽象接口,供程序开发人员使用;
    • 面向数据库的 API:Java Driver API,供开发商开发数据库驱动程序使用。所有的 JDBC 驱动程序必须实现 Java.sql.Driver 接口;

    优缺点

    • 统一对不同数据库的操作,实现跨数据库、跨平台,可移植性好
    • 直接底层操作,数据访问速度快
    • 代码量大、重复,维护成本高

    JDBC包

    • java.sql
    • javax.sql  

    JDBC组件

    SQLException:类,异常处理;
    Driver:接口,与数据库的通讯;
    DriverManager:类,驱动管理器,主要功能是获取 Connection 对象;
    Connection:接口,代表数据库连接对象;
    Statement:接口,执行 SQL 语句、DDL/DML/DCL 的工具;
    - PreparedStatement:子接口,预编译的 Statement 对象,性能优于 Statement 对象;
       简化 sql 拼接带来的编程复杂度,执行效率高;
       防止 SQL 注入(Cracker入侵方式),安全性好;
      - CallableStatement:子接口,用于调用存储过程;
    ResultSet:结果集对象,其方法 getMetaData() 返回 ResultSetMetaData 对象;
     通过传入参数 resultSetTyperesultSetConcurrency 控制 ResultSet 的类型及其并发类型。
     ~  TYPE_SCROLL_SENSITIVE:可更新
     ~  CONCUR_UPDATABLE:可滚动
    - ResultSetMetaData:分析结果集的元数据接口,获取 ResultSet 对象的描述信息;
       int getColumnCount():列数量;
       String getColumnName(int columnIndex):指定索引的列名;
       int getColumnType(int columnIndex):指定索引的列类型;
    RowSet:ResultSet 的子接口,可滚动、可更新、可序列化,可作为 JavaBean 用于网络传输、同步两端数据。离线 RowSet 不需保持与数据库的连接,可充分利用内存,降低数据库服务器的负载、提高程序性能,CachedRowSet 是所有离线 RowSet 的父接口。Java 的 RowSet 类似 C# 的 DataSet,同时 RowSet 支持分页查询。
    - RowSetProvider:类,其方法 newFactory() 创建 RowSetFactory 对象;
    - RowSetFactory:接口,用于创建 RowSet 不同子接口的对象;
    利用 RowSet 对象的 populate() 方法可以将 ResultSet 对象(分页)装填到 RowSet 对象。
    DatabaseMetaData:接口,封装数据库连接对应的数据库信息,由 Connection 的实例方法 getMetaData() 获取。此外,可以通过查询系统表 information_schema 来分析数据库信息。
    - boolean supportsBatchUpdates():查看底层数据库是否支持批量更新;
    - ResultSet getXxx():获取 Xxx(数据列、主键等)信息;  

    JDBC 编程

     ♬  加载数据库驱动;
    Class.forName("com.mysql.jdbc.Driver");
     ♬  通过 DriverManager 获取数据库连接 Connection 对象;
     DriverManager.getConnection(url, userName, passWord); 其中,url 应为 "jdbc:mysql://hostName:port/databaseName" 
     ♬  通过 Connection 对象创建 Statement 对象;
    createStatement();
    prepareStatement(String sql);
    prepareCall(String sql);{call 存储过程名(?,?,?…)},同时需要为输出参数注册数据类型,其中,sql 中可以包含 ? 占位符。 
     ♬  通过 Statement 对象执行 SQL 语句;
     execute();  executeUpdate();  executeQuery();
     ♬  操作结果集;
    使用列索引作为参数性能更优,使用列名作为参数可读性好;
     ♬  回收数据库资源;
    :JDBC 使用 连接池 javax.sql.DataSource 管理数据库连接。数据库连接池是 Connection 对象的工厂,接口 DataSource 的对象的实例方法 getConnection() 获取数据库连接。

    JDBC - 事务支持

    JDBC 连接的的事务支持由 Connection 提供:

     conn.setAutoCommit(false);     //  关闭自动提交,开启事务
     conn.commit();                 //  提交事务
     conn.rollback()/rollback(Savepoint savepoint);      //  回滚事务(到中间点)

    Connection 提供的其他方法:

    boolean getAutoCommit();      //  获取该连接的自动提交模式
    Savepoint setSavepoint()/setSavepoint(String name)   //  设置并返回中间点的Savepoint对象

    此外,利用 Statement 对象的实例方法 addBatch(String sql) 和 executeBatch() 可以提供批量更新功能。

    参考

    Java的事务类型

    JDBC事务
    JTA事务
    Java Transaction API
    容器事务

  • 相关阅读:
    Android SQLite最简单demo实现(增删查改)
    最简单的自定义控件实现
    Android复杂自定义Listview实现
    Linux 下 实现 锐捷验证的方式
    Java EE学习路线
    ubuntu 12.04 配置-1
    Dream
    iOS UITextView设置富文本不能输入中文问题
    iOS UIScrollView滚动方法对比
    iOS 自定义View通知相关
  • 原文地址:https://www.cnblogs.com/wjcx-sqh/p/5929877.html
Copyright © 2020-2023  润新知