轻松学Java之JDBC数据库编程.ppt

上传人:qwe****56 文档编号:80596750 上传时间:2023-03-23 格式:PPT 页数:44 大小:1.61MB
返回 下载 相关 举报
轻松学Java之JDBC数据库编程.ppt_第1页
第1页 / 共44页
轻松学Java之JDBC数据库编程.ppt_第2页
第2页 / 共44页
点击查看更多>>
资源描述

《轻松学Java之JDBC数据库编程.ppt》由会员分享,可在线阅读,更多相关《轻松学Java之JDBC数据库编程.ppt(44页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第17章JDBC数据库编程数据库是存储数据信息的中心,是一个有组织的数据集合。而Java作为一门高级语言,能够方便的操作数据库。如果希望使用Java语言编写的程序能够动态地运行,就需要使用数据库对其进行数据的增、删、改等操作。而且大多数的项目都需要用到数据库的操作。所以这一章我们就来一起学习数据库编程的相关知识。17.1 数据库简介这一节我们先来介绍有关数据库的一些基本知识,包括数据库简介、SQL语言简介和JDBC简介。17.1.1 数据库简介数据库最简单的理解存放数据的仓库。最早的数据库基本就只有这个功能,即把数据从文件柜里面存入到计算机里面存储起来。随着社会的发展,数据量越来越大,同时数据

2、交换越来越频繁,原来的模式已经不能满足人们的需要了。我们现在所说的数据库都是关系型数据库。数据库的发展历程可以用图17.1来表示。17.1.2SQL语句简介SQL 是一种结构化查询语言,但使用SQL语言我们不仅仅简单的只能查询,我们可以对数据库进行修改、删除等各种操作。由于它强大的功能和简单容易学,现在已经成为了操作关系数据库的的主要语言。SQL语言的功能可以简化为9个动词,我们可以用图17.7来表示。17.1.3 JDBC简介JDBC(Java Database Connectivity)Java的数据库连接接口。它是Java API中的一部分,通过它可以将Java程序和关系数据库集成在一起

3、。在没有出现JDBC之前,我们要通过数据库厂商提供的API以及SQL语句对数据库进行操作,如图17.8所示。17.1.3 JDBC简介不同的数据库有不同的API接口。这样的话,对于实现同样功能的应用程序,针对不同的数据库,开发人员需要编写不同的代码,这样对Java设计人员是很不方便的。所以官方开发出了JDBC。它的使用方式如图17.9所示。17.1.3 JDBC简介从图17.9中可以看到,应用程序通过调用JDBC来操作数据库的过程,其实是由数据库厂商提供的JDBC驱动程序来负责的。如果要更换数据库,只要更换驱动程序,并在JDBC中载入新的驱动程序来源,即可完成数据库系统的变更。这样,大大减少了

4、程序员的工作量。17.1.3 JDBC简介JDBC允许任何使用Java语言编写的小应用程序或应用程序访问数据库。通过使用SQL语句可以对数据库中的数据进行相应的插入、删除和更新操作。JDBC由Java语言编写的相关类和接口组成。这些类和接口如表17.1所示。类型型类或者接口或者接口驱动程序程序DriverManager类、Driver 接口与特定数据与特定数据库连接接Connection接口执行行SQL语句句Statement接口、PreparedStatement接口提供数据提供数据库信息信息DatabaseMetaData接口结果集果集ResultSet接口17.1.3 JDBC简介表中类

5、或接口的作用如图17.10所示。17.2 JDBC数据库的连接Java程序的JDBC驱动类型可以分为四种形式。其具体含义如图17.11所示。在连接数据库时需要指明数据源,以及相关的一些参数。数据源主要包括两部分,其中protocol表示连接到数据库的驱动程序,DatabaseName表示数据库的名字。数据源的一般格式如图17.12所示。17.2 JDBC数据库的连接在连接数据库时,需要找到使用JDBC驱动程序类的名称。不同的数据库供应商的数据库产品都有自己的驱动程序,不同数据库的URL和驱动程序也有所不同。目前最常用的三种主流数据库驱动程序如图17.13所示。17.2 JDBC数据库的连接而使

6、用Java与数据库连接进行数据存取的过程如图17.14所示。17.2 JDBC数据库的连接从图17.14中我们可以看出使用Java与数据库连接执行数据存取的过程:(1)首先要加载当前数据源的驱动程序。通常使用Class.forName()方法加载,其加载方法如图17.15所示。(2)建立数据库的连接。可以通过DriverManager类中的getConnection方法来实现与数据库的连接,其连接方法如图17.16所示。17.2 JDBC数据库的连接(3)建立连接后就可以使用SQL语句对数据库进行访问。这就需要创建Statement对象。通过该对象可以执行相应的SQL语句并将其操作于数据库,其

7、创建方法如图17.17所示。(4)将SQL语句执行后的结果返回。执行的查询结果可以以ResultSet结果集的形式返回,其返回方式如图17.18所示。17.2 JDBC数据库的连接(5)对结果集进进行处理。例如,我们可以通过使用一个while循序获得结果集中的所有记录,如图17.19所示。(6)关闭数据库的连接。在执行完数据库的操作之后,需要将与数据库连接有关的对象关闭。主要包括Statement对象、Connection对象等。关闭方法如图17.20所示。17.3 数据库的操作在第一节中我们已经创建了一个数据库和一个数据库中的学生表。这一节我们将围绕这个数据库讲解对数据库具体的操作方法。17

8、.3.1 创建、修改和删除表由于我们有了MySQL Workbench 5.2 CE这一图形界面开发工具,所以对于创建、修改和删除表这些工作就变的身份容易了。我们先来看如何创建表。系统已经为我们自动设置了一个主键,我们可以将其修改为“TeacherId”,然后依次双击下一行添加添加属性完成表的创建。最后单击Apply按钮后,系统会自动弹出与创建表相对应的SQL语句。然后我们单击Apply检验程序能否正确运行。若运行正确,则会弹出如图17.26所示的窗口,我们单击Finish按钮结束创建过程。17.3.2 查询数据明白了如何创建、修改和删除表之后,我们再来看对数据库中表中数据的查询、增加、修改和

9、删除。这些操作也都可以使用图形界面来完成。但是由于在Java程序中我们多采用SQL语句对其进行操作,所以我们这几小节重点介绍如何利用SQL语句完成这些操作。17.3.3 条件查询在实际使用中,有时需要在数据库的表中查询满足条件的元组。例如,查询所有年龄在30岁以上的教师的信息,查询学校中计算机系和网络工程的所有教师信息等。在SQL语句中提供了比较、确定范围和集合、多重条件等多种查询条件的语句。常用的查询条件及相应的谓词如图17.37所示。17.3.3 条件查询IN可以用来查找表中的属性值是否属于指定集合中的元组。IS NULL用于空值查询,它不能用=代替。AND的优先级比OR的优先级高。谓词I

10、N可以看做是多个OR的缩写。SQL还提供了使用LIKE和NOT LIKE用于字符匹配的模糊查询方式。“%”表示任意0个或多个字符。可匹配任意类型和长度的字符。“_”表示任意单个字符。匹配单个任意字符,它一般用来限制表达式的字符长度。使用ESCAPE关键字定义转义符。在ESCAPE关键字之后的符号会被当作普通字符来处理。17.3.4 连接查询在实际使用SQL语句进行查询时,有时查询一张表的数据很难满足需要。很多时候都需要查询两张表甚至多张表中的数据,这就需要使用连接查询。SQL语句中连接查询包括内连接、外连接、自连接,以及嵌套查询。1.内连接查询内连接查询是将多个表连成一个表的查询。只有那些满足

11、查询条件的列才会出现在最后的表中。要查询表teacherinfo和表departmentinfo中计算机专业的教师信息,可以使用如图17.44所示的语句。2.自连接查询所谓自连接,就是一个表与其自己进行连接。例如可以为teacherinfo表取两个别名,一个是FT,一个是ST。使用自连接查询的语句如图17.45所示。3.嵌套查询在SQL语句中,可以将一个SELECT-FROM-WHERE语句嵌套在另一个查询语句的WHERE子句或HAVING短语的条件中。像这样的查询称为嵌套查询。嵌套查询可以包括带有IN谓词的子查询、带有比较运算符的子查询、带有ANY或ALL谓词的子查询和带有EXISTS谓词的

12、子查询。下面我们分别举例说明这些查询。首先我们来看带有IN谓词的子查询,如图17.46所示。3.嵌套查询再来看一个带有比较运算符的子查询。例如查询工资比赵老师高的老师信息。接下来我们使用一个带有ALL谓词的子查询用来查询其他系中比信息管理系的教师的工资高的教师姓名和职称。带有EXISTS谓词的子查询的查询过程为首先取外层查询表中的第一个元组。若WHERE子句返回true,则将该取得的值放入到结果表中;然后再取表的下一个元组,重复这一过程,直至外层表全部检查完为止。17.3.5 集合查询在使用SQL语句进行操作时,有时需要对查询的数据进行计算。例如,计算从数据库表中查询出来的数据中最大或者最小的

13、一个数据的值,或者查询从数据库表中检索出来的记录一共有多少个等。这就需要用到SQL语句中的集合查询。我们可以使用SQL语句中提供的函数进行数据的检索。这些函数包括集函数、转换函数、字符函数等。1.集函数集函数包括COUNT、MIN、MAX、SUM和AVG。其函数名称和功能描述如表17.1所示。函数函数功能描述功能描述COUNT计算表达式中非空值的数量,如果使用DISTICE关键字则删除重复值。如果使用COUNT(*),则计算所有行数MIN计算表达式最小值。忽略表达式中的空值MAX计算表达式最大值。忽略表达式中的空值SUM计算表达式所有值的和。忽略表达式中的空值AVG计算表达式的平均值。忽略表达

14、式中空值2.转换函数转换函数有三个:TO_CHAR、TO_DATE和TO_NUMBER。它们的作用如图17.52所示。3.字符函数字符函数主要包括LOWER(全小写)、UPPER(全大写)、INITCAP(首字母大写)、CONCAT(连接字符串)、SUBSTR(取子串)、LENGTH(获取字符串长度)等。17.3.6增加数据插入数据可以使用INSERT语句。INSERT语句的使用方法如图17.56所示。17.3.7修改数据修改数据可以使用UPDATE语句。UPDATE语句的使用方法如图17.59所示。17.3.8删除数据删除数据可以使用DELETE语句。DELETE语句的使用方法如图17.62

15、所示。17.3.9视图视图是指从一个或几个基本表中导出的表。视图中只存放视图定义而不存放视图对应的数据。如果基本表的数据发生变化,从视图中查询出的数据也会发生变化。因此可以把视图认为是一个虚拟表。下面我们介绍一下在图形界面下视图的创建、修改和删除操作。1.创建视图创建视图也是用CREATE方法。创建视图的语法格式如图17.66所示。2.修改视图由于视图是不实际存储数据的虚拟表,因此更新视图的操作,最终要转化为对基本表的更新操作。为了防止对视图进行数据更新时,对不属于视图范围的基本表数据进行操作,可以在定义视图时加上WITH CHECK OPTION子句。我们发现表中数据发生了改变。由于视图多是

16、给用户进行浏览的,并不需要其进行修改,所以这样做很不安全。所以我们一般在SQL语句末尾加上WITH CHECK OPTION子句,这样用户就不能随意进行修改了。3.删除视图删除视图同样也是用DROP方法。其语法格式如图17.71所示。17.4 处理结果集在对数据库进行查询操作时,返回的结果可能为多条记录,也就是说是一个结果集。JDBC定义了ResultSet类来表示结果集,Statement的executeQuery()方法返回类型即为ResultSet。17.4.1 ResultSet对象处理结果集ResultSet类定义了许多方法用来辅助处理查询结果,具体方法和方法描述如表17.2所示。这

17、其中最常用的就是getMetaData()方法和boolean next()方法。getMetaData()方法主要用于获取列的各种属性,而boolean next()方法则多用于while循环中,用来循环输出查询结果。方法方法方法描述方法描述ResultSetMetaData getMetaData()检索此ResultSet对象的列的编号、类型和属性boolean getBoolean(int columnIndex)以Java编程语言中boolean的形式检索此ResultSet对象的当前行中指定列的值float getFloat(int columnIndex)以Java编程语言中fl

18、oat的形式检索int getInt(int columnIndex)以Java编程语言中int的形式检索此ResultSet对象的当前行中指定列的值String getString(int columnIndex)以Java编程语言中String的形式检索此ResultSet对象的当前行中指定列的值boolean next()将指针从当前位置下移一行17.4.2 滚动结果集使用滚动结果集可以将游标定位到任意位置。滚动结果集需要用到PreparedStatement对象,我们通常使用如图17.75所示的方式创建一个PreparedStatement对象。其中resultSetType和resu

19、ltSetConcurrency包含的类型如图17.76所示。17.4.2 滚动结果集ResultSet接口中还提供了一些方法用于实现滚动结果集。其中的主要方法及方法描述如表17.3所示。方法方法方法描述方法描述boolean absolute(int row)将游标移动到此ResultSet对象的指定参数row所对应的行。若游标位于有效行则返回trueboolean relative(int rows)按相对行数移动游标到参数rows指定的行。若游标位于有效行上则返回trueboolean first()将游标移动到第一行。若游标位于有效行则返回true,若结果集中没有数据行则返回false

20、boolean last()将游标移动到最后一行。若游标位于有效行则返回true,若结果集中没有数据行则返回falseboolean next()将游标移动到当前位置的下一行。若新当前行有效,则返回true;若不存在,则返回falseboolean previous()将游标移动到ResultSet对象的上一行。若该行有效则返回true,若不在结果集中则返回falseboolean isFirst()判断游标是否在此ResultSet对象的第一行。如果是则返回trueboolean isLast()判断游标是否在此ResultSet对象的最后一行。如果是则返回trueboolean isBef

21、oreFirst()判断游标是否在此ResultSet对象的第一行之前,如果是则返回trueboolean isAfterLast()判断游标是否在此ResultSet对象的最后一行之后,如果是则返回truevoid beforeFirst()将游标移动到此ResultSet对象第一行之前void afterLast()将游标移动到此ResultSet对象的最后一行之后17.4.2 滚动结果集这些方法的作用我们可以用图17.71和图17.72来分别表示。首先来看前六种方法的作用示意图,如图17.77所示。17.4.2 滚动结果集然后我们看后面的几种方法示意图,如图17.78所示。17.4.3

22、更新结果集当将创建Statement和PreparedStatement对象中的参数resultSetConcurrency设置为ResultSet.CONCUR_UPDATABLE时,则表明该结果集是可更新的。这时我们就可以直接在结果集中对数据库进行修改了。实现更新结果集主要方法及方法描述如表17.4所示。方法方法方法描述方法描述void insertRow()将插入行的内容插入到此 ResultSet 对象和数据库中。当指针位于插入时才可以调用该方法void updateRow()用此 ResultSet 对象的当前行的新内容更新底层数据库void deleteRow()将当前行从此 Re

23、sultSet 对象和底层数据库中删除void cancelRowUpdates()取消对 ResultSet对象中的当前行所作的更新。此方法在调用更新方法之后,调用updateRow方法之前调用才可以实现对行所作的更新。如果在updateRow方法之后调用该方法,则不能取消对行所做的更新void moveToCurrentRow()将游标移动到当前行。只有游标位于插入行上时,调用此方法才有效void moveToInsertRow()将游标移动到ResultSet 对象中插入行17.5 小结本章的核心内容是JDBC数据库编程,主要是Java在数据库中的应用。首先介绍了数据库、SQL语句和JDBC的基本概念,然后重点介绍了数据库连接的知识,最后为大家讲解了数据库的操作和处理结果集的知识。本章的重点是数据库的连接和对数据库中数据进行增删改查操作的理解和运用,难点是对数据库各种查询方法的理解运用。希望大家多加练习巩固,以更好地在今后工作中熟练地连接和使用JDBC数据库编程。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁