jdbc中的细节
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中的细节的更多相关文章
- 转:JDBC中关于PreparedStatement.setObject的一些细节说明
原文地址:https://blog.csdn.net/zhiyangxuzs/article/details/78657235 JDBC中PreparedStatement.setObject(ind ...
- JDBC中的Statement和PreparedStatement的区别
JDBC中的Statement和PreparedStatement的区别
- [转]JDBC中日期时间的处理技巧
Java中用类java.util.Date对日期/时间做了封装,此类提供了对年.月.日.时.分.秒.毫秒以及时区的控制方法,同时也提供一些工具方法,比如日期/时间的比较,前后判断等. java.uti ...
- JDBC中的事务-Transaction
事务-Transaction 某些情况下我们希望对数据库的某一操作要么整体成功,要么整体失败,经典的例子就是支付宝提现.例如我们发起了支付宝到银行卡的100元提现申请,我们希望的结果是支付宝余额减少1 ...
- Oracle数据库编程:在JDBC中应用Oracle
9.在JDBC中应用Oracle: JDBC访问数据库基本步骤: 1.加载驱动 2.获取链接对象 3.创建SQL语句 4.提交S ...
- JDBC中的ResultSet无法多次循环的问题。
前几天碰见了一个很奇葩的问题,使我百思不得其解,今天就写一下我遇见的问题吧,也供大家参考,别和我犯同样的毛病. 首先说下jdbc,jdbc是java是一种用于执行SQL语句的Java API,从jdb ...
- 在JDBC中使用Java8的日期LocalDate、LocalDateTime
在实体Entity里面,可以使用java.sql.Date.java.sql.Timestamp.java.util.Date来映射到数据库的date.timestamp.datetime等字段 但是 ...
- 使用JDBC中的出现的乱码和查询无结果问题
使用JDBC中的问题 连接的后出现查询结果是乱码. 1.可能是代码的编码与数据库的编码不同 有可以将二者都设置为UTF-8 2.如果比较懒得话可以只设代码为UTF-8 mysql 连接url中us ...
- 一、DAO设计模式 二、DAO设计模式的优化 三、JDBC中的事务,连接池的使用
一.DAO设计模式概述###<1>概念 DAO,Data Access Object ,用于访问数据库的对象. 位于业务逻辑和数据持久化层之间,实现对数据持久化层的访问![](1.png) ...
随机推荐
- 通过apt-get安装nvidia驱动
标签:NVIDIA Driver apt 早前安装的NVIDIA显卡驱动在启动X Server的时候提示版本太新了,要求必须使用340.96的,而新的驱动都到了367 https://wiki.deb ...
- python3 crypto winrandom import error
早就听说3的包很成熟了,自从从2.7过渡上来后还是碰到各种不适应,可以想象更早的时候问题该要多么多,特别一些必备库经典库如果没有跟进得多痛苦. [code lang="python" ...
- 那些一目了然的3D地质模型 【转】
http://www.360doc.com/content/16/0830/09/14719766_586950902.shtml
- [Javascript] The "this" keyword
The very first thing to understand when we're talking about this-keyword is really understand what's ...
- JVM内存溢出及合理配置
Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机.Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对Java JVM有关内存方面的知识 ...
- saiku 展示优化
saiku版本:3.7.4 下面是修改步骤,如果觉得麻烦,可以直接下载源代码:https://github.com/lihehuo/saiku 1.关闭自动执行 修改文件:saiku-ui/js/sa ...
- IE11兼容性设定
增加browser文件,如下: <browsers> <browser refID="Default"> <capabilities&g ...
- EPLAN部件库之共享方法
在使用EPLAN时经常会碰到自己电脑里的部件库和公司里其他同事的部件库存在差异,如果不是很平凡的同步所有使用的部件库,这种现象是不可避免的.这种情况对于一个团队用户来说是很麻烦的已经事,给维护部件库也 ...
- Fast 迅捷网络 无线路由器FW323的功能设置
一.问题的提出 1.有一个无线路由器,型号:Fast 迅捷网络 无线路由器FW323 2.有三个网络层级,第一级,用一个路由器A负责对接互联网,内网IP段为192.168.1.*,网关设置192.16 ...
- 又是一个小正则replace
var a = "http://www.xx.com?id=111&-deb"; var b = "http://www.xx.com?-deb&id=1 ...