《java数据库编程接口.pdf》由会员分享,可在线阅读,更多相关《java数据库编程接口.pdf(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 1第第 9 章章 java 数据库编程接口数据库编程接口 9.1 知识框架 图 9.1 本章知识结构 9.2 知识点分析 一、数据库基础知识概述一、数据库基础知识概述 1数据库技术概述:数据库是在长期存储在计算机内的、有组织的、可共享的数据集合。数据是数据库中存储的基本对象。数据库管理系统 DBMS(Database Management System)是位于用户和操作系统之间的一层数据管理数据库基础知识 数据库技术概述 数据库结构 java数据库编程接口 SQL 语言 SQL 语言基础知识 表的创建与维护 数据查询 SELECT 插入语句 INSERT 数据维护 数据库的逻辑结构(二维表)
2、外来码 二维表的操作 投影操作 选择操作 查询排序输出 ORDER BY 修改语句 UPDATE 删除语句 DELETE 表的创建与删除 连接操作:多表查询 查询统计 Access 数据库实例 Access 操作界面 在 Access 中创建表 表中数据的维护与浏览 创建数据源 JDBC 与数据库访问 JDBC 概述 利用JDBC访问数据库的基本方法 JDBC 的常用类与接口 建立数据库连接 创建语句对象 向数据库发送 SQL 语句:查询,插入,删除和修改 执行带有参数的 SQL 语句 在 数 据 库 中 创 建 表CREATE TABLE 语句 数据维护 2软件。主要包括数据定义、数据操纵、
3、数据库的运行管理和建立和维护等功能。数据库系统是指在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统、应用系统、数据库管理员和用户构成。常常把数据库系统简称为数据库。数据库管理技术的发展经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。2.数据库结构 数据模型决定了数据库组织和管理数据的方式,在数据库领域中最常用的数据模型有层次模型、网状模型、关系模型和面向对象模型。(1)二维表 关系模型是目前最重要的一种数据模型,关系型数据库采用关系模型作为数据的组织方式。关系模型中数据的逻辑结构是一张二维表,由行和列组成。列决定了二维表的结构,每列表示一个属性。每行存储二维表的一条记
4、录。表 9.1 学生信息表就是一张二维表。表 9.1 学生信息表 学号 姓名 性别 出生年月 学院号 2008111101 王晓明 男 1990-4-6 D01 2008111102 黄大忠 男 1989-8-1 D02 2008111103 张丽丽 女 1991-1-1 D01 2008111104 李萍 女 1990-2-8 D03 表 9.2 学院表 学院号 学院名 电话 D01 计算机学院 86361302 D02 外语学院 86381333 D03 材料学院 86361311 D04 建筑城规学院 86361388 在表 9.1 学生信息表中,每个学生都用学号、姓名、性别、出生年月和
5、学院号等五个属性来描述,每一行的取值对应一条学生记录。所有学生信息表中的记录构成了一个集合,每条学生记录可以看作这个集合中的一个元素。因为集合中的元素不能重复,所以关系型数据库的二维表的记录也不能重复。(2)关系:一个关系对应一张二维表,如表 9.1 学生信息表和表 9.2 学院表。(3)元组:标的一行。(4)属性:一列为一个属性。(5)表的主码(Key):表中的某个属性或者属性组,可以唯一的确定表中的一组记录。关系模型以主码作为唯一性标识,主码不能为 NULL。如学生信息表可以采用学号作为主码,因为每个学生的学号是唯一的,字段学号在任何一条学生记录中都不能为空;学院表一般采用学院号作为主码。
6、(6)表的外码(Foreign key):一个表中的某一列是另一个表的主码。如表 9.1 学生信息表中的学院号是表 9.2 学院表的主键,那么在表 9.1 中字段学院号就是外码。学生信息表和学院表之间是有联系的,每个学生只能属于一个学院,而一个学院可以包含很多名学生。学生信息表和学院表之间也是存在于某种约束关系的,学生信息表中的“学院号”的取值必须是学院表中“学院号”取值的某个有效值。删除学院表之前,必须确定学生信息表中已经没有学院号等于待删除学院编号的学生记录。通过这些约束关系,来保持学院表和学生信息表中数据的一致性。二、二、SQL 语言简介语言简介 1.SQL 3SQL(Structure
7、d Query Language)结构化查询语言,是一个通用的,功能极强的关系数据库语言。SQL语言结构简洁,功能强大,简单易学。自从 IBM 公司 1981 年推出以来,SQL 语言得到了广泛的应用。大多数数据库都采用SQL作为共同的数据存储语言和标准接口,如Oracle,Sybase,Informix,SQL server等。掌握 SQL 语言是编写 Java 数据库应用程序的基础。2.表的创建、数据维护和查询的 SQL 操作(1)创建和删除表的 SQL 操作 CREATE TABLE studentInfo /创建学生信息表 studentInfo sno CHAR(10)PRIMARY
8、 KEY,sname VARCHAR(20),sex VARCHAR(2),birthdate DATE,dno varchar(3);DROP TABLE studentInfo;/删除学生信息表 studentInfo 说明:SQL 语句不区分大小写。创建表时,各个字段的定义之间用逗号隔开。一条 SQL 语句书写结束后以分号结束。每条 SQL 语句完成一项具体的功能。注意 char 和 varchar 的区别。u char 为定长字符型,CHAR(10)代表字符串的长度为 10,当输入数据不足为 10 的时候,系统会自动补足空格。u VARCHAR 为变长字符型,VARCHAR(20)代表
9、最大字符数为 20,当输入字符不足 20 的时候,系统只会存储用户实际输入的字符长度,而不会补空格。(2)维护表的 SQL 操作 主要包括从表中插入新的记录,删除记录和修改记录的操作。向表中出入一条新的记录 INSERT INTO studentInfo VALUES(2008111105,刘晓,女,1991-3-6,D04);向学生信息表 studentInfo 中插入一条新记录。修改表中的一条记录 UPDATE studentInfo set sex=女 WHERE sno=2008111105;将 studentInfo 表中学号为 2008111105 的学生的性别改为女。删除表中符合
10、条件的记录 DELETE FROM studentInfo WHERE sno=2008111105;从 studentInfo 表中删除学号为 2008111105 的学生记录。(3)数据查询操作 从数据库中查找符合条件的记录,并对数据进行排序、统计等。单表查询 SELECT*FROM studentInfo where sex=女 AND birthdate#1990-1-1#从学生信息表 studentInfo 中查询 1990 年 1 月 1 号后出生的所有女生信息。SELECT sno,sname,dno FROM studentInfo WHERE dno=D01 AND sex=
11、男;4 显示学院号是 D01 的所有男生的学号,姓名和学院号。多表查询 SELECT sname,sex,birthdate,dname FROM studentInfo,dept where studentInfo.sno=dept.sno AND sex=男;查询显示计算机学院所有男生的姓名、性别、出生日期和学院名称。查询统计 SELECT COUNT(*),SUM(salary)FROM emp WHERE dno=d01;统计部门号 d01 的职工人数和工资总和。模糊查询 SELECT*FROM studentInfo WHERE sname like 王*;查找 studentInf
12、o 表中所有姓王的同学。三、三、ACCESS 数据库实例数据库实例 1.ACCESS 数据库简介 ACCESS 是微软公司推出的基于 Windows 的桌面关系数据库管理系统(RDBMS),是 Office 系列应用软件之一。它提供了表、查询、窗体、报表、页、宏、模块 7 种用来建立数据库系统的对象;提供了多种向导、生成器、模板,把数据存储、数据查询、界面设计、报表生成等操作规范化;为建立功能完善的数据库管理系统提供了方便,也使得普通用户不必编写代码,就可以完成大部分数据管理的任务。在 ACCESS 中创建数据库,有两种方法:一是使用模板创建,模板数据库可以原样使用,也可以对它们进行自定义,以
13、便更好地满足需要;二是先建立一个空数据库,然后再添加表、窗体、报表等其他对象,这种方法较为灵活,但需要分别定义每个数据库元素。无论采用哪种方法,都可以随时修改或扩展数据库。2.ACCESS 中的数据类型 在 Access 中有“文本”、“备注”、“数字”、“日期/时间”、“货币”、“自动编号”、“是/否”、“OLE 对象”、“超级链接”、“查阅向导”十种数据类型。每种数据类型的用法如下:(1)文本:这种类型允许最大 255 个字符或数字,Access 默认的大小是 50 个字符,而且系统只保存输入到字段中的字符,而不保存文本字段中未用位置上的空字符。可以设置“字段大小”属性控制可输入的最大字符
14、长度。(2)备注:这种类型用来保存长度较长的文本及数字,它允许字段能够存储长达 64000 个字符的内容。但 Access 不能对备注字段进行排序或索引,却可以对文本字段进行排序和索引。在备注字段中虽然可以搜索文本,但却不如在有索引的文本字段中搜索得快。(3)数字:这种字段类型可以用来存储进行算术计算的数字数据,用户还可以设置“字段大小”属性定义一个特定的数字类型,任何指定为数字数据类型的字型可以设置成“字节”、“整数”、“长整数”、“单精度数”、“双精度数”、“同步复制 ID”、“小数”五种类型。在 Access 中通常默认为“双精度数”。(4)日期/时间:这种类型是用来存储日期、时间或日期
15、时间一起的,每个日期/时间字段需要 8 个字节的存储空间。(5)货币:这种类型是数字数据类型的特殊类型,等价于具有双精度属性的数字字段类型。向货币字段输入数据时,不必键入人民币符号和千位处的逗号,Access 会自动显示人民币符号和逗号,并添加两位小数到货币字段。当小数部分多于两位时,Access 会对数据进行四舍五入。精确度为小数点左方 15 位数及右方 4 位数。(6)自动编号:这种类型较为特殊,每次向表格添加新记录时,Access 会自动插入唯一顺序或者随机编号,即在自动编号字段中指定某一数值。自动编号一旦被指定,就会永久地与记录连接。如果删除了 5表格中含有自动编号字段的一个记录后,A
16、ccess 并不会为表格自动编号字段重新编号。当添加某一记录时,Access 不再使用已被删除的自动编号字段的数值,而是重新按递增的规律重新赋值。(7)是/否:这种字段是针对于某一字段中只包含两个不同的可选值而设立的字段,通过是/否数据类型的格式特性,用户可以对是/否字段进行选择。(8)OLE 对象:这个字段是指字段允许单独地“链接”或“嵌入”OLE 对象。添加数据到 OLE 对象字段时,可以链接或嵌入Access表中的OLE对象是指在其他使用OLE协议程序创建的对象,例如WORD文档、EXCEL 电子表格、图像、声音或其他二进制数据。OLE 对象字段最大可为 1GB,它主要受磁盘空间限制。(
17、9)超级链接:这个字段主要是用来保存超级链接的,包含作为超级链接地址的文本或以文本形式存储的字符与数字的组合。当单击一个超级链接时,WEB 浏览器或 Access 将根据超级链接地址到达指定的目标。超级链接最多可包含三部分:一是在字段或控件中显示的文本;二是到文件或页面的路径;三是在文件或页面中的地址。在这个字段或控件中插入超级链接地址最简单的方法就是在“插入”菜单中单击“超级链接”命令。(10)查阅向导:这个字段类型为用户提供了一个建立字段内容的列表,可以在列表中选择所列内容作为添入字段的内容。3.ACCESS 数据库的创建步骤 在 ACCESS 建立空数据库,名称为 student,然后在
18、数据库 student 中创建表 student 和 dept。(1)启动 ACCESS 2003,选择“文件”菜单,“新建”,然后选择“空数据库”,在弹出的对话框中输入数据库的名称“student”。如图 9.2 所示。图 9.2 创建空数据库 student 单击确定后出现如图 9.3 所示的对话框。图 9.3 student 的数据库主窗口(2)从图 9.3 可以看出有三种方法可以创建表:“使用设计器创建表”,“使用向导创建表”和“通过输入数据创建表”。这里双击选择“使用设计器创建表”。打开如图 9.4 所示的对话框。输入表 studentInfo 中各个字段的名称,并设置其数据类型和长
19、度。6 图 9.4 输入表 studentInfo 的所有字段(3)设置 sno 为 student 表的主键。将鼠标指向字段 sno,右单击鼠标,在弹出的快捷菜单中选择“主键”。如果在字段 sno 的左侧会出现一个小钥匙图标,说明 sno 已经被设置主键了。(4)表的所有字段属性都输入设置结束后,单击“文件”菜单,“保存”,在弹出的对话框中输入表的名称 studentInfo。如图 9.5 所示。图 9.5 表结构创建结束后,保存表名为 studentInfo(5)回到 student 的数据库主窗口中,双击 studentInfo 表,在打开的对话框中输入学生信息。输入结束后单击图 9.6
20、 右上角的关闭按钮,回到 student 的数据库窗口。图 9.6 在表 studentInfo 中输入几条记录(6)用同样的方法创建表 dept,并在其中输入几条记录信息。四、四、JDBC 与数据库访问与数据库访问 1.JDBC 概述 Java程序可以作为数据库服务器的客户端程序,向服务器发送SQL命令并显示返回的结果。JDBC(Java DataBase Connectivity)是一个将 java 语言与 SQL 结合的 API。JDBC 封装了与各种数据库服务器通信的细节,简化了访问数据库的程序代码,并使得同一个 Java 程序可以访问多个数据库服务器。JDBC API 主要位于 ja
21、va.sql 包中。java 程序通过 JDBC API 访问数据库的过程如图 9.7 所示。7 图 9.7 java 程序通过 JDBC API 访问数据库 2.JDBC 的实现原理 JDBC 的实现如图 9.8 所示。图 9.8 JDBC 的实现(1)JDBC 驱动管理器:java.sql.DriverManager,负责注册 JDBC 驱动器,并为创建数据库连接提供支持。由 SUN 公司实现。(2)JDBC 驱动器 API:java.sql.Driver,由 SUN 公司实现。(3)JDBC 驱动器:有数据库供应商或者第三方工具提供商创建,也称为 JDBC 驱动程序。JDBC 驱动程序负
22、责与特定的数据库连接,并处理通信细节。JDBC 驱动器可以分为以下四种类型:第一类驱动程序:JDBC-ODBC 驱动器。ODBC(Open DataBase Connectivity)开放数据库互连是微软公司为应用程序提供的访问任何一种数据库的标准 API。JDBC-ODBC 驱动器是由 SUN 公司开发实现的驱动器,为 Java 程序和 ODBC 之间建立了桥接,使得 Java 程序可以间接地访问 ODBC API。但是这种方式连接数据库的速度比较慢,把请求转发给 ODBC,再由 ODBC 将请求发送给数据库服务器。第二类驱动程序:由部分 Java 程序代码和部分本地代码组成。用于与数据库的
23、客户端 API 进行通信。第三类驱动程序:完全由 Java 语言编写的类库。用一种与具体数据库服务器无关的协议将请求发送给服务器的特定组Java 程序 JDBC API JDBC 实现 MySQL Oracle SQLServer ACCESjava.sql.DriverManager java.sql.Connection java.sql.Statement ResultSet Java 程序 JDBC 实现 MySQL JDBC 驱动管理器:DriverManager 类 Oracle 的JDBC 驱动器 MySQL 的 JDBC 驱动器 连接 ODBC 的 JDBC 驱动器 Oracl
24、e ACCESS ODBC 实现 JDBC 驱动器 API:Driver 接口 注册 实现 JDBC API 8件,再由该组件按照特定数据库协议对请求进行翻译,把翻译后的内容发送给数据库服务器。第四类驱动程序:完全由 Java 语言编写的类库。直接按照特定数据库的协议,把请求发送给数据库服务器。通过第四类驱动程序访问数据库的速度最快。编程的时候优先考虑第三类和第四类驱动程序,如果某种数据库不存在第三类或者第四类驱动程序,可以考虑使用第一类和第二类驱动程序。3.JDBC API 简介及使用(1)java.sql.DriverManager 驱动程序管理类:用来装载驱动程序并为创建数据库连接提供支
25、持。(2)java.sql.Connection 接口:用来连接某一个指定的数据库。(3)该接口提供了执行 SQL 语句、取得查询结果的方法。有两个子接口:CallableStatement,PreparedStatement。PreparedStatement:用于执行预编译的 SQL 语句。(4)ResultSet:该接口提供了对结果集进行处理的方法。4.编程步骤(1)与数据库建立连接 访问数据库之前,首先要与数据库建立连接。建立连接后,用户得到一个实现 java.sql.Connection 接口的对象,然后利用这个对象完成对数据库的操作。获取要访问的数据库的驱动程序类库,将其放在 cl
26、asspath 中。加载驱动程序 Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);/JDBC-ODBC 是 JDK 中自带的默认注册 Class.forName(com.mysql.jdbc.Driver);/加载 MySQL Driver 类 DriverManager.registerDriver(new com.mysql.jdbc.Driver();/加载 MySQL Drive Class.forName(com.microsoft.jdbc.sqlserver.sqlserverDriver);/加载 SQLServer Driver 类
27、 DriverManager.registerDriver(new com.microsoft.jdbc.sqlserver.sqlserverDriver();/加载SQLServer Driver 说明:u 如果装载指令有误,则在运行该语句时会抛出 ClassNotFoundException 错误。u Class.forName(String url)方法是 java.lang.Class 类中的一个方法,该方法以完整的类名为参数,返回一个此类的对象。如:Class.forName(com.mysql.jdbc.Driver);/返回一个 MySQL 的驱动程序管理类的对象。建立连接,利
28、用 DriverManager 类的 getConnection()方法用于建立与某个数据源的连接。getConnection()方法:如果与指定 URL 的数据源连接成功,则该方法会返回一个实现 Connection 接口的对象 con,可以通过 con 来对数据库进行操作。说明:1)该方法是 DriverManager 类中的静态方法,可以通过类名直接调用。2)如果连接失败,则会产生 SQLException 异常。如:try Connection con=DriverManager.getConnection(dbUrl,dbUser,dbPwd);catch(SQLException
29、e)e.printStackTrace();参数说明:u dbUrl 为数据源的 URL 地址。u user 和 password 为可选项,用于在建立连接时给出用户名、密码。String dbUrl=jdbc:mysql:/localhost:3306/student;String dbUser=dbuser;String dbPwd=1234;9(2)执行 SQL 语句,对数据库进行操作 在 JDBC 中,数据库查询由实现接口 Statement、PreparedStatement、CallableStatement 的对象完成。Statement 接口:Statement 对象用于一般语
30、句的执行。要执行查询语句,首先应当创建一个 Statement对象。Statement stmt=con.createStatement();执行查询语句:u Statement 接口的 executeQuery()用来执行一条查询语句,返回一个实现 ResultSet 接口的对象。该方法只返回一个结果集。u Statement 接口的 execute()execute 方法可以返回多个结果集,它的参数是一个代表 SQL 语句的字符串。如:ResultSet rsstmt.executeQuery(“SELECT name FROM books WHERE price20”);说明:错误的 S
31、QL 语句在执行时会出现 SQLException。PreparedStatement 接口 PreparedStatement 接口继承了 Statement 接口,用来执行预编译。如果一条 SQL 语句在一段程序里面要反复执行多次,可以使用 PreparedStatement 执行预编译的 SQL,使得 SQL 语句一次编译,被多次执行,可以提高程序的执行效率。有如下三条 SQL 语句:insert into dept(dno,dname,phone)values(d01,计算机,86585116);insert into dept(dno,dname,phone)values(d02,外
32、语学院,86381333);insert into dept(dno,dname,phone)values(d03,材料学院,86361311);三个 sql 语句的形式完全一样,只是参数的取值不同。可以表达成如下形式:insert into customers(name,age,address)values(?,?,?);PreparedStatement addStmt=con.prepareStatement(“insert into customers(name,age,address)values(?,?,?)”);addStmt.setString(1,“d01”);/给 SQL
33、与剧中的第一参数 dno 赋值 addStmt.setString(2,“计算机”);/给 SQL 与剧中的第一参数 dname 赋值 addStmt.setString(3,“86585116”);/给 SQL 与剧中的第一参数 phone 赋值 addStmt.executeUpdate();/执行预编译语句(3)对返回结果进行处理 调用 executeQuery 或 execute 方法执行查询语句返回的结果是实现 ResultSet 接口的对象。可以对返回的结果进行处理。ResultSet 接口的基本处理方法:ResultSet 对象包含了一个由查询语句返回的一个表,这个表包含所有的查
34、询结果。对 ResultSet 对象的处理必须逐行进行,而对每一行中的各个列,可以按照任何顺序进行处理。ResultSet 对象有一个指向当前行的指针。ResultSet 对象第一次调用 next()方法时,指针指向结果集的第一条记录,可以对第一行数据进行处理。处理完毕后,再次调用 next()方法,指针移向下一行,然后继续处理数据。next()返回类型为 boolean,如果返回值为 true,则说明指针成功移向下一行,可以对该行数据进行处理。如果返回值时 false,则说明没有下一行(结果处理完毕)。(4)关闭连接 关闭 Statemente 对象:stmt.close();无用的 Sta
35、tement 对象在垃圾回收时会被自动关闭。但最好在使用完 Statement 对象时立即关闭,以释放资源。说明:在关闭 Statement 对象时,其相应的结果集也被关闭。关闭连接:con.close();连接使用完毕,可以调用 close()方法关闭连接。说明:在建立连接和操作数据库时可能会产生异常。需要对异常进行处理。10 【经典例题解析】4-1.通过 JDBC-ODBC 访问数据库 student 数据库,编程执行下列操作:1.添加两个学生的信息到 studentInfo 表中:(2008111119,李小龙,男,1990-1-1,d03)和(2008111118,韩俊,女,1991-
36、3-3,d01)。2.显示所有学生的信息 3.删除 2000 年以后出生的学生信息。4.将材料学院学生的学院都改为计算机学院【答案】Example91.java import java.sql.*;import java.text.*;import java.util.Date;public class Example91 public static void main(String args)/对象变量声明 String DBDriver=sun.jdbc.odbc.JdbcOdbcDriver;/加载驱动器的表达式 String connectionStr=jdbc:odbc:studen
37、t;/连接数据库的表达式 Connection con=null;/数据库连接对象 Statement stmt=null;/语句对象 ResultSet rs=null;/结果集对象 String sqlExpression1=insert into studentInfo+values(2008111118,韩 俊,女,1991-3-3,d01);String sqlExpression2=insert into studentInfo+values(2008111119,李 晓,男,1990-1-1,d03);/插入学生记录信息的 sql 表达式 String sqlExpression
38、3=Select*from studentInfo;/显示所有学生信息的 sql 表达式 String sqlExpression4=delete from studentInfo where birthdate=+#2000-1-1#;/删除 2000 年以后出生的学生记录的 sql 表达式 String sqlExpression5=Update studentInfo set dno=d01 where dno=d03;/将材料学院学生的学院都改为计算机学院的 sql 表达式 try Class.forName(DBDriver);/加载驱动器 catch(ClassNotFoundEx
39、ception e1)e1.printStackTrace();try con=DriverManager.getConnection(connectionStr,);/建立数据库连接 stmt=con.createStatement();/创建 statement 对象 System.out.println(-插入新学生记录前所有学生信息-);rs=stmt.executeQuery(sqlExpression3);while(rs.next()/显示查询结果,每行显示一条学生信息 System.out.print(rs.getString(sno)+);System.out.print(r
40、s.getString(sname)+);System.out.print(rs.getString(sex)+);System.out.print(rs.getDate(birthdate)+);System.out.println(rs.getString(dno)+);11 System.out.println(执行 insert 操作,插入两条新的学生记录!);stmt.executeUpdate(sqlExpression1);/插入学号是 2008111118 的学生记录 stmt.executeUpdate(sqlExpression2);/插入学号是 2008111119 的学
41、生记录 System.out.println(执行 delete 操作,删除 2000 年以后出生的学生信息);stmt.executeUpdate(sqlExpression4);/删除 2000 年以后出生的学生记录 System.out.println(执行 update 操作,将材料学院学生的学院都改为计算机学院);stmt.executeUpdate(sqlExpression5);/将材料学院学生的学院都改为计算机学院 System.out.println(-执 行 完 上 述 操 作 化 studentInfo 表 中 的 学 生 信 息-);rs=stmt.executeQue
42、ry(sqlExpression3);while(rs.next()/显示查询结果,每行显示一条学生信息 System.out.print(rs.getString(sno)+);System.out.print(rs.getString(sname)+);System.out.print(rs.getString(sex)+);System.out.print(rs.getDate(birthdate)+);System.out.println(rs.getString(dno)+);stmt.close();con.close();/关闭连接,结束会话 catch(SQLException
43、 e2)e2.printStackTrace();【解析】1.解题思路 1)首先配置 ODBC 数据源 访问 ACCESS 数据库一般采用 JDBC-ODBC 驱动器。首先需要配置 ODBC 数据源,即在操作系统中建立一个可以访问 Access 数据库的本地数据源(ODBC)。基本步骤如下:第一步:“控制面板”-“管理工具”-“数据源(ODBC)”,单击“添加”按钮,如图 9.9 所示。图 9.9 配置数据源之一 第二步:在随后弹出的对话框中选择“Microsoft Access Driver(*.mdb)”驱动程序。然后单击完成按钮。如图 9.10 所示。12 图 9.10 配置数据源之二
44、第三步:在随后弹出的对话框中“数据源名(N)”输入框中输入数据源的名称:student。然后单击数据库区的“选择”按钮,在随后弹出的对话框中选择数据库 student.mdb,然后单击“确定”按钮返回上级对话框。图 9.11 配置数据源之三 可以看到刚才配置的数据源 student 已经出现在图 9.12 所示的对话框中。如果不需要这个数据源,只需从图 9.12 所示的对话框中单击“删除”按钮将其删除即可。图 9.12 配置数据源之四 2.编程实现对数据源 student 的操作 Example91.java。(1)变量声明部分 这里主要声明加载 JDBC 驱动器,连接数据库的表达式,对数据库
45、进行插入,删除,更新和查询操作的 SQL 语句的表达式,以及声明数据库连接对象,语句对象和结果集对象等。在编程时建议将这些表达式写在变量中,以提高程序的可读性,方便程序的调试和维护,同时也要注意 SQL 语句的正确书写形式。String DBDriver=sun.jdbc.odbc.JdbcOdbcDriver;/加载驱动器的表达式 String connectionStr=jdbc:odbc:student;/连接数据库的表达式 Connection con=null;/数据库连接对象 Statement stmt=null;/语句对象 ResultSet rs=null;/结果集对象 St
46、ring sqlExpression1=insert into studentInfo+values(2008111118,韩俊,女,1991-3-3,d01);/插入学生记录信息的 sql 表达式 String sqlExpression3=Select*from studentInfo;/显示所有学生信息的 sql 表达式 13 String sqlExpression4=delete from studentInfo where birthdate=+#2000-1-1#;/删除 2000 年以后出生的学生记录的 sql 表达式(2)加载 JDBC 驱动器 try Class.forNa
47、me(DBDriver);/加载驱动器 catch(ClassNotFoundException e1)e1.printStackTrace();加载sun.jdbc.odbc.JdbcOdbcDriver驱动器,因为Class.forName()方法会抛出ClassNotFoundException,可以将其捕捉后,通过e1.printStackTrace()输出异常信息到控制台。(3)建立与数据库的连接,创建语句对象。con=DriverManager.getConnection(connectionStr,);/建立数据库连接 stmt=con.createStatement();/创建
48、statement对象 变量connectionStr的取值为jdbc:odbc:student,student为图1-8到1-11所配置的ODBC数据源的名称。getConnection()方面的后面两个参数的作用是登录数据库的账号和密码,如果没有设置账号和密码,这里的参数填写”和”即可。(4)在对数据库表studentInfo进行插入新记录,删除和修改某些记录之前,先显示表里的全部记录信息。rs=stmt.executeQuery(sqlExpression3);/向数据库发送查询语句 while(rs.next()/显示查询结果,每行显示一条学生信息 System.out.print(r
49、s.getString(sno)+);System.out.print(rs.getString(sname)+);说明:调用executeQuery()方法执行查询语句返回的结果是实现ResultSet接口的对象。ResultSet对象包含了一个由查询语句返回的一个表,这个表包含所有的查询结果。对ResultSet对象的处理必须逐行进行,而对每一行中的各个列,可以按照任何顺序进行处理。ResultSet对象有一个指向当前行的指针,第一次调用next()方法时,指针指向结果集的第一条记录,可以对第一行数据进行处理。处理完毕后,再次调用next()方法,指针移向下一行,然后继续处理数据。从Res
50、ultSet对象的当前行读取某列数据时,getXXX方法来读取某一列的取值,XXX和该列的数据类型相对应。如getByte(),getDouble(),getDate(),getString(),getFloat()等等。getXXX()方法的参数可以是列名,也可以是列序号,列序号指的是结果集中的从左到右依次编号的列序号,不是原表的列序号。如rs.getString(sno),也可以用rs.getString(1)来提取相应字段信息,1代表结果集的第一列。使用列序号执行效率要高一些,但是采用列序号的程序不如采用列名称的程序的可读性好。(5)执行插入新记录操作、删除记录和修改记录操作。Strin