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() 可以提供批量更新功能。

参考

·JDBC 详解 - 五月的仓颉
·JDBC学习笔记 - 简书JDBC学习入门 - 孤傲苍狼
·java 开发中 JDBC 连接数据库代码和步骤

Java的事务类型

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

参考

·  ;

 

转载于:https://www.cnblogs.com/wjcx-sqh/p/5929877.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值