JDBC 架构:
JDBC 的 API 支持两层和三层处理模式进行数据库的访问,但是一般的JDBC架构由两层处理模式组成。
(1)JDBC API:提供了应用程序对 JDBC 管理器的连接
(2)JDBC Driver API:提供了 JDBC 管理器对驱动程序连接

结构图见 jdbc结构图.png

JDBC 的 API 提供了以下接口和类:
DriverManager :这个类管理一系列数据库驱动程序。匹配连接使用通信子协议从 JAVA 应用程序中请求合适的数据库驱动程序。
识别 JDBC 下某个子协议的第一驱动程序将被用于建立数据库连接。

Driver : 这个接口处理与数据库服务器的通信。你将很少直接与驱动程序互动。
相反,你使用 DriverManager 中的对象,它管理此类型的对象。它也抽象与驱动程序对象工作相关的详细信息。

Connection : 此接口具有接触数据库的所有方法。该连接对象表示通信上下文,即,所有与数据库的通信仅通过这个连接对象进行。

Statement : 使用创建于这个接口的对象将 SQL 语句提交到数据库。除了执行存储过程以外,一些派生的接口也接受参数。

ResultSet : 在你使用语句对象执行 SQL 查询后,这些对象保存从数据获得的数据。它作为一个迭代器,让您可以通过它的数据来移动。

SQLException : 这个类处理发生在数据库应用程序的任何错误。

创建 JDBC 应用程序的步骤:
1.导入数据包
2.注册 JDBC 驱动器(包括获取驱动,注册驱动(各大厂商已实现))
3.通过驱动管理器获取连接
4.执行查询
5.提取结果数据
6.清理环境

常用的 JDBC 驱动名和数据库 URL:

RDBMS JDBC 驱动程序名称 URL 格式
MySQL com.mysql.jdbc.Driver jdbc:mysql://hostname/ databaseName
ORACLE oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@hostname:port Number:databaseName
DB2 COM.ibm.db2.jdbc.net.DB2Driver jdbc:db2:hostname:port Number/databaseName
Sybase com.sybase.jdbc.SybDriver jdbc:sybase:Tds:hostname: port Number/databaseName

Statement 对象:
创建了数据库连接,就可以与数据库进行交互。
JDBC 的 Statement,CallableStatement 和 PreparedStatement 接口定义的方法和属性,可以让你发送 SQL 命令或 PL/SQL 命令到数据库,并从你的数据库接收数据。

接口 推荐使用
Statement 可以正常访问数据库,适用于运行静态 SQL 语句。 Statement 接口不接受参数。
PreparedStatement 计划多次使用 SQL 语句, PreparedStatement 接口运行时接受输入的参数。
CallableStatement 适用于当你要访问数据库存储过程的时候, CallableStatement 接口运行时也接受输入的参数。

Java数据类型、JDBC数据类型、Sql数据类型
JDBC驱动程序在将 Java数据类型发送的数据库之前,首先会转换为JDBC类型,然后JDBC类型转换为数据库数据类型。
当通过调用 PreparedStatement 的 setXxx()方法时,Java 数据类型会转换为默认的 Jdbc数据类型。

Java SqlDateTime:
Java Date: JanuaryTue Aug 18 13:46:02 GMT+04:00 2009
Sql Date: January 1, 2003
Sql Time: 2:00pm
Sql Timestamp: January 1, 2003 2:00pm

默认情况下,JDBC连接处于自动提交模式。
但是有三个原因你想关掉自动提交模式,管理自己的事务:
为了提高性能
为了保持业务流程的完整性
使用分布式事务

若要使用手动事务模式,使用 Connection 对象的 SetAutoCommit(false) 方法。
提交:conn.commit()。
回滚:conn.rollback()。

回滚还原点:
通过setSavepoint(String savepointName) 来设置一个还原点,通过conn.rollback(savepointName) 来回滚到对应还原点。
删除还原点:
通过 releaseSavepoint(Savepoint savepointName) 来删除一个还原点。

批处理:
将关联的Sql 语句组合成一个批处理,并将它们当成一个调用提交给数据库。减少了通信资源的消耗,提高了性能。
Statement、PreparedStatement、CallableStatement的addBatch() 方法用于添加单个语句(可以是不同的语句)到批处理。
executeBatch() 方法用于启动执行所有组合到一起的语句。返回一个整数数组,数组中每个元素代表了各自的更新语句的更新数目。

批处理和 Statement 对象
使用 createStatement() 方法创建一个 Statement 对象。
使用 setAutoCommit() 方法将自动提交设为 false。
被创建的 Statement 对象可以使用 addBatch() 方法来添加你想要的所有SQL语句。
被创建的 Statement 对象可以用 executeBatch() 将所有的 SQL 语句执行。
最后,使用 commit() 方法提交所有的更改。

批处理和 PrepareStatement 对象
使用占位符创建 SQL 语句。
使用任一 prepareStatement() 方法创建 prepareStatement 对象。
使用 setAutoCommit() 方法将自动提交设为 false。
被创建的 Statement 对象可以使用 addBatch() 方法来添加你想要的所有 SQL 语句。
被创建的 Statement 对象可以用 executeBatch() 将所有的 SQL 语句执行。
最后,使用 commit() 方法提交所有的更改。

jdbc中的细节的更多相关文章

  1. 转:JDBC中关于PreparedStatement.setObject的一些细节说明

    原文地址:https://blog.csdn.net/zhiyangxuzs/article/details/78657235 JDBC中PreparedStatement.setObject(ind ...

  2. JDBC中的Statement和PreparedStatement的区别

    JDBC中的Statement和PreparedStatement的区别  

  3. [转]JDBC中日期时间的处理技巧

    Java中用类java.util.Date对日期/时间做了封装,此类提供了对年.月.日.时.分.秒.毫秒以及时区的控制方法,同时也提供一些工具方法,比如日期/时间的比较,前后判断等. java.uti ...

  4. JDBC中的事务-Transaction

    事务-Transaction 某些情况下我们希望对数据库的某一操作要么整体成功,要么整体失败,经典的例子就是支付宝提现.例如我们发起了支付宝到银行卡的100元提现申请,我们希望的结果是支付宝余额减少1 ...

  5. Oracle数据库编程:在JDBC中应用Oracle

    9.在JDBC中应用Oracle: JDBC访问数据库基本步骤:          1.加载驱动          2.获取链接对象          3.创建SQL语句          4.提交S ...

  6. JDBC中的ResultSet无法多次循环的问题。

    前几天碰见了一个很奇葩的问题,使我百思不得其解,今天就写一下我遇见的问题吧,也供大家参考,别和我犯同样的毛病. 首先说下jdbc,jdbc是java是一种用于执行SQL语句的Java API,从jdb ...

  7. 在JDBC中使用Java8的日期LocalDate、LocalDateTime

    在实体Entity里面,可以使用java.sql.Date.java.sql.Timestamp.java.util.Date来映射到数据库的date.timestamp.datetime等字段 但是 ...

  8. 使用JDBC中的出现的乱码和查询无结果问题

    使用JDBC中的问题 连接的后出现查询结果是乱码. 1.可能是代码的编码与数据库的编码不同 ​ 有可以将二者都设置为UTF-8 2.如果比较懒得话可以只设代码为UTF-8 mysql 连接url中us ...

  9. 一、DAO设计模式 二、DAO设计模式的优化 三、JDBC中的事务,连接池的使用

    一.DAO设计模式概述###<1>概念 DAO,Data Access Object ,用于访问数据库的对象. 位于业务逻辑和数据持久化层之间,实现对数据持久化层的访问![](1.png) ...

随机推荐

  1. php加密解密功能类

    这两天突发奇想想要用php写一个对日常项目加密以及解密的功能,经过努力简单的封装了一个对php代码进行加密解密的类,一些思想也是来自于网络,初步测试用着还行,可以实现对指定项目的加密以及解密(只针对本 ...

  2. 《STL系列》之vector原理及实现

    最近忙得蛋疼,但还是想写点属于自己的东西.也不知道写点啥,最后决定试着自己实现STL中常用的几个集合,一来加深自己对STL的理解,二来看看自己是否有这个能力实现.实现目标就是:1能和STL兼容:2最大 ...

  3. 怎样用UltraISO制作U盘系统安装盘

    http://jingyan.baidu.com/article/d169e186800f02436711d87b.html 如今用u盘装系统成为主流,如何不被社会淘汰.跟我往下边看吧~~ 工具/原料 ...

  4. centos 7 /etc/rc.local 开机不执行的问题

    最近发现centos7 的/etc/rc.local不会开机执行,于是认真看了下/etc/rc.local文件内容的就发现了问题的原因了 1 2 3 4 5 6 7 8 9 10 11 #!/bin/ ...

  5. Https 公钥、私钥、证书

    .https的握手协议: http://blog.csdn.net/clh604/article/details/221799072.证书的概念:http://blog.csdn.net/sealya ...

  6. [Javascript] Decorators in JavaScript

    First, what is 'High Order function', basic just a function, inside the function return another fuct ...

  7. OBS---环境配置之#include <D3DX10.h>报错

    一.先贴错误 因为这个笔记主要记录我如何整好这个OBS源码环境的,给需要的童鞋一个参考 1.1.#include <D3DX10.h>  报错 没有这个 解决方案:把2,3先解决了就水到渠 ...

  8. Java IO 之 OutputStream源码

    Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆         瓣:BYSocket FaceBook:BYSocket Twitter   ...

  9. shell 常用命令

    Terminal是Mac OS X系统中的字符控制界面,可以更灵活地控制苹果电脑以下看到 “>“ 就是打指令的地方,prompt,指令列>pwd列出路径>ls列出此档案夹里所有的东西 ...

  10. LiveWriter Test

    From LiveWriter.