版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、13.JDBC编程讲师:疯狂软件 本章要点关系数据库与SQL语句SQL语法JDBC核心API使用JDBC执行SQL语句分析数据库的两种方式事务JDBC中的事务控制疯狂软件 JDBC概述通过使用JDBC API,Java程序可以非常方便地操作各种主流数据库,这是是Java语言的巨大魅力所在。而且由于Java语言的跨平台特性,所以使用JDBC API所编写的程序不仅可以实现跨数据库,还可以跨平台,具有非常优秀的可移植性。程序使用JDBC API以统一的方式来连接不同的数据库, 然后通过Statement对象来执行标准SQL语句,并可以获得SQ
2、L语句访问数据库的结果。因此掌握标准SQL语句是学习JDBC编程的基础,本章将会简要介绍关系数据库理论基础,并以MySQL数据库为例来讲解标准SQL语句的语法细节。包括基本查询语句,多表连接查询和子查询等。疯狂软件 JDBC驱动示意为了JDBC程序可以跨平台,则需要不同数据库厂商提供相应的驱动,下图显示了JDBC驱动的示意图。疯狂软件 JDBC驱动程序类型第一种JDBC驱动:称为JDBCODBC桥,这种驱动是最早实现的JDBC驱动程序,主要目的是为了快速推广 JDBC。这种驱动程序将JDBC API映射到ODBC API。JDBC-ODB
3、C也需要驱动,这种驱动由Sun公司提供实现。第二种JDBC驱动:直接将JDBC API映射成数据库特定的客户端API。这种驱动程序包含特定数据库的本地代码, 用于访问特定数据库的客户端。第三种JDBC驱动:支持三层结构的JDBC访问方式。主要用于Applet阶段,通过Applet访问数据库。第四种JDBC驱动:是纯Java的,直接与数据库实例交互。这种驱动是智能的,它知道数据库使用的底层协议。这 种驱动是目前最流行的JDBC驱动。疯狂软件 安装MySQL(1) 下载MySQL安装文件(2) 开始安装MySQL后,在出现的对话框中单击“Next”按钮。(3) 单击对话
4、框的“Next”按钮,将出现选择安装组件和安装路径的对话框。(4) 单击对话框中的“Next”按钮,将可开始安装MySQL数据库系统。安装成功后,系统还要求配置MySQL数据库。(5) 配置数据库时注意选择合适的字符集,并设置。疯狂软件 MySQL的常见命令show databases;drop database 数据库名;use 数据库名show tables;desc 表名疯狂软件 MySQL的两种存储机制MyISAM:这是MySQL早期默认的存储机制,对事务支持不够好。InnoDB:InnoDB提供事务安全的存储机制。InnoDB通
5、过建立行级锁来保证事务完整性, 并以Oracle风格的共享锁来处理Select语句。系统默认启动InnoDB机制,如果不想使用InnoDB表,可以使用skip-innodb 选项。疯狂软件 SQL语句SQL的全称是Structured Query Language,也就是结构化查询语言。SQL是操作和检索关系型数据库的标准语言, 标准SQL语句可用于操作任何关系数据库。使用SQL语句,程序员和数据库管理员(DBA)可以完成如下的任务:在数据库中检索需要的信息。对数据库的信息进行更新。改变数据库的结构。更改系统的安全设置。增加用户对数据库或表的许可权限。疯狂软件 ww
6、SQL语句分类查询语句:主要由于select关键字完成,查询语句是SQL 语句中最复杂,功能也最丰富的语句。DML语句(Data Manipulation Language,即数据操作语insert、update和delete三个关键字完成。言):主要由DDL语句(Data Definition Language,即使数据定义语言):主要由create、alter、drop和truncate四个关键字完成。DCL语句(Data Control Language,即使数据控制语言): 主要由grant 和revoke两个关键字完成。事务控制语句:主要由commit、rol
7、lback和savepoint三个关键字完成。疯狂软件 DDL语句DDL语句是操作数据库对象的语句,包括 创建(create) 删除(drop) 修改(alter)数据库对象。疯狂软件 数据库对象疯狂软件 对象名称对应关键字描述表table表是存储数据的逻辑单元,以行和列的形式存在;列就是字段,行就是记录。数据字典就是系统表,存放数据库相关信息的表。系统表里的数据通常由数据库系统维护。程序员通常不应该手动修改系统表及内部数据,程序员只可查看系统表的数据。约束constraint执行数据校验的规则,用于保证了数据
8、完整性的规则。视图view一个或者多个数据表里数据的逻辑显示。视图并不存储数据。索引index用于提高查询的性能,相当于书的目录。函数function用于完成一次特定的计算,具有一个返回值。存储过程procedure用于完成一次完整的业务处理,没有返回值,但可通过传出参数将多个值传给调用环境。触发器trigger相当于一个器,当数据库发生特定后, 触发器被触发,完成响应的处理。创建表的语法create table 模式名.表名(- 可以有多个列定义columnName1 datatype default expr ,)疯狂软件 修改表(增加列)的语法alter ta
9、ble 表名add (- 可以有多个列定义column_name1 datatype default expr ,);疯狂软件 修改表(修改列)的语法alter table 表名modify column_name datatype default expr first|after col_name;疯狂软件 修改表(删除列)的语法alter table 表名drop column_name疯狂软件 删除表的语法drop table 表名;疯狂软件 约束大部分数据库支持下面五类完整性
10、约束: NOT NULL:非空约束,指定某列不能为空。 UNIQUE:唯一约束,指定某列或者几列组合不能重复。 PRIMARY KEY:主键,指定该列的值可以唯一地表示该条记录。 FOREIGN KEY:外键,指定该行记录从属于主表中的一条记录,主要用于保证参照完整性。 CHECK:检查,指定一个布尔表达式,用于指定对应列的值必须满足该表达式。疯狂软件 索引索引是存放在模式(schema)中的一个数据库对象,虽 然索引总是从属于数据表,但它也和数据表一样,属于 数据库对象。创建索引唯一的作用就是加速对表的查询, 索引通过使用快速路径访问方法来快速定位数据,从而 减少
11、了磁盘的I/O。创建索引有两种方式: 自动:当在表上定义主键约束、唯一约束和外键约束时,系统会为该数据列自动创建对应的索引。 手动:用户可以手动创建索引来加速查询。删除索引也有两种方式: 自动:数据表被删除时,该表上的索引自动被删除。 手动:用户可以手动删除指定数据表上的指定索引。疯狂软件 视图视图看上去非常像一个数据表,但它不是数据表,因为它并不能存储数据。视图只是一个或多个数据表中数据的逻辑显示。使用视图有如下几个好处: 可以限制对数据的访问。 可以使复杂的查询变得简单。 提供了数据的独立性。 提供了对相同数据的不同显示。疯狂软件 创
12、建视图的语法create or replace view 视图名assubquery疯狂软件 DML语句与DDL操作数据库对象不同,DML主要操作数据表里的数据,使用DML可以完成如下三个任务: 插入新数据。 修改已有数据。 删除不需要的数据。疯狂软件 insert intoinsert into用于向指定数据表中插入记录。对于标准SQL语句而言,每次只能插入一条记录。insert into命令的语法格式如下: insert into table_name (column , column.) values(value , value.)
13、;疯狂软件 update语句update语句用于修改数据库记录,每次修改可以修改多条记录,可通过使用where子句限定修改哪些记录。where 子句是一个条件表达式,该条件表达式类似于Java编程语言的if,只有符合该条件的记录才会被修改。如果没有where子句意味着where子句的表达式值总是true,即该表的所有记录都会被修改。update语句的语法格式如下:update table_nameset column1= value1, column2 = value2 WHERE condition;疯狂软件 delete from语句
14、delete from语句用于删除指定数据表的记录,使用delete from删除时不需要指定列名,因为删除总是整行整行地删除。delete from删除可以一次删除多行,删除哪些行采用where子句限定,只删除满足where条件的记录。没有where子句将会把表里的全部记录删除。delete from语句的语法格式如下: delete from table_name WHERE condition;疯狂软件 SELECT语句select语句功能就是查询数据,select语句也是SQL语句能最丰富的语句,select语句不仅可以执行单表查询,还可以执行多表连接查询,
15、还可以进行子查询,select语句用于从一个或多个数据表中选出特定行、特定列的交集。最简单的select语句的语法格式如下: select column1, column2 . from 数据源 where condition疯狂软件 SELECT语句的规则当使用select语句进行查询时,还可以在select语句中使用算术运算符(+-*/),从而形成算术表达式,使用算数表达式的规则如下:对数值型数据列、变量、常量可以使用算数操作符(+-*/)创建表达式。对日期型数据列、变量、常量可以使用部分算数操作符创建表达式 (+-),两个日期之间可以进行减法运算,日期和数值之
16、间可进行加、减运算。运算符不仅可以在列和常量、变量之间进行运算,也可以在两列之间进行运算。疯狂软件 特殊比较运算符疯狂软件 运算符含义between val1 and val2大于等于val1,且小于等于val2。in(list)等于括号里多个值的任意之一。like字符串匹配,like后的字符串支持通配符。is null要求指定值等于null。数据库函数每个数据库都会在标准SQL基础上扩展一些函数,这些函数用于进行数据处理或复杂计算,根据函数对多行数据的处理方式,函数被分为单行函数和多行函数,单行函数对每行输入值单独计算,每行得到一个计算
17、结果返回给用户。多行函数对多行输入值整体计算,最后只会得到一个结果。单行函数和的多行函数的示意如图所示:疯狂软件 组函数组函数也就是前面提到多行函数,组函数将一组记录作为整体计算, 每一组记录返回一个结果,而不是每一条记录返回一个结果。常用的组函数有如下5个:avg(distinct|allexpr):计算多行expr的平均值,其中expr可以是变量、常量或数据列,但其数据类型必须数值型。还可以在变量、列前使用distinct或all关键字,如果使用distinct表明不计算重复值;all用和不用的效果完全一样,表明需要计算重复值。count( *|distinct
18、|allexpr):计算多行expr的平均值,其中expr可以是变量、常量或数据列,其数据类型可以是任意类型。用星号(*)表示统计该表内的记录行数。其中distinct表示不计算重复值。max(distinctexpr):计算多行expr的平均值,其中expr可以是变量、常量或数据列,其数据类型可以是任意类型。其中distinct表示不计算重复值。min(distinctexpr):计算多行expr的平均值,其中expr可以是变量、常量或数据列,其数据类型可以是任意类型。其中distinct表示不计算重复值。sum(distinct|allexpr):计算多行expr的总和,其中expr可以是
19、变量、常量或数据列,但其数据类型必须数值型。其中distinct表示不计算重复值。疯狂软件 多表连接查询多表连接查询有两种规范,较早的SQL92规范中支持如下几种多表连接查询: 等值连接。 非等值连接。 外连接。 广义笛卡尔积。疯狂软件 SQL99的多表连接查询SQL99规则提供了可读性更好的多表连接语法,并提供更多类型的连接查询,SQL99支持如下几种多表连接查询: 交叉连接。 自然连接。 使用using子句的连接。 使用on子句的连接。 全外连接或者左右外连接。疯狂软件 子查询子查询就是指在查询语句中嵌套另
20、一个查询,子查询可以支持多层嵌套。对于一个普通查询语句而言,子查询可以出现在两个位置: 出现在from语句后当成数据表,这种用法也被称为行内视图,因为该子查询的实质就是一个临时视图。 出现在where条件后作为过滤条件的值。疯狂软件 使用子查询的注意点使用子查询时有如下几个注意点: 子查询要用括号括起来。 子查询当成数据表时,可以为该子查询起别名, 尤其是要作为前缀来限定数据列时,必须给子 查询起别名。 子查询当过滤条件时,将子查询放在比较运算符的右边,这样可以增强查询的可读性。 子查询当过滤条件时,单行子查询使用单行运算符,多行子查询使用多行运算符。疯狂软件 ww
21、JDBC常用接口和类DriverManagerConnection Statement PreparedStatementResultSet疯狂软件 JDBC编程步骤(1) 加载数据库驱动。(2) 通过DriverManager获取数据库连接。(3) 通过Connection对象创建Statement对象。(4) 使用Statement执行SQL语句。所有Statement都有如下三个方法来执行SQL语句。(5) 操作结果集。如果执行的SQL语句是查询语句,执行结果将返回一个ResultSet对象,该对象里保存了SQL语句查询的结果。程序可以
22、通过操作该ResultSet对象来取出查询结果。疯狂软件 JDBC执行SQL语句的方式使用executeUpdate执行DDL和DML语句使用execute方法执行SQL语句使用executeQuery方法执行查询语句疯狂软件 PreparedStatementJDBC提供了PreparedStatement接口,它是Statement接口的子接口,它可以预编译SQL语句,预编译后的SQL语句被存储在PreparedStatement对象中。然后可以使用该对象多次高效地执行该语句。简而言之,使用PreparedStatement比使用St
23、atement的效率要高。使用PreparedStatement比使用Statement多了如下三个好处:PreparedStatement预编译SQL语句,性能更好。PreparedStatment无需“拼接”SQL语句,编程更简单。PreparedStatement可以防止SQL注入,安全性更好。疯狂软件 CallableStatment调用存储过程使用CallableStatement,可以通过Connection的prepareCall方法来创建CallableStatement对象, 创建该对象时需要传入调用存储过程的SQL语句,调用存储过程的SQL语句总
24、是这种格式:call 过程名(?,?,?.),其中的问号作为存储过程参数的占位符。存储过程的参数既有传入参数,也有传出参数。所谓传入参数就是Java程序必须为这些参数传入值,那么可以通过CallableStatement的setXxx方法为传入参数设置值; 所谓传出参数就是Java程序可以通过该参数获取存储过程里的值,那么CallableStatement需要调用registerOutParameter方法来注册该参数。疯狂软件 可滚动、可更新的结果集以默认方式打开的ResultSet是不可更新的,如果希望创建可更新的ResultSet,必须在创建Statement
25、或PreparedStatement时传入额外的参 数。Connection在创建Statement或PreparedStatement时还可额外传入两个参数:resultSetType:控制ResultSet的类型,该参数可以是如下三个值:ResultSet.TYPE_FORWARD_ONLY:该常量控制记录指针只能向前移动。这 是 JDK1.4 以 前 的 默 认 值 。 ResultSet.TYPE_SCROLL_INSENSITIVE:该常量控制记录指针可以自由移动(可滚动结果集),但底层数据的改变不会影响ResultSet的内容。ResultSet.TYPE_SCROLL_SENSI
26、TIVE:该常量控制记录指针可以自由移动(可滚动结果集),而且底层数据的改变会影响ResultSet的内容。resultSetConcurrency:控制ResultSet的并发类型,该参数可以接受如 下两个值:ResultSet.CONCUR_READ_ONLY:该常量指示ResultSet是只读的并发模式(默认)。ResultSet.CONCUR_UPDATABLE:该常量指示ResultSet是可更新的并发模式。疯狂软件 处理Blob类型数据所以将Blob数据插入数据库需要使用PreparedStatement, 该对象有一个方法:setBinaryStrea
27、m(int parameterIndex, InputStream x),该方法可以为指定参数传入二进制输入流,从而可以实现将Blob数据保存到数据库的功能。当我们需要从ResultSet里取出Blob数据时,可以调用ResultSet的getBlob(int columnIndex)方法,该方法将返回一个Blob对象,Blob对象提供了getBinaryStream方法来获取该Blob数据的输入流,也可使用Blob对象提供的getBytes方法直接取出该Blob对象封装的二进制数据。疯狂软件 使用ResultSetMetaDataResultSet里包含一个get
28、MetaData()方法,该方法返回该ResultSet对应的ResultSetMetaData对象。一旦获得了ResultSetMetaData对象,就可通过ResultSetMetaData提供的大量的方法来返回ResultSet的描述信息,常用的方法有如下三个:int getColumnCount():返回该ResultSet的列数量。String getColumnName(int column):返回指定索引的列名。int getColumnType(int column):返回指定索引的列类型。疯狂软件 事务事务是由一步或几步数据库操作序列组成的逻辑执行
29、单元,这系列操作要么全部执行,要么全部放弃执行。程序和事务是两个不同的概念。一般而言:一段程序中可能包含多个事务。事务具备四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、和持续性(Durability)。这四个特性也简称为ACID 性。原子性(Atomicity)一致性(Consistency) 隔离性(Isolation) 持续性(Durability)疯狂软件 事务的组成数据库的事务由下列语句组成: 一组DML语句,经过这组DML修改后数据将保持较好的一致性。 一个DDL 语句。 一个 DCL 语句。DDL
30、和DCL语句最多只能有一个,因为DDL和DCL语句都会导致事务立即提交。疯狂软件 事务的结束当事务所包含的全部数据库操作都成功执行后,应该提交(commit)事务,使这些修改永久生效。事务提交有两种方式:显式提交和自动提交。 显式提交:使用commit。 自动提交:执行DDL或DCL,或者程序正常退出。当事务所包含的任意一个数据库操作执行失败后,应该 回滚(rollback)事务,使该事务中所作的修改全部失效。事务回滚有两种方式:显式回滚和自动回滚。 显式回滚:使用rollback。 自动回滚:系统错误或者强行退出。疯狂软件 JDBC的事
31、务支持Connection的setAutoCommit方法来关闭自动提交,开启事务,如下SQL语句所示: conn.setAutoCommit(false);程序可以调用Connection的commit方法来提交事务,如下代码所示: mit();如果任意一条SQL语句执行失败,我们应该用Connection的rollback来回滚事务,如下代码所示: conn.rollback();疯狂软件 事务的中间点Connection也提供了设置中间点的方法:setSavepoint, Connection提供了两个方法来设置中间点: Savepoint s
32、etSavepoint():在当前事务中创建一个未命名的中间点),并返回代表该中间点的Savepoint对象。 Savepoint setSavepoint(String name):在当前事务中创建一个具有指定名称的中间点,并返回代表该中间点的Savepoint对象。通常来说,设置中间点时没有太大的必要指定名称,因为Connection回滚到指定中间点时,并不是根据名字回滚的,而是根据中间点对象回滚的。Connection提供了rollback(Savepoint savepoint)方法来回滚到指定中间点。疯狂软件 批量更新JDBC还提供了一个批量更新的功能,使
33、用批量更新时,多条SQL语句将会被作为一批操作被同时收集、并同时提交。批量更新必须得到底层数据库的支持,可以通过调用DatabaseMetaData的supportsBatchUpdates方法来查看底层数据库是否支持批量更新。使用批量更新也需要先创建一个Statement对象, 然后利用该对象addBatch方法将多条SQL语句同时收集起来,最后调用Statement对象的executeBatch同时执行这些SQL语句。疯狂软件 DatabaseMetaDataJDBC提供了DatabaseMetaData来封装数据库连接对应数据库的信息,通过Connection提供的getMetaData()方法就可以获取到数据库对应的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年超额保险合同赔付限制
- 2025版城市更新改造项目投标承诺书规范范本3篇
- 2025版木雕工艺品制作木工分包合同范本4篇
- 2025版企业销售业务员合作协议范本3篇
- 2025年度猪圈建造与农业循环经济合同4篇
- 二零二五版电影院装修升级合同范本3篇
- 2025版学校教师聘用合同范本:职称晋升条款详解3篇
- 2025年度体育场馆草坪铺设与维护服务合同4篇
- 2025年度货车司机劳动合同(附交通事故责任及赔偿)
- 2025年度智能科技股权众筹协议书模板
- 高考语文复习【知识精研】《千里江山图》高考真题说题课件
- 河北省承德市2023-2024学年高一上学期期末物理试卷(含答案)
- 高中物理斜面模型大全(80个)
- 012主要研究者(PI)职责药物临床试验机构GCP SOP
- 农耕研学活动方案种小麦
- 2024年佛山市劳动合同条例
- 污水管网规划建设方案
- 城镇智慧排水系统技术标准
- 采购管理制度及流程采购管理制度及流程
- 五年级美术下册第9课《写意蔬果》-优秀课件4人教版
- 节能降耗课件
评论
0/150
提交评论