




免费预览已结束,剩余55页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章JDBC数据库访问技术 数据库是Web应用程序重要组成部分 在JavaWeb应用程序中 数据库访问是通过Java数据库连接 JavaDataBaseConnectivity 简称JDBC 实现的 JDBC为开发人员提供了一个标准的API 本章介绍使用JDBC驱动程序连接数据库和使用连接池技术连接数据库并设计应用程序的方法 步骤和实例 第4章JDBC数据库访问技术 4 1JDBC技术概述4 2JDBC访问数据库4 3综合案例 学生身体体质信息管理系统的开发4 4数据源与连接池技术本章小结 4 1JDBC技术概述 JDBC是一种用于执行SQL语句的JavaAPI 由一组类与接口组成 通过调用这些类和接口所提供的方法 可以使用标准的SQL语言来存取数据库中的数据 本节内容 4 1 1驱动程序接口Driver4 1 2驱动程序管理器DriverManager4 1 3数据库连接接口Connection4 1 4执行SQL语句接口Statement4 1 5执行动态SQL语句接口PreparedStatement4 1 6访问结果集接口ResultSet 4 1 1驱动程序接口Driver 每种数据库都提供了数据库驱动程序 并且都提供了一个实现java sql Driver接口的类 简称Driver类 在应用程序开发中 需要通过java lang Class类的静态方法forName StringclassName 加载该Driver类 在加载时 创建自己的实例并向java sql DriverManager类注册该实例 4 1 2驱动程序管理器DriverManager java sql DriverManager类负责管理JDBC驱动程序的基本服务 是JDBC的管理层 作用于用户和驱动程序之间 负责跟踪可用的驱动程序 并在数据库和驱动程序之间建立连接 DriverManager类即可用来建立数据库连接 DriverManager类提供的最常用的方法是 ConnectiongetConnection Stringurl Stringuser Stringpassword 该方法为静态方法 用来获得数据库连接 有3个入口参数 依次为要连接数据库的URL 用户名和密码 返回值类型为java sql Connection 4 1 3数据库连接接口Connection java sql Connection接口负责与特定数据库的连接 形成连接对象 由该对象完成相关的操作 表4 2Connection接口的常用方法 4 1 4执行SQL语句接口Statement java sql Statement接口用来执行静态的SQL语句 并返回执行结果 Statement接口提供的常用方法 4 1 5执行动态SQL语句接口 PreparedStatement java sql PreparedStatement接口继承于Statement接口 是Statement接口的扩展 用来执行动态的SQL语句 即包含参数的SQL语句 PreparedStatement接口提供的常用方法 4 1 6访问结果集接口ResultSet 通过该接口的实例可以获得检索结果集 以及对应数据表的相关信息 ResultSet实例是通过执行查询数据库的语句生成 ResultSet接口提供的常用方法 4 2JDBC访问数据库 使用JDBC访问数据库 其访问流程是 1 注册驱动 2 建立连接 Connection 3 创建数据库操作对象用于执行SQL的语句 4 执行语句 5 处理执行结果 ResultSet 6 释放资源 本节内容 4 2 1注册驱动MySQL的驱动程序4 2 2JDBC连接数据库创建连接对象4 2 3创建数据库的操作对象4 2 4执行SQL4 2 5获得查询结果并进行处理4 2 6释放资源4 2 7数据库乱码解决方案 4 2 1注册驱动MySQL的驱动程序 1 将驱动程序文件添加到应用项目将驱动程序mysql connector java 5 1 6 bin 拷贝到Web应用程序的WEB INF lib目录下 Web应用程序就可以通过JDBC接口访问MySQL数据库了 2 加载注册指定的数据库驱动程序对于MySQL数据库 其驱动程序加载格式 Class forName com mysql jdbc Driver 其中 com mysql jdbc Driver 为MySQL数据库驱动程序类名 4 2 2JDBC连接数据库创建连接对象 创建数据库连接对象 需要首先形成 连接符号字 URL 然后利用 连接符号字 实现连接并创建连接对象 1 数据库连接的URL对于MySQL数据库的连接符号字 可采用如下方式创建 Stringurl1 jdbc mysql 数据库服务器IP 3306 数据库名 Stringurl2 user root 2 利用连接符号字实现连接 获取连接对象DriverManager类提供了getConnection方法 用来建立与数据库的连接 调用getConnection 方法可返回一个数据库连接对象 getConnection方法有3种不同的重载形式 第1种 通过url指定的数据库建立连接 其语法原型为 staticConnectiongetConnection Stringurl 第2种 通过url指定的数据库建立连接 info提供了一些属性 这些属性里包括了user和password等属性 其语法原型为 staticConnectiongetConnection Stringurl Propertiesinfo 第3种 传入参数用户名为user 密码为password 通过url指定的数据库建立连接 其语法原型为 staticConnectiongetConnection Stringurl Stringuser Stringpassword 3 利用JDBC连接MySQL数据库 获取连接对象的通用格式设MySQL数据库为 students 用户名为 root 密码为 123456 数据库读写的编码采用UTF 8 连接格式 StringdriverName com mysql jdbc Driver 驱动程序名StringuserName root 数据库用户名StringuserPwd 123456 密码StringdbName students 数据库名Stringurl1 jdbc mysql localhost 3306 dbName Stringurl2 user userName 4 2 3创建数据库的操作对象 数据库的操作对象是指能执行SQL语句的对象 需要Connection类中创建数据库的操作对象的方法实现创建 可创建两种不同的数据库操作对象 Statement对象 PrepareStatement对象 1 创建Statement对象利用Connection类的方法createStatement 可以创建一个Statement类实例 用来执行SQL操作 例如 假设通过数据库连接 得到其连接对象为conn 那么 可创建Statement的一个实例stmt Statementstmt conn createStatement 2 创建PrepareStatement对象 1 PreparedStatement对象使用PreparedStatement 方法创建 并且在创建时直接指定SQL语句 例如 Stringsql select fromstu info PreparedStatementpstmt conn preparedStatement sql 2 使用带参数的SQL语句 表示参数值 创建PreparedStatement对象 例如 Stringss select fromstu infowhereage andsex PreparedStatementpstmt conn preparedStatement ss 但在SQL语句中 没有指定具体的年龄和性别 在实际执行该SQL前 需要向PreparedStatement对象传递参数值 设置参数值的格式为 PreparedStatement对象 setXXX position value 4 2 4执行SQL 创建操作对象后 就可以利用该对象 实现对数据库的具体操作 即执行SQL语句 1 Statement对象执行SQL语句Statement主要提供了两种执行SQL语句的方法 1 ResultSetexecuteQuery Stringsql 执行select语句 返回一个结果集 2 intexecuteUpdate Stringsql 执行update insert delete 返回一个整数 表示执行SQL语句影响的数据行数 2 PreparedStatemen对象执行SQL语句PreparedStatement也有ResultSetexecuteQuery 和intexecuteUpdate 两个方法 但都不带参数 PreparedStatement两种执行SQL语句的方法 1 ResultSetexecuteQuery 执行select语句 返回一个结果集 2 intexecuteUpdate 执行update insert delete的SQL语句 它返回一个整数 表示执行SQL语句影响的数据行数 4 2 5获得查询结果并进行处理 如果SQL语句是查询语句 执行executeQuery 方法返回的是ResultSet对象 ResultSet对象是一个由查询结果构成的数据表 对查询结果的处理 一般需要 首先定位记录位置 然 后对确定记录的字段项实现操作 1 记录定位操作在ResultSet结果记录集中隐含着一个数据行指针 可使用4 1节中表4 5中的方法将指针移动到指定的数据行 2 读取指定字段的数据操作有两种格式 一是用整数指定字段的索引 索引从1开始 二是用字段名来指定字段 下表列出采用 指定字段的索引号 获取各种类型的字段值的方法 3 修改指定字段的数据操作移到指定的数据行后 可使用updateXxx 方法设置字段新的数值 其中 Xxx 指的是Java的数据类型 方法的参数也有两种格式 一是用整数指定字段的索引 索引从1开始 二是用字段名来指定字段 格式 updateXxx 字段名或字段序号 新数值 例如 对数据表stu 其中的字段是xh 学号 字符串 name 姓名 字符串 cj 成绩 整型 并且查询结果集为rs 则对数据表stu当前记录中成绩改为90 则需要执行 Stringsql selectxh name cjfromstu RrsultSetrs stmt executeQuery sql rs updateInt 3 90 或rs updateInt cj 90 4 2 6释放资源 当完成对数据库记录的一次操作后 应及时关闭这些对象并释放资源 假设建立的对象依次为 连接对象为conn Connectionconn 操作对象为pstmt PreparedStatementpstmt 得到的查询结果集对象为rs RrsultSetrs 则需要依次关闭的对象是 rs close stmt close con close 4 2 7数据库乱码解决方案 在实现对数据库操作时 对于汉字信息 有时不能正确处理 其原因是由于汉字编码的不同所造成的 为了正确处理汉字信息 必须使汉字编码使用统一的编码格式 汉字编码 目前主要使用UTF 8和GB2312 本教材中统一使用UTF 8编码 在设计Web应用程序时 涉及到汉字信息编码的组件主要有 1 数据库和数据表建立时 所建立的数据库和数据表及其各字段的编码格式 2 对数据库中记录的读写访问所采用的编码格式 3 在JSP页面之间传递参数 request对象 时 其汉字编码格式 4 在JSP页面 HTML页面 本身中汉字编码格式 5 由服务器响应 response 返回到客户端的信息编码格式 在所设计应用程序时 需要将这几部分的编码格式统一为一种汉字编码方式 就可以解决汉字乱码问题 4 3综合案例 学生身体体质信息管理系统的开发 案例说明 描述一个学生身体体质的信息有 有id 序号 整型 name 姓名 字符串 sex 性别 字符串 age 年龄 整型 weight 体重 实型 hight 身高 实型 存放学生体质信息的数据库为students 数据表为stu info 要求 利用JDBC技术实现对学生身体体质信息的管理 该问题是一个简单的数据库信息管理系统 基本操作主要有 数据库和数据表的建立 数据库记录信息的添加 插入 数据库记录信息的查询 数据库记录信息的删除 数据库记录信息的修改 1 功能划分整个系统的业务逻辑 可以分为4个功能模块 1 添加记录模块 完成向数据库添加新记录 2 查询记录模块 完成将数据库的记录以网页的方式显示出来 一般需要采用有条件的查询 3 修改记录模块 完成对指定条件的数据库记录实现修改 4 删除记录模块 完成对指定条件记录从数据库中删除 2 每个模块的操作流程对数据库记录的每种操作 需要的操作步骤是 1 注册驱动 并建立数据库的连接 2 创建执行SQL的语句 3 执行语句 4 处理执行结果 5 释放资源 下面按各功能模块和实现操作步骤 分别给出其设计思想和设计过程 设计过程 4 3 1数据库和数据表的建立4 3 2注册驱动并建立数据库的连接4 3 3添加记录模块的设计与实现4 3 4查询记录模块的设计与实现4 3 5修改记录模块的设计与实现4 3 6删除记录模块的设计与实现4 3 7数据库操作的模板4 3 8整合各设计模块形成完整的应用系统4 3 9问题与思考 4 3 1数据库和数据表的建立 该系统需要创建一个数据库以及该库中的一个数据表在MySQL中创建一个数据库 students 并在数据库students中创建表students info 数据库和数据表的建立代码 4 3 2注册驱动并建立数据库的连接 对数据库进行查询 添加 删除 修改等操作时 都必须通过JDBC建立应用程序与数据库的连接 在本小节中给出实现 注册驱动并建立数据库的连接 的公共代码 连接数据库时 一般需要指定数据库读写的编码 这里采用 UTF 8 编码 实现注册驱动并建立数据库的连接的关键代码段 4 3 3添加记录模块的设计与实现 例4 1 利用PreparedStatement对象实现在数据库中插入一条记录 其相应的记录信息是 序号 姓名 性别 年龄 体重 身高 分别为 16 张三 男 20 70 0 175 分析 使用PreparedStatement对象向数据库中插入 添加 记录 其处理步骤 1 建立数据库的连接 2 形成SQL语句 可以带参数 也可以不带参数 3 利用连接对象建立PreparedStatement对象 4 若是带参数的SQL执行语句 则需要对各参数设置相应的参数值 5 调用PreparedStatement对象 执行executeUpdate 方法 6 根据executeUpdate 方法返回的整数 判定是否执行成功 如果大于0表示成功 否则执行失败 7 关闭所有资源 设计与实现 源代码 运行 程序运行 例4 2 设计程序 实现利用提交页面提交要添加的学生信息 然后进入添加处理程序实现将信息添加到数据库 分析 需要两个JSP程序 程序insert stu 2 tijiao jsp将提交信息存放到request对象中 而程序insert stu 2 jsp从request对象中获取数据 形成插入记录的SQL语句 并实现插入 设计关键 1 该例题有两个组件 其关键是实现这两个组件之间的数据共享 即 使用request对象实现两个页面信息的共享 分别使用了id name sex age weight hight等变量 2 在添加处理页面 设置查询参数值时 必须注意各字段的数据类型 不同的类型采用不同的设置方法 实现 1 提交页面程序insert stu 2 tijiao jsp 2 插入记录程序insert stu 2 jsp 运行 程序运行 4 3 4查询记录模块的设计与实现 例4 3 采用PreparedStatement的对象实现记录的查询操作 要求查询表stu info中的所有学生信息并显示在网页上 分析 使用PreparedStatement对象实现数据库查询 其处理步骤 1 建立数据库的连接 2 形成查询SQL语句 可以带参数 也可以不带参数 3 利用连接对象建立PreparedStatement对象 4 若是带参数的SQL执行语句 则需要对各参数设置相应的参数值 若SQL语句不带参数 该步可以省 5 再调用PreparedStatement对象的executeQuery 方法 并返回ResultSet对象 6 对所得到的ResultSet对象中的各记录依次进行处理 7 关闭所有资源 设计关键 该题目要求是显示出所有的记录 对于查询SQL语句不需要参数 其查询语句为 Stringsql select fromstu info 另外 对于获得的查询结果集ResultSet中每条记录的处理方式 在本例中采用HTML的表格标签实现数据的显示 实现 源代码 运行 程序运行 例4 4 采用PreparedStatement的对象实现有条件的查询操作 要求在表stu info中 查询出体重介于60至80之间的所有同学并在网页上显示 分析 其处理步骤与例4 3的处理步骤一样 这里采用带参数的查询SQL语句 设计关键 该例题的设计关键是查询SQL语句的形成 即 Stringsql select fromstu infowhereweight andweight 60andweight 80 PreparedStatementpstmt conn prepareStatement sql ResultSetrs pstmt executeQuery 例4 5 设计一个提交页面 find stu 3 tijiao jsp 将要查询的条件通过该页面提交给查询处理页面 find stu 5 jsp 在该页面中获取所提交的信息 并将这些信息作为SQL语句的参数信息 查询结束后 显示出所有满足条件的记录 分析 该例题 需要设计两个JSP程序 提交页面 find stu 3 tijiao jsp 和查询处理程序 find stu 3 jsp 该例题的两个组件之间的处理流程如图4 4所示 设计关键 1 该例题有两个组件 其关键是实现这两个组件之间的数据共享 即 使用request对象实现两个页面信息的共享 分别使用了sex w1 w2 2 在提交页面中性别的默认值为 男 体重的默认值分别为0和150 3 在查询处理页面 设置查询参数值时 必须注意个字段的数据类型 性别为字符串类型 体重为float类型 实现 1 提交页面find stu 3 tijiao jsp 2 查询和信息显示的程序find stu 3 jsp 运行 程序运行 4 3 5修改记录模块的设计与实现 例4 6 更新数据库记录操作 设计一个JSP程序 update stu 1 jsp 实现将数据库students中数据表stu info中的学生记录 姓名为 张三 的同学的体重改为80 0 分析 使用PreparedStatement对象实现数据库记录的修改 其处理步骤 1 建立数据库的连接 2 形成SQL语句 可以带参数 也可以不带参数 3 利用连接对象建立PreparedStatement对象 4 若是带参数的SQL执行语句 则需要对各参数设置相应的参数值 5 调用PreparedStatement对象 执行executeUpdate 方法 6 根据executeUpdate 方法返回的整数 判定是否执行成功 如果大于0表示成功 否则执行失败 7 关闭所有资源 设计关键 该例题的设计与实现记录的添加操作一样 所不同的是该例题需要用修改记录的SQL语句 即 Stringsql updatestu infosetweight wherename 另外 对于该题目 其条件是固定的 其参数值的设置是 pstmt setFloat 1 80 pstmt setInt 2 张三 实现 源代码 运行 程序运行 例4 7 对数据库students中的数据表stu info 对满足条件的记录进行修改 为了简化设计 假设满足条件的记录只有一条 分析 该例题需要3个组件 一个是update stu 2 tijiao jsp 实现查询条件的提交 第二个程序是update stu 2 edit jsp 实现对满足条件的记录信息返回编辑页面并修改 待编辑修改完成后提交 第三程序是update stu 2 jsp 实现将修改后的信息重新写入数据库中 设计关键 该例题需要在3个页面之间共享信息 需要使用JSP内置对象request和session 实现共享的过程 实现 1 查询条件的提交 update stu 2 tijiao jsp 2 对满足条件的记录信息返回编辑页面并修改 update stu 2 edit jsp 3 将修改后的信息重新写入数据库中 update stu 2 jsp 运行 程序运行 4 3 6删除记录模块的设计与实现 例4 8 采用PreparedStatement的对象 实现将数据表stu info中体重大于等于80的所有同学删除 分析 删除记录的操作步骤与添加记录 修改记录 的操作步骤一样 参考例4 1或例4 6 设计关键 该例题需要用删除记录的SQL语句 即 Stringsql deletefromstu infowhereweight 另外 对于该题目 其条件是固定的 其参数值的设置是 pstmt setFloat 1 80 实现 源代码 运行 程序运行 例4 9 对数据库students中的数据表stu info 删除满足条件 由提交页面提供 的所有记录 分析 该例题要2个组件 一个是delete stu 2 tijiao jsp 实现条件的提交 第二个是delete stu 2 jsp 删除满足条件的所有记录 设计关键 1 该例题需要在2个页面之间共享信息 需要使用JSP内置对象request实现共享 为了简化设计 按 姓名 性别 体重范围段 设置查询条件 2 在提交页面 提交信息可以是 空值 表示该字段不受限制 3 在查询处理页面 设置查询参数值时 必须注意各字段的数据类型 实现 1 delete stu 2 tijiao jsp 实现条件的提交 2 delete stu 2 jsp 删除满足条件的所有记录 运行 程序运行 4 3 7数据库操作的模板 数据库操作的模板 代码 实现数据库的添加 查询 修改 删除操作 由于实现数据库操作 存在数据库连接等各种异常 通常需要异常处理 其数据库操作的通用结构 4 3 8整合各设计模块形成完整的应用系统 系统的应用界面如图4 10所示 页面的左部分是操作功能菜单选项 当单击某选项时 会相应的执行该选项的功能 图4 10所示是选择 按条件修改学生 后所显示的网页界面 功能模块划分 1 列出全部学生模块 该功能模块在 例4 3 中已实现 其程序为find stu 1 jsp 2 按条件查询学生模块 该功能模块在 例4 5 中已实现 其程序为find stu 3 tijiao jsp和find stu 3 jsp 3 新添加学生模块 该功能模块在 例4 2 中已实现 其程序为insert stu 2 tijiao jsp和insert stu 2 jsp 4 按条件删除学生模块 该功能模块在 例4 9 中已实现 其程序为delete stu 2 tijiao jsp和delete stu 2 jsp 5 按条件修改学生模块 该功能模块在 例4 7 中已实现 其程序为update stu 2 tijiao jsp update stu 2 edit jsp update stu 2 jsp 6 主页面框架的设计该应用系统的主页面框架如图4 10所示 由3部分组成 最上方的显示标题部分 index title jap 左边的显示操作菜单的显示 index stu left jsp 右边显示运行界面部分 index stu right jsp 另外 由这3部分组合形成主页面的程序 index stu jsp 设计过程与源代码 运行程序 4 4数据源与连接池技术 使用连接池技术连接数据库需要两步处理 首先配置数据源 然后在程序中通过连接池建立数据库的连接 从而再访问数据库 本节主要内容 4 4 1配置数据源4 4 2使用连接池技术访问数据库处理步骤4 4 3连接池应用 学生身体体质信息显示模块的设计与实现4 4 4问题与思考 4 4 1配置数据源 在通过连接池技术访问数据库时 首先需要Web服务器下配置数据库连接池 下面以MySQL数据库为例介绍在服务器Tomcat下配置数据库连接池的方法 1 在服务器上添加MySQL数据库驱动程序将MySQL数据库的驱动程序复制到Tomcat安装路径下的common lib文件夹中 2 数据源参数配置在Web工程目录下的META INF context xml文件中 若在Web工程目录下META INF不存在context xml文件 则需要自己建立该文件 配置数据源的具体代码如下 配置数据源时需要配置的元素的属性及其说明 4 4 2使用连接池技术访问数据库处理步骤 通过三个步骤来使用数据源对象 1 获得对数据源的引用 Contextctx newInitalContext DataSourceds DataSource ctx lookup java comp env jdbc mysql 2 获得数据库连接对象 Connectioncon ds getConnection 3 返回数据库连接到连接池 con close 4 4 3连接池应用 学生身体体质信息显示模块的设计与实现 例4 10 应用连接池技术访问数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 混合式教学团队构建-洞察及研究
- 精神药政策与实施-洞察及研究
- 2025中意宁波生态园控股集团有限公司第一次招聘3人笔试备考题库附答案详解(培优b卷)
- 企业员工职业健康安全指南
- 车间生产计划排程管理表
- 建筑工地安全管理与食堂承包合同范本
- 初中英语阅读理解策略教学方案
- 动物保护区的难忘经历记事作文(15篇)
- 企业流程优化与诊断手册
- 小学语文写作提升课程方案
- saas货运管理办法
- 纪念抗战胜利80周年1
- 物业客服管理知识培训课件
- 2026届广东省广州市高三上学期8月调研考试语文试题(含答案)
- 2025海南省老干部服务管理中心招聘事业编制人员6人(第1号)考试备考题库及答案解析
- 2025-2026学年湘教版(2024)初中数学八年级上册教学计划及进度表
- GB/T 45763-2025精细陶瓷陶瓷薄板室温弯曲强度试验方法三点弯曲或四点弯曲法
- 【MOOC】理解马克思-南京大学 中国大学慕课MOOC答案
- 高标准农田建设项目施工组织设计 (6)
- 初中英语阅读理解100篇
- 齿轮的设计计算PPT学习教案
评论
0/150
提交评论