《2022年实验通过JDBC访问数据库分享 .pdf》由会员分享,可在线阅读,更多相关《2022年实验通过JDBC访问数据库分享 .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 实验 7 通过 JDBC 访问数据库一. 实验目的1. 通过阅读本课件中的知识点和例题,结合正在学习的数据库知识,了解数据库存储的特点、数据库访问的概念和方法、JDBC 的概念和术语,以及如何通过以JDBC 为媒介对数据库的访问,实现数据的查询和记录的更新。2. 参考本课件给出的两个例题和教材上的例8.2,编写 Java 程序,实现对SQL Server数据库访问; 通过修改Students的数据源从文件到数据库,练习如何在应用程序中通过访问数据库来获得所需要的数据。二. 知识点和例题1. 数据库访问概述 数据库存储的特点相对于用文件存储数据和实现/,采用数据库技术存储并与应用程序交换数据
2、具有如下特点: 相关的但不同类型的数据被集成化; 数据与程序具有相对的独立性; 可实现多个程序和用户对数据的共享; 数据的冗余度小; 避免了并发访问中数据的不一致性; 通过设置权限可对数据实施安全性保护; 有利于保证数据的完整性; 可发现存储故障并恢复到正常状态。 数据库访问的概念数据库的创建和维护、数据的访问和更新,既可以在数据库管理系统(DBMS )下进行,也可以在应用程序中实现,后者更加具有现实意义。所谓数据库访问,就是应用程序以某种方式与数据库交互,使用和更新数据库中的数据。实现访问的必要条件是操作系统、数据库管理系统和程序设计语言中有着对访问的支持,这便是数据库接口或数据库驱动程序,
3、在Java 中,这种接口称为JDBC,它是由java.sql 包中的一组类和接口组成的。 数据库操作类型和操作方式数据库访问应具有与DBMS 对等的一系列操作,基本操作为数据的检索、修改、插入和删除;辅助操作包括数据库定义、数据转储等。本章仅介绍前一类操作。在多数程序设计语言中,数据库访问操作可通过两种方式实现,一种是通过类库中的类所提供的SQL 语句执行机制执行SQL,二是通过类库中的类所提供的一系列方法。对某些操作而言, 二者可以相互替换,对另一些操作而言,则只能使用其中的一种。而前者往往更具有普遍意义。2. Java数据库访问 ODBC 和 JDBCJDBC (Java Database
4、 Connectivity) 是 SUN 为 Java 开发的数据库连接解决方案,它通过JDBC-ODBC 桥接器, 使用微软的ODBC (Open Database Connectivity) 来实现与不同数据库名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - 2 的连接,但在编程方面要较ODBC 更加方便。JDBC 内嵌的 SQL 为程序员提供了一个纯Java 的数据库编程接口(由一组类和接口构成),通过它们,JDBC 实现了
5、三个最基本的数据库访问功能:建立与数据库的连接、执行SQL 语句和处理执行结果。 JDBC 的构成java.sql中类和接口的名称和基本功能是:名称类型基本功能java.sql.DriverManager 类加载 JDBC 、建立与新的数据库的连接java.sql.Connection 接口处理与特定数据库的连接java.sql.Statement 接口在指定的连接中处理SQL语句java.sql.PreparedStatement 子接口处理预编译的SQL语句java.sql.CallableStatement 子接口处理数据库存储过程java.sql.ResultSet 接口处理数据库操作
6、结果集 JDBC driver上述类和接口都是抽象的,在不同环境下与数据库的连接,还要靠 JDBC Driver 来实现:JDBC Driver名称连接机制和环境要求JDBC-ODBC Bridge and ODBC driver 通过 ODBC 与数据库实现连接,要求每台客户机都装有 ODBC 驱动程序。Native-API partly-Java Driver 将 JDBC指令转化为DBMS 操作形式, 要求客户机装有相应的DBMS 。JDBC-Net All-Java Driver 将 JDBC指令转化为独立于DBMS 的网络协议, 再由服务器转化为特定的DBMS协议。可连接到不同的数据
7、库 . Native-protocol All-Java Driver 将 JDBC指令转化为网络协议,并由 DBMS 直接使用。适用于局域网。 通过 JDBC 访问数据库的步骤 创建指定数据源的URL 要创建与数据库的连接,首先要创建针对指定数据源的URL(Uniform Resoure Locator),创建 URL 的一般形式如下:String url = jdbc : odbc : 数据源名称 ; 假设在 ODBC 管理器中设置的数据源名称为Student,则创建语句为String url = jdbc:odbc:Student; 数据源名称可以在Windows 的“控制面板管理工具数
8、据源(ODBC) ”中针对特定的数据库指定, 操作为: 添加 Microsoft Access Driver 完成, 输入数据源名,选择(数据库)确定。 加载数据库驱动程序为了连接到具体的数据库,JDBC 必须首先加载与该数据库相应的驱动程序,代码形式如下:Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); 其中 Class 是包 java.lang 中的一个类:publi c final class Classextends Obj e ct impleme nts Seri alizabl e, Gene ricDe clara tion , Type
9、 , no tat edEl emen t名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - 3 它通过调用静态方法forName ,加载sun.jdbc.odbc 包中的JdbcOdbcDriver类来建立JDBC -ODBC 桥接器。 创建数据库连接调用 DriverManager 类中的方法getConnection 建立与具体数据库的连接,并将该连接的引用赋给Connection 类的对象,代码形式如下:Connection
10、 con = DriverManager. getConnection(URL, 用户名, 口令); 例如对于上述的URL 和 Access 数据库,可以是:Connection con = DriverManager. getConnection (url, user, password); 创建语句对象声明一个Statement对象,通过 Connection 的对象调用方法createStatement, 并将返回值赋给这个Statement 对象,代码形式可以是以下两种:Statement state = con.createStatement(); Statement state =
11、 con.createStatement(int resultSetType, int resultSetConcurrency); 其中:变量取值意义resultSetType ResultSet.TYPE_FORWARD_ONLY( 默认 ) 游标只能向下滚动ResultSet.TYPE_SCROLL_INSENSITIVE 上下滚动,不同步更新ResultSet.TYPE_SCROLL_SENSITIVE 上下滚动,同步更新resultSetConcurrency ResultSet.CONCUR_READ_ONLY( 默认 ) 不允许更新数据库ResultSet.CONCUR_UPDA
12、TABLE 允许更新数据库 执行 SQL 查询有了 Statement 对象后,就可以通过它调用Statement 的方法来对数据库进行各种操作,操作命令由SQL 语句给出, 查询结果保存在ResultSet类(查询结果数据集)的对象中返回,假设一个SQL 语句定义在字符串sql 中:String sql = SELECT * FROM 学生 ; 则ResultSet result = state.executeUpdate(sql); 将从学生表中查询出所有数据并保存在对象result 中 处理查询结果利用 resultSet 类提供的一系列方法,可以对查询结果数据集进行各种操作,例如:方法
13、原型功能说明String getString(intcolumnIndex) throws SQLException 获取字符串int getInt(intcolumnIndex) throws SQLException 获取整型数double getDouble (intcolumnIndex) throws SQLException 获取双精度数int getRow() throws SQLException 获取当前行编号boolean last() throws SQLException 移动游标到末行void beforeFirst() throws SQLException 移动游
14、标到首行之前boolean next () throws SQLException 移动游标到下一行void close ()throws SQLException 关闭结果集 更新、添加和删除记录使用 UPDATE 、INSERT INTO 、DELETE FROM等 SQL 语句,也可对数据库的某个表名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 6 页 - - - - - - - - - 4 进行记录的更新、插入和删除操作。此时代替声明ResultSet对象并通过S
15、tatement 对象调用executeQuery 方法执行SQL 语句并处理查询结果,是通过 Statement 对象调用executeUpdate方法来更新数据库,例如:sql = UPDATE 学生 SET 性别 = 男 WHERE 学生 ID=1; state.executeUpdate(sql); 3. 数据库访问实例 Student数据库我们尝试运用上面的步骤来访问一个Access 数据库 Student , 其中有 4 个表,E-R 图为: 设计查询该数据库中存放着061431 和 061432 两个班学生的基本资料和“C+程序设计”、“程序设计基础” 两门课的成绩数据。现要从该
16、数据库中查询出两个班所有同学“C+程序设计”(课程 ID=2)的实验报告和期末考试成绩,设计SQL语句如下:SELECT 学生 .学号, 学生 .姓名, 成绩 .实验报告 , 成绩 .期末考试 , 成绩 .总评成绩FROM 学生INNER JOIN ( 课程INNER JOIN 成绩ON 课程 .课程 ID = 成绩 .课程 ID) ON 学生 .学生 ID = 成绩 .学生 ID WHERE ( 课程 .课程 ID)=2); 在 Java中执行查询import java.sql.*; publicclass UseJdbcQuery publicstaticvoid main(String
17、args) String url = jdbc:odbc:Student; String sql = SELECT 学生 . 学号 , 学生 . 姓名 , 成绩 . 实验报告 , 成绩 . 期末考试 FROM 学生 INNER JOIN ( 课程 INNER JOIN 成绩 ON 课程 . 课程 ID = 成绩 . 课程 ID) ON 学生 . 学生 ID = 成绩 . 学生 ID WHERE (课程 . 课程 ID)=2); try Class.forName( sun.jdbc.odbc.JdbcOdbcDriver); Connection con = DriverManager.get
18、Connection (url, user , password ); Statement state = con.createStatement(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 6 页 - - - - - - - - - 5 ResultSet result = state.executeQuery(sql); while (result.next() String ID = result.getString( 学号 ); String name
19、= result.getString( 姓名 ); double experiment = result.getDouble( 实验报告 ); double exam = result.getDouble( 期末考试 ); System.out .println(result.getRow() + t + ID + t + name + t + experiment + t + exam); result.close(); state.close(); con.close(); catch(java.lang.Exception ex) ex.printStackTrace(); 在 Java
20、 中更新、添加和删除记录import java.sql.*; publicclass UseJdbcUpdate publicstaticvoid main(String args) String url, sql; url = jdbc:odbc:Student; try Class.forName( sun.jdbc.odbc.JdbcOdbcDriver); Connection con = DriverManager.getConnection (url, user , password ); Statement state = con.createStatement(); sql =
21、 UPDATE 成绩 SET 期末考试 =100 WHERE 学生 ID=1 AND 课程 ID=1; state.executeUpdate(sql); sql = INSERT INTO 学生VA LUES(88, 2, 06143245, 张三 , 男 ); state.executeUpdate(sql); sql = INSERT INTO 学生VA LUES(89, 2, 06143146, 李四 , 女 ); state.executeUpdate(sql); sql = DELETE FROM 学生 WHERE 学号 =06143146; state.executeUpdate
22、(sql); state.close(); con.close(); catch(java.lang.Exception ex) ex.printStackTrace(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - 6 三. 作业1. 阅读“知识点和例题” ,了解数据库访问的概念、方法和术语, 知道如何通过以JDBC为媒介对数据库的访问,来实现数据的查询和记录的更新。2. 按照本课件所述数据库访问的步骤,参考本课件给出的程
23、序实例和教材上的例8.2,编程完成下面所述数据库的访问,在运行获得正确结果的基础上,将源代码拷入实验报告的“实验结果”一栏。 编写 Java 程序实现对SQL Server 数据库的正确访问。访问的数据库、 访问的方式和最终结果由自己视情况而定。 在实验 6 的基础上,将数据源由文件改为给定的Access数据库。提示:可通过以下办法来获得结果集中的记录数(学生人数):result.last(); / 将移动游标到最后一行int n = result.getRow(); / 得到当前行编号result.beforeFirst(); / 将移回游标到首行之前(准备取第一行)由于有游标前移操作,故创建语句对象时必须使用第二种代码形式,并取适当的参数:Statement state = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet. CONCUR_READ_ONLY); 这些参数的意义请参阅前面的表格。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -