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. [转] Redis系统性介绍

    Redis系统性介绍 http://blog.nosqlfan.com/html/3139.html?ref=rediszt 虽然Redis已经很火了,相信还是有很多同学对Redis只是有所听闻或者了 ...

  2. WPF应用程序最小化到系统托盘

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Windows; u ...

  3. [Aaronyang] 写给自己的WPF4.5 笔记18[几何图形*Geometry图文并茂讲解]

    为什么要掌握?因为WPF 3D知识很多与它Geometry对比,所以我要系统学一下. --学会用Geometry给Path的Data属性填充. 图形可以转换成路径,Path的值,当然你也可以直接使用R ...

  4. Remove WebCakeDesktop

    WebCakeDesktop.Updater.exe 是广告程序,卸载步骤参考 http://malwaretips.com/blogs/webcake-desktop-updater-exe-rem ...

  5. 关于 c# 操作 world

    把数据存放在datatable 中并循环取出来数据然后再保存在world中 protected void ExportToWord(DataSet Ads) { try { Object Nothin ...

  6. eclipse无线连接android真机能进调试

    将手机与电脑连接到同一个网段, 在手机上安装wifi adb程序,并打开,会得到一个IP及端口,比如是 192.168.1.126:5555 进入android sdk目录sdk\platform-t ...

  7. 老罗学习MVC之旅:MVC组件分析

    2System.Web.Mvc V 4.0.0.0 组件分析 2.1 Routing组件(路由选择) Routing的作用就是负责分析Url   Action的要求• 必须是一个公有方法• 必须返回A ...

  8. [译] 一、为何要推出AppCoda系列?

    声明:本文翻译自AppCoda网站的文章:Why Launching AppCoda?,作者是创建者Simon Ng.如有异议,请联系博主. 去年九月份,我在App Store上发布了自己第一个iPh ...

  9. JAVA本地远程连接linux程序监控状态

    环境:  1.本地window 2.程序部署在centos   一,启动访问权限安全守护程序 新建文件:jstatd.all.policy ,注意路径 grant codebase "$JA ...

  10. Android Studio开发JNI工程

    转:http://www.2cto.com/kf/201412/361768.html 使用Android Sutdio创建一个新的工程后,接下来记录创建NDK工程的基本步骤. 本文将达到: 1. 创 ...