JDBC专题
JDBC
·持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化以为着将内存中的数据保存到硬盘上加以“固化”,而持久化的实现过程大多通过各种关系数据库完成。
·持久化的主要应用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。
Java中的数据存储技术
·Java中,数据库存储技术可以分为如下几类:
-JDBC直接访问数据库
-JDO技术
-第三方O/R工具,如Hibernate,ibatis等
· JDBC是java访问数据库的基石,JDO,Hibernate等只是更好的封装了JDBC。
JDBC基础
·JDBC(Java database connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,使用这个类库可以以一种标准的方法、方便地访问数据库资源。
·JDBC为访问不同数据库提供了统一的途径,为开发者屏蔽了一些细节问题。
·JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。
JDBC体系结构
·JDBC接口(API)包括两个层次:
-面向应用的API:Java API,抽象接口,供应哟程序开发人员使用(连接数据库,执行SQL语句,获得结果)。
-面对数据库的API:Java Driver API,供开发商开发数据库驱动程序用。
JDBC驱动程序分类
·JDBC驱动程序:各个数据库厂商根据JDBC的规范制作的JDBC实现类的类库
·JDBC驱动程序总共有四种类型:
-第一类:JDBC-ODBC桥
-第二类:部分本地API部分java的驱动程序
-第三类:JDBC网络纯Java驱动程序
-第四类:本地协议的纯java驱动程序
-第三、四 两类都是纯java的驱动程序,因此,对于java开发者来说,它们在性能、可移植性、功能等方面都有优势。
ODBC
·早起对数据库的访问,都是调用数据库厂商提供的专有的API。为了在Windows平台下提供统一的访问方式,微软推出了ODBC(OpenDatabase Connectivity,开放式数据库连接),并提供了ODBC API,使用者在程序中需要调用ODBC API,由ODBC驱动程序将调用转换成为对特定的数据库的调用请求
·一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS(database manager system),不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access,MySql还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。
JDBC-ODBC桥
·JDBC-ODBC桥本身也是一个驱动,利用这个驱动,可以使用JDBC-API通过ODBC去访问数据库。这种机制时间上是把标准的JDBC调用转换成响应的ODBC调用,并通过ODBC访问数据库
·因为需要通过多层调用,所有利用JDBC-ODBC桥访问数据库的效率较低
·在JDK中,提供举例JDBC-ODBC桥的实现类(sun.jdbc.odbc.JdbcOdbcDriver)
部分本地API部分Java的驱动程序
·这种类型的JDBC驱动程序使用Java编写,它调用数据库厂商提供的本地API
·通过这种类型的JDBC驱动程序访问数据库减少了ODBC的调用环节,提高了数据库访问的效率
·在这种方式下需要在客户的机器上安装本地JDBC驱动程序和特定厂商的本地API
JDBC网络纯Java驱动程序
·这种驱动利用中间件的应用服务器来访问数据库。应用服务器作为一个到多个数据库的网关,客户端通过它可以连接到不同的数据库服务器。
·应用服务器通常有自己的网络协议,java用户程序通过JDBC驱动程序将JDBC调用发送给应用服务器,应用服务器使用本地程序驱动访问数据库,从而完成请求。
本地协议的纯Java驱动程序
·多数数据库厂商已经支持允许客户程序通过网络直接与数据库通信的网络协议。
·这种类型的驱动程序完全使用Java编写,通过与数据库建立的Socket连接,采用具体与厂商的网络协议把JDBC调用转换为直接的网络调用。
JDBC API
·JDBC API 是一系列的接口,它使得应用程序能够进行数据库连接,执行SQL语句,并且得到返回结果。
Driver接口
·Java.sql.Driver接口是所有JDBC驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现
·在程序中不需要直接去访问实现了Driver接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现
加载与注册JDBC驱动
·加载JDBC驱动需调用Class类的静态方法forName(),向其传递要加载的JDBC驱动的类名
·DriverManager类是驱动程序管理器类,负责管理驱动程序
·通常不用显示调用DriverManager类的registerDriver()方法来注册驱动程序类的实例,因为Driver接口的驱动程序类都包含了静态代码块,在这个静态代码块中,会调用DriverManager.registerDriver()方法来注册自身的一个实例
建立连接
·可以调用DriverManager类的getConnection()方法建立到数据库的连接
·JDBC URL用于标识一个被注册的驱动程序,驱动程序管理器通过这个URL选择正确的驱动程序,从而建立到数据库的连接。
·JDBC URL的标准由三部分组成,各部分间用冒号分隔。
-jdbc:<自协议>:<自名称>
-协议:JDBC URL 中的协议总是jdbc
-子协议:子协议用于标识一个数据库驱动程序
-子名称:一种标识数据库的方法。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息
几种常用数据库的JDBC URL
·对于Oracle数据库连接,采用如下形式:
SELECT id, name, age, birth FROM customer_table
数据类型转换表
SQL 注入攻击
Oracle LOB
目前只支持一种外部LOB类型,即BFILE类型。在数据库内,该类型仅存储数据在操作系统中的位置信息,而数据的实体以外部文件的形式存在于操作系统的文件系统中。因而,该类型所表示的数据是只读的,不参与事务。该类型可帮助用户管理大量的由外部程序访问的文件。
MySQL BLOB 类型介绍
需要注意的是:如果存储的文件过大,数据库的性能会下降
insert into javatest(name,content) values(?,empty_blob());
select content from javatest where name= ? for update;
注意: 须加for update,锁定该行,直至该行被修改完毕,保证不产生并发冲突。
3、利用 io,和获取到的cursor往数据库写数据流
JDBC专题的更多相关文章
- JDBC 专题
digest: getFetchSize()方法不是获得记录数,而是获得每次抓取的记录数,默认是0,也就是说不限制.可以用setFetchSize()来设置,而getFetchSize()是用来读出那 ...
- [自动化专题]JDBC操作mysql时遇到的拦路虎
在挫折中成长,在错误中学习.聊聊我们在Selenium自动化中使用JDBC操作mysql数据库中遇到的那些拦路虎: 错误一:Can not issue data manipulation statem ...
- mybatis源码专题(1)--------复习jdbc操作,编译mybatis源码,准备为你的简历加分吧
本文是作者原创,版权归作者所有.若要转载,请注明出处.文章中若有错误和疏漏之处,还请各位大佬不吝指出,谢谢大家. 1.mybatis的底层是jdbc操作,我们来回顾一下,如下 运行以后的结果如下图: ...
- JDBC 学习笔记(一)—— 基础知识 + 分页技术
本文目录: 1.JDBC简介 2.使用JDBC的步骤——第一个JDBC程序 3.DriverManager ——加载数据库驱动 4.数据库URL ——标识数据库的 ...
- JDBC连接数据库经验技巧(转)
Java数据库连接(JDBC)由一组用 Java 编程语言编写的类和接口组成.JDBC 为工具/数据库开发人员提供了一个标准的 API,使他们能够用纯Java API 来编写数据库应用程序.然而各个开 ...
- 开发指南专题十四:JEECG微云高速开发平台MiniDao 介绍
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhangdaiscott/article/details/27068645 开发指南专题十四:J ...
- [Java123] JDBC and Multi-Threading 多线程编程学习笔记
项目实际需求:DB交互使用多线程实现 多线程编程基础:1.5 :( (假设总分10) 计划一个半月从头学习梳理Java多线程编程基础以及Oracle数据库交互相关的多线程实现 学习如何通过代码去验证 ...
- Spring容器的属性配置详解的六个专题
在spring IOC容器的配置文件applicationContext.xml里,有一些配置细节值得一提.我们将一些问题归结为以下几个专题. 专题一:字面值问题 配置的bean节点中的值,我们提 ...
- Java基础专题
Java后端知识点汇总——Java基础专题 全套Java知识点汇总目录,见https://www.cnblogs.com/autism-dong/p/11831922.html 1.解释下什么是面向对 ...
随机推荐
- 犯过错误的C语言问题
1 memcpy函数: 函数原型:void *memcpy(void *dest, void *src, unsigned int count); 函数源码: void *memcpy1(void * ...
- PCA in Bioinformatics
光看原理和代码是没用的,得看看具体算法在实际中的用途,多看看文献. Principal component analysis for clustering gene expression data
- typedef void (*funcptr)(void)
定义一个函数指针类型.比如你有三个函数:void hello(void) { printf("你好!"); }void bye(void) { printf("再见!&q ...
- Link Collecting
----------------------------------\ ACM入门总结之常见输入输出格式暨hdu1089~1096 题解,谨献给对acm感兴趣的新人 - 博客频道 - CSDN.NET ...
- php面向对象Object
1.创建类 class 类名{ private 私有变量 只能本类的内部使用 protected 受保护的变量 本类和子类的内部 public 公开的变量 都可以使用 一般属性都设为私有 一般函数都是 ...
- 创建高性能移动 web 站点
如果你的网站3秒钟没有响应,人们就会失去兴趣了.为了满足响应快这个愿望,需要一个不同的方法在手机上进行分析,设计和测试. 这篇文章将会对Johan Johansson在2013年4月提出" ...
- Qt之Concurrent Map和Map-Reduce
简述 QtConcurrent::map().QtConcurrent::mapped()和QtConcurrent::mappedReduced()函数在一个序列中(例如:QList或QVector ...
- LDM和STM指令
LDM批量加载/STM批量存储指令可以实现一组寄存器和一块连续的内存单元之间传输数据. 允许一条指令传送16个寄存器的任意子集和所有寄存器,指令格式如下: LDM{cond} mode Rn{!} ...
- 张艾迪(创始人):发明Global.World.224C的天才
Eidyzhang: Genius.Founder.CEO.23 I 世界级最高级创始人.世界最高级FounderCEO 出生在亚洲中国.Eidyzhang 拥有黑色头发白色皮肤(20岁)大学辍学生. ...
- java arrayCopy
int[] dest = new int[0]; int[] value = {1,2}; if(value != null && value.length>0) { int[] ...