JavaWeb项目式开发教程课件 项目5 Java Web项目中的数据访问_第1页
JavaWeb项目式开发教程课件 项目5 Java Web项目中的数据访问_第2页
JavaWeb项目式开发教程课件 项目5 Java Web项目中的数据访问_第3页
JavaWeb项目式开发教程课件 项目5 Java Web项目中的数据访问_第4页
JavaWeb项目式开发教程课件 项目5 Java Web项目中的数据访问_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JavaWeb项目式开发教程实现会员注册实现会员管理

认识到保护用户数据和隐私的重要性,严格遵循数据安全规范,培养数据安全意识。

掌握使用JDBC访问MySQL数据库的方法。掌握使用JDBCAPI实现预编译SQL的方法。掌握使用C3P0和CommonsDBUtils优化数据访问的方法。学习目标项目5JavaWeb项目中的数据访问12实现会员注册015.1

实现会员注册通过任务2.1的学习,我们完成了会员注册页的设计,为了给注册的会员提供后续服务,需要将页面收集的会员信息添加到数据库中。本任务通过JDBC访问MySQL数据库,将收集到的会员信息保存到数据库中,从而实现会员注册页的数据存储功能,并返回相应的提示信息。会员注册页用于填写注册信息,如果用户名、密码、确认密码或邮箱地址未填写,将提示用户“请填写此字段”。任务说明5.1

实现会员注册如果输入的密码与确认密码不一致,单击“注册”按钮后,将提示“密码和确认密码不一致,请重新注册!”。用户填写有效信息之后,单击“注册”按钮后,注册信息将保存到数据库中,同时,页面提示“注册成功!”任务说明5.1实现会员注册•在会员注册页中,用户填写注册信息,此时未执行服务器代码,故而使用静态网页实现。•注册信息提交给Servlet处理。•处理注册信息的Servlet需要先验证必填的注册信息,验证通过后使用JDBCAPI向数据库插入数据。任务分析相关知识01040302什么是JDBC连接MySQL数据库JDBCAPI操作MySQL数据库5.1.1

什么是JDBCJDBC全称为Java数据库互连(JavaDatabaseConnectivity),它是一套用于执行SQL语句的JavaAPI。通过JDBC技术,应用程序可以非常方便地与各种数据库交互。开发人员不需要为访问不同的数据库而编写不同的应用程序,只需使用JDBC编写一个通用程序就可以向不同的数据库发送SQL语句。5.1.2

JDBCAPIJDBC是一个编程接口集,其定义的接口主要包含在java.sql包中。该包含有一系列用于访问数据库的接口和类。接口和类描述DriverManager类管理一组JDBC驱动程序的基本服务Driver接口每个驱动程序类必须实现的接口Connection接口与指定数据库建立连接,在连接上下文中执行SQL语句并返回结果Statement接口用于执行SQL语句并返回生成结果的对象PreparedStatement接口表示预编译的SQL语句的对象CallableStatement接口用于执行SQL存储过程的接口ResultSet接口表示数据库结果集的数据表1

Driver接口Driver接口是所有JDBC驱动程序都需实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商实现该接口的类名不同。数据库驱动类说明SQLServercom.microsoft.sqlserver.jdbc.SQLServerDriver在Microsoft官网下载Oracleoracle.jdbc.driver.OracleDriver在Oracle官网下载MySQLcom.mysql.jdbc.Driver(MySQLConnector/J5.x及以下版本)com.mysql.cj.jdbc.Driver(MySQLConnector/J6.x及以上版本)在MySQL官网下载2

DriverManager类DriverManager类是JDBC的管理层,作用于用户和驱动程序之间。它跟踪可用的驱动程序,加载驱动程序并创建与数据库的连接。方法描述ConnectiongetConnection(Stringurl,Stringuser,Stringpassword)根据指定参数建立与数据库的连接,参数url为连接数据库的URL,user为连接数据库的用户名,password为连接数据库的密码。参数user和password可选voidsetLoginTimeout(intseconds)设置要登录时驱动程序等待的超时时间voidderegisterDriver(Driverdriver)从DriverManager的管理列表中删除一个驱动程序,参数driver为要删除的驱动对象voidregisterDriver(Driverdriver)向DriverManager的管理列表中注册一个驱动对象,参数driver为要注册的驱动对象3

Connection接口Connection接口表示与特定数据库之间的连接。方法描述StatementcreateStatement()用于创建一个Statement对象并将SQL语句发送到数据库PreparedStatementprepareStatement(Stringsql)用于创建一个PreparedStatement对象并将参数化的SQL语句发送到数据库CallableStatementprepareCall(Stringsql)用于创建一个CallableStatement对象来调用数据库中的存储过程voidsetAutoCommit()表示启动自动提交模式voidcommit()提交事务,此方法只在已禁用自动提交模式时使用voidrollback()取消在当前事务中进行的所有更改,并释放此连接对象当前持有的所有数据库锁booleanisClosed()用于查询Connection对象是否已经被关闭4

Statement接口Statement接口用于执行SQL语句并返回生成结果的对象。方法描述booleanexecute(Stringsql)用于执行给定的SQL语句,该语句可能返回多个结果。若给定的SQL语句为查询语句,则第一个结果为ResultSet对象,该方法返回true;若给定的SQL语句为修改、更新或删除语句,则该方法返回falseResultSetexecuteQuery(Stringsql)用于执行给定的查询SQL语句,该语句返回ResultSet对象intexecuteUpdate(Stringsql)用于执行给定的SQL语句,返回值为int类型,表示受该SQL语句影响的记录数目,当执行不成功时返回0。常用于数据更新操作,可以是INSERT、UPDATE或DELETE语句booleanisClosed()用于查询Statement对象是否已经被关闭voidaddBatch(Stringsql)用于将给定的SQL命令添加到Statement对象的当前命令列表中,通过调用方法executeBatch()可以批量执行此列表中的命令5

PreparedStatement接口PreparedStatement是Statement接口的子接口,用于执行预编译的SQL语句,当多次执行这条SQL语句时,可以直接执行编译好的SQL语句,大大提高了程序的灵活性和执行效率。方法描述voidsetInt(intparameterIndex,intx)用于将指定参数设置为给定int值。其中parameterIndex值为1时表示第1个参数,值为2时表示第2个参数,依此类推。x为给定的参数值voidsetFloat(intparameterIndex,floatx)用于将指定参数设置为给定float值voidsetLong(intparameterIndex,longx)用于将指定参数设置为给定long值voidsetDouble(intparameterIndex,doublex)用于将指定参数设置为给定double值voidsetString(intparameterIndex,Stringx)用于将指定参数设置为给定String值voidsetDate(intparameterIndex,Datex)用于将指定参数设置为给定Date值6

CallableStatement接口CallableStatement是PreparedStatement接口的子接口,用于执行SQL存储过程。方法描述voidregisterOutParameter(intparameterIndex,intsqlType)用于注册输出参数(OUT或INOUT)的JDBC数据类型。其中parameterIndex值代表存储过程中参数的位置索引,为1时表示第一个参数,值为2时表示第2个参数,依此类推。sqlType代表输出参数的JDBC数据类型intgetInt(intparameterIndex)根据索引获取输出参数的int值floatgetFloat(intparameterIndex)根据索引获取输出参数的float值StringgetString(intparameterIndex)根据索引获取输出参数的String值7

ResultSet接口ResultSet接口表示执行Select语句所得到的结果集。该结果集为一个逻辑表格,ResultSet接口内部拥有一个管理该逻辑表格的游标,该游标默认指向表格的第1行,并根据程序逻辑依次读取逻辑表格中的行。方法描述booleannext()用于从当前位置向下移1行。游标最初位于第1行之前,调用该方法使第1行成为当前行,依此类推。如果存在下一行,则返回true;如果不存在下一行,则返回falsebooleanfirst()用于将游标移动到第1行的位置,如果结果集中有数据,则返回true,否则返回falsebooleanlast()用于将游标移动到最后一行的位置,如果结果集中有数据,则返回true,否则返回falseintgetRow()用于获取当前行号。第1行为1号,第2行为2号,依此类推。如果不存在当前行,则返回0intgetInt(StringcolumnName)用于获取指定字段名称int类型的值,参数columnName代表结果集中字段的名称intgetInt(intcolumnIndex)用于获取指定索引int类型的值,参数columnIndex代表结果集中字段的索引值,索引从0开始StringgetString(StringcolumnName)用于获取指定字段名称String类型的值,参数columnName代表结果集中字段的名称StringgetString(intcolumnIndex)用于获取指定索引String类型的值,参数columnIndex代表结果集中字段的索引值,索引从0开始5.1.3

连接MySQL数据库使用JDBC连接MySQL数据库的主要步骤如下:下载并导入JDBC驱动程序注册JDBC驱动程序方法一:使用Class.forName()方法方法二:使用DriverManager.registerDriver()方法获取数据库连接或Class.forName(“com.mysql.cj.jdbc.Driver”);DriverManager.registerDriver(newcom.mysql.cj.jdbc.Driver());DriverManager.getConnection(Stringurl,Stringuser,Stringpassword);DriverManager.getConnection(Stringurl);例5-1创建连接对象。例5-2创建连接本地数据库esbuy,并给出提示信息。5.1.4

操作MySQL数据库使用JDBC操作数据库包括添加数据、查询数据、更新数据和删除数据等操作。JDBC提供了Statement、PreparedStatement和ResultSet三个接口来实现对数据库操作。其中,Statement接口主要用于执行不带参数的简单SQL语句;而ResultSet接口表示记录集,用于保存数据表操作后返回的记录集。操作MySQL数据库主要步骤:创建Statement接口实例执行SQL语句处理ResultSet结果集关闭连接方法描述booleanexecute(Stringsql)可以执行任何SQL语句intexecuteUpdate(Stringsql)用于执行SQL的INSERT、UPDATE和DELETE语句。当执行INSERT等SQL语句时,该方法的返回值是执行了这个SQL语句后所影响的记录的总行数。若返回值为0,则表示执行的SQL语句未对数据库造成影响ResultSetexecuteQuery(Stringsql)用于执行SQL的SELECT语句。它的返回值是执行SQL语句后产生的一个ResultSet接口的实例。利用ResultSet接口中提供的方法可以获取结果集中指定列的数据,方便应用程序进行后续处理例5-3添加商品类型示例。例5-4查询商品类型示例。实现步骤创建chap0501项目导入数据库驱动创建会员注册页reg.html新建css.css外部样式表文件创建处理注册信息的RegServlet.java文件运行项目,查看效果实现会员管理025.2

实现会员管理实际应用中,网站会对注册的会员进行统一管理,以便快捷地查阅和维护会员信息。本任务实现一个会员管理项目,对所有的会员信息进行列表展示,并可以删除指定的会员。任务说明5.2实现会员管理•展示会员列表地处理流程是先请求Servlet,然后获取会员列表数据,最后转发给JSP页面展示。•删除会员的处理流程是先根据需要删除的会员ID请求Servlet,然后删除指定会员信息,最后刷新会员列表。•为了优化数据操作过程,使用JDBCAPI提供的预编译SQL和C3P0连接池技术。任务分析相关知识0102执行预编译SQLC3P0连接池技术03CommonsDBUtils组件5.2.1

执行预编译SQLPreparedStatement接口是Statement接口的子接口,直接继承并重载了Statement的方法。PreparedStatement接口具有如下优点:(1)比Statement更快(2)可以实现动态参数的查询(3)可以防止SQL注入式攻击。使用PreparedStatement接口操作MySQL数据库主要步骤:(1)创建PreparedStatement接口实例(2)为占位符赋值,执行SQL语句PreparedStatementpst=conn.prepareStatement("select*fromcategorywhereid=?");pst.setInt(1,1);pst.executeQuery();例5-5预编译SQL示例。5.2.2

C3P0连接池技术JDBC2.0引入了数据源这一概念,定义了javax.sql.DataSource接口,它负责建立与数据库的连接,在应用程序访问数据库时,不必编写连接数据库的代码,可以直接从数据源获取连接。DataSource接口的实现方式有三种,而连接池就是其中之一。应用程序从连接池中获取数据库连接进行数据访问,而连接池负责创建、管理和释放数据库连接。使用连接池实现数据库连接相对于传统方式的优势在于:(1)资源重用。(2)系统反应速度加快。(3)数据库安全性提高。使用C3P0连接池组件的使用步骤:(1)下载C3P0连接池组件。(2)使用C3P0连接池。1

下载C3P0连接池组件C3P0连接池组件需要两个JAR包,分别是mchange-commons-java-0.2.20.jar和c3p0-.jar,可以从MVN官方仓库下载。(1)在浏览器中访问MVN官方仓库,搜索com.mchange。(2)单击“c3p0”超链接,进入C3P0专题页面。(3)选择“”版本,进入该版本的C3P0详细页面,单击“jar(489KB)”超链接,下载文件名为“c3p0-.jar”的JAR包文件。(4)单击“mchange-commons-java”超链接,进入MchangeCommonsJava专题页面。(5)选择“0.2.20”版本,进入该版本的MchangeCommonsJava详细页面。单击“jar(616KB)”超链接,下载文件名为“mchange-commons-java-0.2.20.jar”的JAR包文件。(6)参考5.1.3小节“连接MySQL数据库”中“下载并导入JDBC驱动程序”的JAR包导入步骤,将“c3p0-.jar”和“mchange-commons-java-0.2.20.jar”JAR包文件导入项目,之后就可以使用C3P0连接池了。2

使用C3P0连接池(1)使用配置文件配置数据库连接信息#数据库URLc3p0.jdbcUrl=@c3p0.jdbcUrl@#数据库驱动名c3p0.driverClass=@c3p0.driverClass@#登录用户名c3p0.user=@c3p0.user@#登录密码c3p0.password=@c3p0.password@#初始化连接数,默认值为15,可以省略c3p0.initialPoolSize=15#连接池中最小的连接数,默认值为10,可以省略c3p0.minPoolSize=10#连接池中最大的连接数,默认值为40,可以省略c3p0.maxPoolSize=40#连接的最大空闲时间,默认值为2秒,表示2秒内连接未被使用会被丢弃,可以省略c3p0.maxIdleTime=2(2)使用ComboPooledDataSource类获取数据源C3P0组件提供了ComboPooledDataSource类,该类实现了DataSource数据源接口,通过DataSource接口的getConnection()方法可以获取连接。例5-6修改【例5-5】,使用连接池连接数据库,显示类别id为1的商品类别信息。5.2.3

CommonsDBUtils组件CommonsDBUtils是Apache提供的一个对JDBC进行简单封装的开源工具类库,为操作数据库的一个组件,可以在不影响数据库访问性能的前提下简化JDBC的编程工作。它的特点主要有以下几个方面:(1)简化读写操作的步骤。(2)对于读操作,可以把结果集转换成List、Array、Set等Java集合,便于操作。(3)可以使用数据源、连接池等技术来优化性能。CommonsDBUtils组件的主要内容包括:CommonsDBUtils组件的组成CommonsDBUtils组件下载使用CommonsDBUtils组件1

CommonsDBUtils组件的组成CommonsDBUtils组件主要包括DBUtils类、QueryRunner类和ResultSetHandler接口。DBUtils类提供了加载JDBC驱动、关闭资源等方法。QueryRunner类简化了SQL语句的操作,将它与ResultSetHandler接口配合使用可以完成大部分的数据库操作,大大减少了代码量。方法描述<T>Tquery(Stringsql,ResultSetHandler<T>rsh)执行查询操作<T>Tquery(Stringsql,ResultSetHandler<T>rsh,Object…params)执行带参数的查询操作<T>Tquery(Stringsql,Object[]params,ResultSetHandler<T>rsh)执行带参数的查询操作intupdate(Stringsql)执行一个插入、删除或更新操作intupdate(Stringsql,Object…params)执行一个带参数的插入、删除或更新操作1

CommonsDBUtils组件的组成ResultSetHandler接口用于处理查询结果集ResultSet,根据结果集中数据的不同类型,ResultSetHandler接口提供了几种常见的实现类。类描述BeanHandler结果集中只有一条记录,将这条记录数据封装到一个实体类中BeanListHandler将结果集中的每一行数据封装到一个实体类中,结果集封装到List集合中ColumnListHandler将某列的值封装到List集合中ScalarHandler用于提取结果集中的单一标量值,适用于查询结果集中只有一个值(如单个计数值或总和)的情况ArrayHandler将结果集中的第一行数据转换成Object数组ArrayListHandler将结果集的所有行转换成ArrayList<Object[]>,每行数据是一个Object数组MapHandler将结果集的第一行数据转换成一个Map<String,Object>,键是列名,值是对应列的数据MapListHandler将结果集的所有行转换成List<Map<String,Object>>,每行数据是一个Map2

CommonsDBUtils组件的下载CommonsDBUtils是Apache

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论