java JDK8 学习笔记——第16章 整合数据库

第十六章 整合数据库

16.1 JDBC入门

16.1.1 JDBC简介

1、JDBC是java联机数据库的标准规范。它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程序。

2、JDBC标准主要分为两个部分:JDBC应用程序开发者接口和JDBC驱动程序开发者接口。应用程序需要联机数据库,其相关API主要在java.sql和javax.sql两个包中。

3、应用程序使用JDBC联机数据库的通用语法:

Connection conn = DriverManager.getConnection(……);
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM T_USER");

4、JDBC希望达到一个“写一个java程序,操作所有数据库”的目的。

5、驱动器按照操作方式可分为四种类型: 
(1)JDBC-ODBC Bridge Driver :其在Microsoft系统上最为成熟。 
缺点:ODBC在平台上先设定好,弹性不足;本身也有跨平台限制。 
(2)Native API Driver:以原生方式,调用数据库提供的原生链接库。 
缺点:有跨平台限制  
优点:速度最快 
(3)JDBC-Net Driver :将JDBC方法调用转换为特定的网络协议调用 
优点:跨平台 
缺点:速度慢,获得架构弹性是使用这种类型驱动程序的目的 
(4)Native Protocol Driver :由数据库厂商直接提供 
优点:跨平台 ——是最常见的驱动程序类型

16.1.2 连接数据库

1、要连接数据库,必须在CLASSPATH中设定驱动程序JAR文档。

2、基本数据库操作相关JDBC接口或类是为位于java.sql包中。要取得数据库联机,需要进行几个动作:

(1)注册Driver对象 
(2)取得Connection操作对象 
(3)关闭Connection操作对象

3、注册Driver对象 
使用JDBC要求加载.class文档的4种方式: 
(1)使用Class.forName() 
(2)自行建立Driver接口操作类的实例 
(3)启动JVM时指定jdbc.drivers属性 
(4)设定JAR中/services/java.sql.Driver文档

4、取得Connection操作对象 
Connection接口的操作对象是数据库联机代表对象。其定义了数据库连接时的协议、子协议、数据源识别:

协议:子协议:数据源识别 
协议:jdbc 
子协议:桥接的驱动程序 
数据源识别:标出数据库的地址、端口号、名称、用户、密码等信息。 
注意:要使用中文存取必须给定参数useUnicode和characterEncoding。表明是否使用Unicode,并指定字符编码方式。 
在XML配置文件中,不能直接写&符号,要写成&amp。

16.1.3 使用Statement、ResultSet

1、Statement是SQL描述的代表对象,可以使用executeUpdate()、executeQuery()等方法来执行SQL。

2、Statement的executeUpdate()方法用于SELECT等查询数据库的SQL,返回int结果,表示数据变动的笔数

3、Statement的executeQuery()方法返回java.sql.ResultSet对象,代表查询结果。

4、Statement的execute()方法用来执行SQL,返回true表示SQL执行将返回ResultSet作为查询结果。

16.1.4 使用PreparedStatement、CallableStatement

1、如果有些操作只是SQL语句当中某些参数会有所不同,其余的SQL子句皆相同,则可以使用java.sql.PreparedStatement。调用clearParametere()清除设置的参数,之后就能再次使用这个PreparedStatement实例。

2、使用PreparedStatement的好处: 
(1)可以将SQL描述预编译为数据库的执行指令,执行速度可以快很多。 
(2)防止SQL注入

3、如果撰写数据库的预存程序,并想要使用JDBC来调用,则可使用java.sql.CallableStatement。必须调用prepareCall()建立CallableStatement异常,可以使用registerOutParameter()注册输出参数。

16.2 JDBC进阶

16.2.1 使用DataSource取得联机

1、让MessageDAO依赖于java.sql.DataSource接口,可以通过其定义的getConnection()方法取得Connection。

2、日后要修改数据库服务器主机位置,为了打算重复利用Connection对象而想要加入联机池机制等情况,这个MessageDAO都不用修改。

3、联机相关信息可以使用.properties设定。

16.2.2 使用ResultSet卷动、更新数据

1、建立Statement或PreparedStatement实例时,可以指定结果集类型与并行方式。

createStatement(int resultSetType,int resultSetConcurrency) prepareStatement(String sql,int resultSetType,int resultSetConcurrency)

2、结果集类型resultSetType可以指定3种:

ResultSet.TYPE _ FORWARD _ ONLY(默认) 
ResultSet.TYPE _ SCROLL _ INSENSITIVE 
ResultSet.TYPE _ SCROLL _ SENSITIVE

3、更新设定resultSetConcurrency可以指定2种:

ResultSet.CONCURREADONLY(默认) 
ResultSet.CONCUR_UPDATABLE

4、ResultSet进行数据修改的条件限制

必须选取单一表格 
必须选取主键 
必须选取所有NOT NULL的值

16.2.3 批次更新

1、批次更新的限制是,SQL不能使SELECT,否则会抛出异常。

2、要支持批次更新,必须在JDBC URL 上附加rewriteBatchedStatements = true 参数才有实际的作用。

16.2.4 Blob与Clob

1、BLOB用于存储大量的二进制数据,像是图档、影音档等;CLOB用于存储大量的文字数据。

2、可以把BLOB字段对应byte[]或输入\输出串流。

16.2.5 交易简介

1、交易的四个基本原则:

原子性:若有一个步骤失败,必须撤回曾经执行过的动作,回到交易前的状态 
一致性:交易作用的数据集合在交易前后必须一致 
隔离行为:交易与交易之间,必须互不干扰 
持续性:即使系统挂了,交易的结果也不能遗失

2、在交易管理时,仅想要撤回某个SQL执行点,则可以设定存储点。

3、数据库可设定指定的隔离行为,可设定常数为:

TRANSACTION _ UNCOMMITTED: 更新遗失
最低隔离层级,读取错误数据的几率太高,一般不会采用这种隔离层级。
TRANSACTION _ COMMITTED: 更新遗失+脏读 
交易读取的数据必须是其他交易已确认的数据 
TRANSACTION _ REPEATABLE _ READ: 更新遗失+脏读+无法重复读取
读取交易在确认前不阻止其他读取交易,,但会阻止其他更新交易。 
TRANSACTION _ SERIALIZABLE: 更新遗失+脏读+无法重复读取+幻读 交易时若有数据不一致的疑虑,交易必须可以照顺序逐一进行。

4、通过JDBC得知数据库是否支持某个隔离行为设定,可以通过Connection的getMetaData()取得DatabaseMetadata对象,通过DatabaseMetadata的supportTransaction-IsolationLevel()得知是否支持某个隔离行为。

16.2.6 metadata简介

Metadata即“诠读数据的数据”,可以通过connection的getMetaData()方法取得DatabaseMetaData对象,可以取得数据库整体信息,而ResultSet表示查询到的数据,可以通过ResultSet的getMetaData()方法,取得ResultSetMetaData对象。

16.2.7 RowSet简介

1、javax.sql.RowSet接口,代表数据的列集合。可以对列集合进行增删改查。通过setCommand()设定查询指令,通过execute()执行查询指令以填充数据。

2、RowSet定义了五个标准列集合子接口:

(1)jdbcRowSet 
是联机式的RowSet,保持与数据库的联机,可视为取得、操作RowSet的行为封装。 
(2)CacheRowSet 
是脱机式的RowSet,在查询并填充完数据后,会断开与数据源的联机 
(3)FilteredRowSet 
可以对列集合进行过滤,实现类似SQL中WHERE等条件式的功能。 
(4)JoinRowSet 
可以让你结合两个RowSet对象,可以通过setMatchColumn()指定要结合的行,然后使用addRowSet()来加入RowSet进行结合。 
(5)WebRowSet 
是CachedRowSet的子接口,不仅具备脱机操作,还能进行XM读写。

java JDK8 学习笔记第16章

时间: 2024-10-08 10:27:57

java JDK8 学习笔记——第16章 整合数据库的相关文章

java JDK8 学习笔记——第13章 时间与日期

第十三章 时间与日期 13.1 认识时间与日期 13.1.1 时间的度量 1.格林威治标准时间GMT 格林威治标准时间的正午是太阳抵达天空最高点之时.现在已经不作为标准时间使用. 2.世界时UT世界时是借由观测远方星体跨过子午线而得,在引入UTC之前,GMT和UT是相同的. 3.国际原子时TAI 将秒的国际单位定义为铯原子辐射振动91926331770周耗费的时间,从UT的1958年开始同步. 4.世界协调时UTC 采用了闰秒修正,确保UTC与UT相差不会超过0.9秒,加入闰秒的时间通常会在6月

java JDK8 学习笔记——第15章 通用API

第十五章 通用API 15.1 日志 15.1.1 日志API简介 1.java.util.logging包提供了日志功能相关类与接口,不必额外配置日志组件,就可在标准Java平台使用是其好处.使用日志的起点是Logger类,Logger类的构造函数标示为protected,不是java.util.logging同包的类不能直接以new创建,要取得Logger实例,必修使用Logger的静态方法getLogger(). 2.调用getLogger()时,必须指定Logger实例所属名称空间,名称

java JDK8 学习笔记——第17章 反射与类加载器

第十七章 反射与类加载器 17.1 运用反射 反射:.class文档反映了类基本信息,从Class等API取得类信息的方式称为反射. 17.1.1 Class与.class文档 1.java.lang.Class的实例代表Java应用程序运行时加载的.class文档,类.接口.Enum等编译过后,都会生成.class文档.Class类没有公开构造函数,实例时候JVM自动产生,每个.class文档加载时,JVM会自动生成对应的Class对象. 2.取得Class对象的方式: (1)通过Object

java JDK8 学习笔记——第18章 自定义泛型、枚举与注释

第十八章 自定义泛型.枚举与注释 18.1 自定义泛型 泛型定义: (1)仅定义在方法上的泛型语法 (2)用来限制泛型可用类型的extends与super关键字(3)?类型通配字符的使用 18.1.1 使用extends与? 1.若extends之后指定了类与接口,想再指定其他接口,可以使用&连接. 2.如果B是A的子类,而Node< B>可视为一种Node< A>,则称Node具有共变性或有弹性的.Java泛型不具有共变性,可以使用类型通配字符?与extends来声明变量

java JDK8 学习笔记——助教学习博客汇总

java JDK8 学习笔记——助教学习博客汇总 1-6章 (by肖昱) Java学习笔记第一章——Java平台概论 Java学习笔记第二章——从JDK到IDEJava学习笔记第三章——基础语法Java学习笔记第四章——认识对象 Java学习笔记第五章——对象封装 Java学习笔记第六章——继承与多态 7-10.12.14章 (by吴子怡) Java学习笔记JDK8>学习总结 11.13.15-18章 (by宋宸宁) 第11章 第13章第15章第16章第17章第18章

Java Web 学习笔记 第三章 java基础(二)

第三章 java基础(二) 一.转义符 转义字符是"\",通过转义字符,可表示一些特殊的字符. 例如: '\n'  表示回车 '\t'   表示 制表符字符,一个制表符表示向右跳8-10个字符 '\\'   表示\ '\''   表示单引号 '\"'  表示双引号 "\u4e2d"表示unicode编码对应的字符(汉字:中). 二.布尔类型的概念和用法 boolean 类型用来表示肯定或否定两种可能. boolean 常用在分支语句.循环语句中. true

java设计模式学习笔记第三章

适配器(Adapter)模式 接口适配 适配器模式的意图在于,使用不同接口的类所提供的服务为客户端提供它所期望的接口. <interface>                                                     PhysicalRocket RocketSim                                                      PhysicalRocket( getMass():double              

Java私人学习笔记——第4章 类和对象基础

4.1 面向对象基础 4.1.2 面向对象的基本特征 1.封装性     2.继承性     3.多态性 4.2 Java类和对象 4.2.1 类的定义 类的定义包括类声明和类体的定义: 1.类声明 [public][abstract | final]class ClassName[extends SuperClass][implements InterfaceNameList]{ //成员变量声明 //成员方法声明 } 抽象类不能实例化,final最终类不能被继承: 4.2.2 对象的使用 引

Java私人学习笔记——第2章 数据类型和运算符

2.2 数据类型 2.2.1 Java数据类型 2.3 常用运算符 Java提供了一组运算符丰富的操纵变量.我们可以把所有的Java操作符为以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 其它运算符 算术运算符: 算术运算符用于在数学表达式中,他们是在代数中使用的方法相同.下表列出了算术运算符: 假设整型变量A=10和变量B=20,则: 算术运算实例 运算符 描述 实例 + Addition - Adds values on either side of the opera