第7章-JSP中使用数据库分析课件

上传人:29 文档编号:253378155 上传时间:2024-12-12 格式:PPT 页数:109 大小:1.71MB
收藏 版权申诉 举报 下载
第7章-JSP中使用数据库分析课件_第1页
第1页 / 共109页
第7章-JSP中使用数据库分析课件_第2页
第2页 / 共109页
第7章-JSP中使用数据库分析课件_第3页
第3页 / 共109页
资源描述:

《第7章-JSP中使用数据库分析课件》由会员分享,可在线阅读,更多相关《第7章-JSP中使用数据库分析课件(109页珍藏版)》请在装配图网上搜索。

1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,,*,JSP,实用教程,(,第三版,),配

2、合,《JSP,实用教程,(,第三版,)》,例子源代码一起使用,Power Point,制作 张跃平 耿祥义,第,7,章,JSP,中使用数据库,JSP实用教程(第三版) 配合《JSP实用教程(第三版)》第,2024/12/12,2,,本章主要内容,7.1 MySQL,数据库管理系统,7.2 JDBC,7.3,连接,MySQL,数据库,7.4,查询记录,7.5,更新、添加与删除记录,7.6,用结果集操作数据库中的表,7.7,预处理语句,7.8,事务,7.9,分页显示记录,7.10,常见数据库连接,7.11,标准化考试,2023/9/142 本章主要内容7.1 MySQL数,20

3、24/12/12,3,§7.1 MySQL,数据库管理系统,MySQL,数据库管理系统,简称,MySQL,,是世界上最流行的开源数据库管理系统,其社区版(,MySQL Community Edition,)是世界上最流行的免费下载的开源数据库管理系统。,目前许多,Web,开发项目都选用,MySQL,,其主要原因是,MySQL,的社区版(,MySQL Community Edition,)性能卓越,满足许多,Web,应用已经绰绰有余,而且,MySQL,的社区版是开源数据库管理系统、可以降低软件的开发和使用成本,.,2023/9/143§7.1 MySQL数据库管理系统,2024/12/12,4,

4、,1.,下载,,登录,,后选择导航条上的,products,,在出现的页面的左侧选择“,MySQL Community Edition,”或在出现的页面的右侧选择“下载,MySQL,社区版”。,如图,7.1,所示意,。,7.1.1,下载、安装与启动,MySQL,2.,安装,,将下载的,mysql-5.6.16-win32.zip,解压缩到本地计算机即可,比如解压缩到,D:\,。形成的安装目录结构,如图,7.2,。,3,.,启动,打开,MS-DOS,命令行窗口,进入到,bin,目录中,执行,MySQL,安装目录的,bin,子目录中的,mysqld.exe,文件,:,,即在命令行键入:,,mysq

5、ld,,或,mysqld -nt,,启动,MySQL,数据库服务器。启动成功,,MySQL,数据库服务器将占用当前,MS-DOS,窗口,,如图,7.3,所示,。,2023/9/144 1.下载 登录www.mysql.co,2024/12/12,5,7.1.2,建立数据库,启动,MySQL,数据库服务器后,就可以建立数据库,并在数据库中创建表。,,可以下载图形界面的,MySQL,管理工具,并使用该工具进行创建数据库、在数据库中创建表等操作,,MySQL,管理工具有免费的也有需要购买的。,,也可以使用,MySQL,提供的命令行工具进行创建数据库、在数据库中创建表等操作,2023/9/145

6、7.1.2 建立数据库 启,2024/12/12,1,.使用,MySQL,管理工具,可以登录:, for MySQL,出现如,图,7.4,所示界面 。我们建立的连接名称是,gengxiangyi,,用户名取,root,,密码是空,,MySQL,服务器占用的端口是,3306,,如,图,7.5,。,(,2,)建立数据库,在新建的连接(,gengxiangyi,)上单击鼠标右键,然后选择“新建数据库”,在弹出的新建数据库对话框中输入,选择有关信息,.,如图,7.6,所示,.,(,3,)创建表,在其“表”选择项上单击鼠标右键,选择“新建表”,将出现创建表的对话框。如图,7.7,所示,以及,7

7、.8,所示,。,2023/9/14 1.使用MySQL管理工具可以登录:h,2024/12/12,7,,2,.使用,MySQL,监视器,MySQL,提供的监视器(,MySQL monitor,),允许用户使用命令行方式管理数据库。如果读者有比较好的数据库知识,特别是,SQL,语句的知识,那么使用命令行方式管理,MySQL,数据库也是很方便的,.,需要再打开一个,MS-DOS,命令行窗口,并使用,MS-DOS,命令进入到,bin,目录中,然后使用默认的,root,用户启动,MySQL,监视器(在安装,MySQL,时,root,用户是默认的一个用户,没有密码)。命令如下:,mysql –u ro

8、ot,如图,7.9,所示,2023/9/147 2.使用MySQL监视器,2024/12/12,8,,(1),创建数据库,启动,MySQL,监视器后就可以使用,SQL,语句进行创建数据库、建表等操作。在,MS-DOS,命令行窗口输入,SQL,语句需要用“,;,”号结束,,在编辑,SQL,语句的过程中可以使用,\c,终止当前,SQL,语句的编辑。需要提醒的是,可以把一个完整的,SQL,语句命令分成几行来输入,最后用分号作结束标志即可。,使用,MySQL,监视器创建一个名字为,Book,的数据库,在当前,MySQL,监视器占用的命令行窗口输入创建数据库的,SQL,语句:,create data

9、base Book;,(,如图,7.10,所示意,),2023/9/148 (1) 创建数据库 启动,2024/12/12,9,,(2),为数据库建表,首先进入该数据库,(,即使用数据库,),:,,use Book,如图,7.11,所示意,。,在数据库,Book,建立一个名字为,bookList,表,:(,如图,7.12),CREATE TABLE bookList (,ISBN varchar(100) not null ,,name varchar(100) CHARACTER SET gb2312,,price float ,,PRIMARY KEY (ISBN),);

10、,插入记录的,SQL,语句:,(,如图,7.13),insert into bookList values('7-302-01465-5',',高等数学,',28.67);,,查询记录的,SQL,语句,(,图,7.14),,select * from bookList;,2023/9/149 (2) 为数据库建表 首先进入该数,2024/12/12,10,,(,3,)导入,.sql,文件中的,SQL,语句,可以事先将需要的,SQL,语句保存在一个扩展名是,.sql,的文本文件中,然后在,MySQL,监视器占用的命令行窗口使用,source,命令导入,.sql,的文本文件中的,SQL,语句,

11、.,drop table carList ;,create table carList(,number char(60) CHARACTER SET gb2312 not null,,name char(50) CHARACTER SET gb2312 ,,price float,,year date,,PRIMARY KEY(number),);,insert into carList values(',加,A89CQ8',',奔驰,','820000','2015-12-26');,insert into carList values(',洲,C12456',',宝马,','620000'

12、,'2015-10-10');,select * from carList;,然后,在当前,MySQL,监视器占用的命令行窗口键入如下命令:,source d:/1000/group.sql,导入,SQL,语句,,,如图,7.15,。,,group.sql,文本文件的内容如下:,2023/9/1410 (3)导入.sql文件中的SQL语,2024/12/12,11,删除数据库的命令,:,drop database <,数据库名,>,,例如:删除名为,tiger,的数据库:,drop database tiger;,删除表的命令,:,drop table <,表名,>,,例如,使用,book,

13、数据库后,执行,drop table booklist;,将删除,book,数据库中的,bookList,表。,,(,4,)删除数据库或表,2023/9/1411删除数据库的命令:drop datab,2024/12/12,12,§7.2 JDBC,JDBC,(,Java DataBase Connectivity,)提供了访问数据库的,API,,即由一些,Java,类和接口组成,是,Java,运行平台的核心类库中的一部分。在,JSP,中可以使用,JDBC,实现对数据库中表的记录的查询、修改和删除等操作。,如图,7.16,所示意,我们经常使用,JDBC,进行如下的操作:,与一个数据库建立连接。

14、,向已连接的数据库发送,SQL,语句。,处理,SQL,语句返回的结果。,2023/9/1412§7.2 JDBC JDBC(J,2024/12/12,13,使用,JDBC-,数据库驱动程序方式和数据库建立连接需要经过,2,个步骤:,§,7.3,连接,MySQL,数据库,加载,JDBC-,数据库驱动程序,和指定的数据库建立连接,如图,7.17,所示意,2023/9/1413 使用JDBC-数据库驱动程序,2024/12/12,14,教材下载的是,mysql-connector-java-5.1.28.zip,,将该,zip,文件解压至硬盘,在解压后的目录下的,mysql-conne

15、ctor-java-5.1.28-bin.ja,r,文件就是连接,MySQL,数据库的,JDBC-,数据库驱动程序。将该驱动程序复制到,Tomcat,服务器所使用的,JDK,的扩展目录中(即,java_home,环境变量指定的,JDK,,见第,1,章的,1.2,),比如:,D:\jdk1.7\jre\lib\ext,或复制到,Tomcat,服务器安装目录的,\common\lib,文件夹中,比如:,D:\apache-tomcat-8.0.3\common\lib,,7.3.1,加载,JDBC-,数据库驱动程序,加载,MySQL,的,JDBC-,数据库驱动程序代码如下:,try{,,Class

16、.forName("com.mysql.jdbc.Driver");,},catch(Exception e){},2023/9/1414 教材下载的是mysql-co,2024/12/12,15,为了能和,MySQL,数据库服务器管理的数据库建立连接,必须保证该,MySQL,数据库服务器已经启动,如果没有更改过,MySQL,数据库服务器的配置,那么该数据库服务器占用的端口是,3306,。假设,MySQL,数据库服务器所驻留的计算机的,IP,地址是,192.168.100.1,,7.3.2,建立连接,_1,使用,,Connection getConnection(String,Stri

17、ng,String),方法建立连接的代码如下:,try{ String uri = ",jdbc:mysql:// 192.168.100.1:3306/warehouse,";,String user =",root,";,String password =",99,";,con = DriverManager.getConnection(uri,user,password);,},catch(SQLException e){,System.out.println(e);,},2023/9/1415 为了能和MySQL数据库,2024/12/12,16,,7.3.2,建立连接,

18、_2,使用,Connection getConnection(String),方法建立连接的代码如下:,try{,String uri =," jdbc:mysql://192.168.100.1:3306/warehouse?user=root,con = DriverManager.getConnection(uri);,},catch(SQLException e){,System.out.println(e);,},如果,root,用户没有设置密码,那么将上述,uri,中的,&password=99,更改为:,&password=,,2023/9/1416 7.3.2建立连接_2 使

19、用,2024/12/12,17,,7.3.2,建立连接,_3,避免操作数据库出现中文乱码(细节见稍后的,7.3.3,),那么需要使用,Connection getConnection(String),方法建立连接,连接代码是(假设用户是,root,,其密码是,99,):,String uri =,"jdbc:mysql://127.0.0.1/warehouse?"+,"user=root&password=99&,characterEncoding=gb2312,";,con = DriverManager.getConnection(uri);,用户要和连接,MySQL,驻留在同一计算机上

20、,使用的,IP,地址可以是,127.0.0.1,或,localhost,。另外,由于,3306,是,MySQL,数据库服务器的默认端口号,链接数据库时允许应用程序省略默认的,3360,端口号,.,2023/9/1417 7.3.2建立连接_3 避,2024/12/12,18,,7.3.3 MySQL,乱码解决方案,_1,1,.数据库和表使用支持中文的字符编码,在创建数据库时指定数据库使用的字符编码:,,create,数据库名,CHARACTER SET,字符编码,创建表时,可以指定某个字段使用的字符编码:,字段名 类型,CHARACTER SET,字符编码,例如,:,create

21、people CHARACTER SET gb2312,create table myList (,id int,,name varchar(100) CHARACTER SET gb2312,,PRIMARY KEY (id),);,2023/9/1418 7.3.3 MySQL乱码解决方案,2024/12/12,19,,7.3.3 MySQL,乱码解决方案,_2,2,.连接数据库支持中文编码,JSP,中连接,MySQL,数据库时,需要使用,Connection getConnection(java.lang.String),方法建立连接,而且向该方法参数传递的字符串是:,“jdbc:m

22、ysql://,地址,/,数据库,?user=,用户,&password=,密码,&,characterEncoding=gb2312,";,2023/9/1419 7.3.3 MySQL乱码解决方案,2024/12/12,20,,例子,7_1,,例子,1,是一个简单的,JSP,页面,该页面中的,Java,程序片代码负责加载,JDBC-,驱动程序,并连接到数据库,warehouse,,查询,product,表中全部记录,(,见,7.1,节曾建立,的,warehouse,数据库,),,页面运行效果如图,7.18,。,2023/9/1420 例子7_1 例子1是一,2024/12/

23、12,21,§,7.4,查询记录,和数据库建立连接后,就可以使用,JDBC,提供的,API,和数据库交互信息。比如查询、修改和更新数据库中的表等。,JDBC,和数据库表进行交互的主要方式是使用,SQL,语句(其它方式见,7.8,节),,JDBC,提供的,API,可以将标准的,SQL,语句发送给数据库,实现和数据库的交互。,2023/9/1421§7.4 查询记录 和数据库建,2024/12/12,22,,7.4.1,结果集与查询,_1,1,.,SQL,查询语句与结果集,让连接对象,con,调用方法,createStatement(),创建这个,SQL,语句对象:,try{ State

24、ment sql=con.createStatement();,},catch(SQLException e ){,System.out.println(e);,},对于,ResultSet,rs,=,sql,.executeQuery("SELECT * FROM product");,内存的结果集对象,rs,的列数是,4,列,刚好和,product,的列数相同,.,2023/9/1422 7.4.1 结果集与查询_11.S,2024/12/12,23,7.4.1,结果集与查询,_2,对于,,ResultSet,rs,=,sql.executeQuery("SELECT name,pric

25、e FROM product");,,内存的结果集对象,rs,只有两列,第,1,列是,name,列、第,2,列是,price,列。,,ResultSet,结果集一次只能看到一个数据行,使用,next(),方法走到下一数据行,获得一行数据后,,ResultSet,结果集可以使用,getXxx,方法获得字段值,(,列值,),,将位置索引(第一列使用,1,,第二列使用,2,等等)或列名传递给,getXxx,方法的参数即可,2023/9/1423 7.4.1 结果集与查询_2对于,2024/12/12,24,表,7.1 ResultSet,类的若干方法,2023/9/1424 表7.1 Res

26、ultSet类的,2024/12/12,25,7.4.1,结果集与查询,_3,2,.结果集的列名与列的数目,程序查询的时候。为了代码更加容易维护,希望知道数据库表的字段(列)的名字以及表的字段的个数,那么一个办法是使用返回到程序中的结果集来获取相关的信息。,假如结果集是,rs,(1),得到元数据对象,metaData,,ResultSetMetaData,metaData,=,rs,.getMetaData();,,(2),得到结果集的列的个数,即共有几列,,int columnCount =,metaData,.getColumnCount();,(3),结果集,rs,中的第,i,列的名字:

27、,,String columnName =,metaData,.getColumnName(i);,2023/9/1425 7.4.1 结果集与查询_32.结,2024/12/12,26,7.4.2,随机查询,_1,使用下述方法获得一个,Statement,对象:,Statement stmt=con.createStatement(int type,,int concurrency);,type,取值:,,ResultSet.TYPE_SCROLL_INSENSITIVE,或,,ResultSet.TYPE_SCROLL_SENSITIVE,,Concurrency,取值:,,Result

28、Set.CONCUR_READ_ONLY,或,,ResultSet.CONCUR_UPDATABLE,2023/9/1426 7.4.2 随机查询_1使用下述方,2024/12/12,27,7.4.2,随机查询,_2,根据参数的,type,、,concurrency,的取值情况,,stmt,返回相应类型的结果集:,ResultSet re=stmt.executeQuery(SQL,语句,);,滚动查询经常用到,ResultSet,的下述方法:,public void first(),:将游标移到结果集的第一行。,public void last(),:将游标移到结果集的最后一行。,publ

29、ic int getRow(),:得到当前游标所指行的行号,行号从,1,开始,如果结果集没有行,返回,0,public boolean absolute(int row),:将游标移到参数,row,指定的行号。,2023/9/1427 7.4.2 随机查询_2 根据,2024/12/12,,7.4.3,条件查询,,"select… from,表,,where,字段 满足的条件,",例如:,,"select * from product where price > 2000 and price<5000","select * from product where name = 'java'

30、","select * from product where name like '%,里,% ",2023/9/14 7.4.3 条件查询"select…,2024/12/12,29,,例子,7_2,例子,2,使用,MVC,模式(有关知识见第,6,章)显示,warehouse,数据库,product,表中,price,字段值大于某个值的记录。,2023/9/1429 例子7_2 例子2使用,2024/12/12,30,,例子,7_2,中的,web.xml,根据例子,2,中使用的,servlet,的名字及相关类,,Web,服务目录,ch7,的,WEB-INF,下的,web.x

31、ml,文件需包含如下内容(有关,web.xml,文件的编辑与保存,见,5.1.2,),。,,queryByConditionServlet,myservlet.control.Example7_2_Servlet,,,queryByConditionServlet,/queryByConditionServlet,,2023/9/1430 例子7_2中的web.xml,2024/12/12,31,,例子,7_2,中的模型,模型(,Javabean,),Javabean,模型,Example7_2_Bean.java,负责存储查询到的记录,在本例子中,Example7_2_Bean,创建的,Ja

32、vabean,模型的,id,是,resultBean,,,scope,取值是,request,。,2023/9/1431 例子7_2中的模型 模型(Ja,2024/12/12,32,,例子,7_2,中的,视图(,JSP,页面),视图(,JSP,页面),,视图部分由,2,个,JSP,页面构成,其中,example7_2.jsp,页面负责提供输入数据的视图,即用户可以在该页面输入查询的价格条件,然后将数据提交给名字是,queryByConditionServlet,的,servlet,。,queryByConditionServlet,负责查询数据库,并将结果存储到,id,为,resultB

33、ean,的,Javabean,数据模型中,然后请求视图中的,showRecord.jsp,显示数据模型,resultBean,中的数据。,example7_2.jsp,和,showRecord.jsp,的效果,如图,7.19(a),和,图,7.19(b),所示,2023/9/1432 例子7_2中的视图(JSP页面)视图,2024/12/12,33,,例子,7_2,中的控制器,控制器(,servlet,),Example7_2_Sevlet,负责创建名字是,queryByConditionServlet,的,servlet,(见例子,2,前面,web.xml,文件的有关内容)。,,queryB

34、yConditionServlet,查询,warehouse,数据库的,product,表中满足价格条件的记录,将结果存放到,id,是,resultBean,的,Javabean,数据模型中,,,然后用转发的方法请求,showRecord.jsp,显示,resultBean,中的数据,。,2023/9/1433 例子7_2中的控制器控制器(serv,2024/12/12,34,§7.5,更新、添加与删除记录,1,.更新,Statement,对象调用方法:,public int executeUpdate,(,String sqlStatement,),;,实现对数据库表中记录的字段值的更新。例

35、如,,executeUpdate("UPDATE product SET price = 6866 WHERE name=',海尔电视机,'");,2,.添加,Statement,对象调用方法:,public int executeUpdate,(,String sqlStatement,),;,实现向数据库表中添加新的记录。例如,,executeUpdate("INSERT INTO students VALUES ('012',',神通手机’,,'2015-2-26',2687)");,3,.删除,Statement,对象调用方法:,public int executeUpdate,(,S

36、tring sqlStatement,),;,删除数据库表中的记录。例如:,executeUpdate("DELETE FROM product WHERE number = '888' ");,2023/9/1434§7.5 更新、添加与删除记录1.更新,2024/12/12,35,例子,7_3,下面的例子,3,使用,MVC,模式(有关知识见第,6,章)向,warehouse,数据库,product,表中插入录,。,2023/9/1435 例子7_3 下面的例子3使,2024/12/12,36,,例子,7_3,中的,web.xml,根据例子,3,中使用的,servlet,的名字及

37、相关类,,Web,服务目录,ch7,的,WEB-INF,下的,web.xml,文件需包含如下内容(有关,web.xml,文件的编辑与保存,见,5.1.2,):,,insertServlet,myservlet.control.Example7_3_Servlet,,,insertServlet,/insertServlet,,2023/9/1436 例子7_3中的web.xml,2024/12/12,37,,例子,7_3,中的模型,模型(,Javabean,),Javabean,模型例子,2,中的,Example7_2_Bean.java,完全相同,创建的,Javabean,模型的,id,是,

38、resultBean,,,scope,取值是,request,。,2023/9/1437 例子7_3中的模型 模型(Ja,2024/12/12,38,,例子,7_3,中的,视图(,JSP,页面),视图(,JSP,页面),,视图部分由,2,个,JSP,页面构成,一个是,example7_3.jsp,,另一个是例子,2,中的,showRecord.jsp,,其中,example7_3.jsp,页面负责提供输入新记录提交给名字是,insertServlet,的,servlet,。,,insertServlet,负责将记录插入到数据库的表中,然后查询数据库的表,并将查询结果存储到,id,为,re

39、sultBean,的,Javabean,数据模型,中,然后请求视图中的,showRecor.jsp,显示数据模型,resultBean,中的数据。,example7_3.jsp,和,showRecord.jsp,的效果,如图,7.20(a),和,图,7.20(b),所示。,2023/9/1438 例子7_3中的视图(JSP页面)视图,2024/12/12,39,,例子,7_3,中的控制器,控制器(,servlet,),Example7_3_Sevlet,负责创建名字是,insertServlet,的,servlet,(见例子,3,前面,web.xml,文件的有关内容)。,insertServl

40、et,负责向数据库,warehouse,的,product,表插入记录,并查询,product,表中的全部记录,将结果存放到,id,是,resultBean,的,Javabean,数据模型,中,然后用转发的方法请求,showRecod.jsp,显示,resultBean,中的数据。,为了避免出现中文乱码,数据库的连接方式采用,:,“jdbc:mysql://,地址,/,数据库,?user=,用户,&password=,密码,,2023/9/1439 例子7_3中的控制器控制器(serv,2024/12/12,40,§7.6,用结果集操作数据库中的表,尽管可以用,SQL,语句对数据库中表进行更新

41、、插入操作,但也可以使用内存中,ResultSet,结果集对底层数据库表进行更新和插入操作(这些操作由系统自动转化为相应的,SQL,语句),优点是不必熟悉有关更新、插入的,SQL,语句,而且方便编写代码,缺点是,必须要事先返回结果集。,2023/9/1440§7.6用结果集操作数据库中的表,7.6.1,更新记录,2024/12/12,41,使用结果集更新数据库表中第,n,行记录中某列的值的步骤是:,1.,结果集,rs,的游标移动到第,n,行,rs.absolute(n);,2.,结果集将第,n,行的某列的列值更新,例如 更新列名是,columnName,的日期值是,x,指定的值:,updat

42、eDate(String columnName, Date x),3.,更新数据库中的表,最后,结果集调用,updateRow(),方法用结果集中的第,n,行更新数据库表中的第,n,行记录。,以下代码片段更新,product,表中的第,3,行记录的,name,列(字段)的值。,rs.absolute(3);,rs.updateString("name", "IBM PC");,rs.updateRow();,7.6.1 更新记录2023/9/1441使用结果集更新数,7.6.2,插入记录,2024/12/12,42,使用结果集向数据库表中插入(添加)一行记录步骤是,:,1.,结果集,rs,的游

43、标移动到插入行,,rs.moveToInsertRow();,2.,更新插入行的列值,例如:,rs.updateString(1, "c002");,rs.updateString(2, "IBM iPad");,rs.updateDate(3,Date());,rs.updateDouble(4, 5356);,3.,插入记录,最后,结果集调用,insertRow(),方法用结果集中的插入行向数据库表中插入一行新记录。,7.6.2 插入记录2023/9/1442使用结果集向数据,2024/12/12,43,例子,7_4,下面的例子,4,使用,MVC,模式(有关知识见第,6,章)向,wareh

44、ouse,数据库,product,表中插入录,但和前面的例子,3,不同的是,例子,4,不直接使用,SQL,语句,而是使用结果集操作数据库中的表。,2023/9/1443 例子7_4 下面的例子4使用,2024/12/12,44,,例子,7_4,中的,web.xml,根据例子,4,中使用的,servlet,的名字及相关类,,Web,服务目录,ch7,的,WEB-INF,下的,web.xml,文件需包含如下内容(有关,web.xml,文件的编辑与保存,见,5.1.2,),:,,insertBySetServlet,myservlet.control.Example7_4_Servlet,,

45、,insertBySetServlet,/insertBySetServlet,,2023/9/1444 例子7_4中的web.xml,2024/12/12,45,,例子,7_4,中的模型,,模型(,Javabean,),Javabean,模型与例子,2,中的,Example7_2_Bean.java,完全相同,创建的,Javabean,模型的,id,是,resultBean,,,scope,取值是,request,。,2023/9/1445 例子7_4中的模型 模型(Ja,2024/12/12,46,,例子,7_4,中的,视图(,JSP,页面),视图(,JSP,页面),,视图部分由,2

46、,个,JSP,页面构成,一个是,example7_4.jsp,,另一个是例子,2,中的,showRecord.jsp,。,,其中,example7_4.jsp,页面负责提供输入新记录的视图,即用户可以在该页面输入要添加的记录,然后将要添加的记录提交给名字是,insertBySetServlet,的,servlet,。,,insertBySetServlet,负责将记录插入到数据库的表中,然后查询数据库的表,并将查询结果存储到,id,为,resultBean,的,Javabean,数据模型中,然后请求视图中的,showRecor.jsp,显示数据模型,resultBean,中的数据。,examp

47、le7_4.jsp,和,showRecord.jsp,的效果如,图,7.21(a),和图,7.21(b),所示。,2023/9/1446 例子7_4中的视图(JSP页面)视图,2024/12/12,47,,例子,7_4,中的控制器,控制器(,servlet,),,Example7_4_Sevlet,负责创建名字是,insertBySetServlet,的,servlet,(见例子,4,前面,web.xml,文件的有关内容)。,insertBySetServlet,使用结果集操作数据库,并向数据库,warehouse,的,product,表插入记录,然后查询,product,表中的全部记录,将结

48、果存放到,id,是,resultBean,的,Javabean,数据模型中,然后用转发的方法请求,showRecod.jsp,显示,resultBean,中的数据,.,为了,避免出现中文乱码,数据库的连接方式采用,:,"jdbc:mysql://,地址,/,数据库,?user=,用户,&password=,密码,,2023/9/1447 例子7_4中的控制器控制器(serv,2024/12/12,48,§7.7,预处理语句,Java,提供了更高效率的数据库操作机制,就是,PreparedStatement,对象,该对象被习惯地称作预处理语句对象。本节学习怎样使用预处理语句对象操作数据库中的表。

49、,2023/9/1448§7.7 预处理语句 Jav,7.7.1,预处理语句优点,2024/12/12,49,Connection,连接对象,con,调用,prepareStatement(String sql),方法:,PreparedStatement pre=con.prepareStatement(String sql);,对参数,sql,指定的,SQL,语句进行预编译处理,.,那么,pre,调用下列方法都可以使得该底层内部命令被 数据库执行:,ResultSet executeQuery(),boolean execute(),int executeUpdate(),只

50、要编译好了,PreparedStatement,对象,pre,,那么,pre,可以随时地执行上述方法,提高了访问数据库的速度。,7.7.1 预处理语句优点2023/9/1449 Co,2024/12/12,50,例子,7_5,在下面的例,5,使用预处理语句来查询,warehouse,数据库中,product,表的全部记录(有关,product,表见,7.1.2,节),请读者比较,例子,5,和,例子,1,的不同之处,2023/9/1450 例子7_5 在下面的例5,2024/12/12,51,7.7.2,使用通配符,在对,SQL,进行预处理时可以使用通配符“?”来代替字段的值。例如

51、:,prepareStatement pre=,con.prepareStatement("SELECT * FROM product WHERE price <,?,");,先调用相应的方法设置通配符“?”代表的具体值,比如:,pre.setDouble(1,6565);,指定上述预处理语句,pre,中第,1,个通配符“,?,”代表的值是,6565,。,通配符按着它们在预处理的“,SQL,语句”中从左至右依次出现的顺序分别被称做第,1,个、第,2,个,…,第,m,个通配符。,预处理语句设置通配符“?”的值的常用方法有:,void setDate(int parameterIndex,Date

52、 x),void setDouble(int parameterIndex,double x),void setFloat(int parameterIndex,float x),2023/9/1451 7.7.2 使用通配符在对SQL进,2024/12/12,52,例子,7_6,例子,6,使用,MVC,模式(有关知识见第,6,章)更新,warehouse,数据库,product,表中的记录,但和前面的例子不同的是,这里使用了预处理语句,。,2023/9/1452 例子7_6 例子6使用M,2024/12/12,53,,例子,7_6,中的,web.xml,根据例子,6,中使用的,

53、servlet,的名字及相关类,,Web,服务目录,ch7,的,WEB-INF,下的,web.xml,文件需包含如下内容(有关,web.xml,文件的编辑与保存,见,5.1.2,):,,preparedServlet,myservlet.control.Example7_6_Servlet,,,preparedServlet,/preparedServlet,,2023/9/1453 例子7_6中的web.xml,2024/12/12,54,,例子,7_6,中的模型,模型(,Javabean,),Javabean,模型与例子,2,中的,Example7_2_Bean.java,完全相同,创建的

54、,Javabean,模型的,id,是,resultBean,,,scope,取值是,request,。,2023/9/1454 例子7_6中的模型 模型(Ja,2024/12/12,55,,例子,7_6,中的,(,JSP,页面),视图(,JSP,页面),,视图部分由,2,个,JSP,页面构成,一个是,example7_6.jsp,,另一个是例子,2,中的,showRecord.jsp,(showRecod.jsp,的代码见例子,2,的视图部分,),。,example7_6.jsp,页面将要更新的记录,提交给名字是,preparedServlet,的,servlet,。,preparedS

55、ervlet,负责更新数据库表中的记录,然后查询数据库的表,并将查询结果存储到,id,为,resultBean,的,Javabean,数据模型中,然后请求视图中的,showRecor.jsp,(见例子,2,中的视图部分)显示数据模型,resultBean,中的数据。,example7_6.jsp,和,showRecord.jsp,的效果如图,7.22(a),和图,7.22(b),所示,2023/9/1455 例子7_6中的(JSP页面)视图(J,2024/12/12,56,,例子,7_6,中的控,视图,制器,控制器(,servlet,),,Example7_6_Servlet,负责创建名字是,

56、insertServlet,的,servlet,(见例子,3,前面,web.xml,文件的有关内容)。,insertServlet,负责向数据库,warehouse,的,product,表插入记录,并查询,product,表中的全部记录,将结果存放到,id,是,resultBean,的,Javabean,数据模型,中,然后用转发的方法请求,showRecod.jsp,显示,resultBean,中的数据。,为了避免出现中文乱码,数据库的连接方式采用,:,“jdbc:mysql://,地址,/,数据库,?user=,用户,&password=,密码,,2023/9/1456 例子7_6中的控视图

57、制器控制器(se,2024/12/12,57,§7.8,事务,事务由一组,SQL,语句组成,所谓“事务处理”是指:应用程序保证事务中的,SQL,语句要么全部都执行,要么一个都不执行。,事务处理步骤如下:,1,.连接对象使用,setAutoCommit(boolean autoCommit),方法,将参数,autoCommit,取值为,false,来关闭自动提交模式:,con.setAutoCommit(false);,2,.,commit(),方法,con,调用,commit(),方法就是让事务中的,SQL,语句全部生效。,3,.,rollback(),方法,只要事务中任何一个,SQL,语句没

58、有生效,,,就抛出,SQLException,异常。在处理,SQLException,异常时,,,必须让,con,调用,rollback(),方法,,,其作用是撤消事务中成功执行过的,SQL,语句对数据库数据所做的更新、插入或删除操作,.,2023/9/1457§7.8 事务 事务由一组SQ,2024/12/12,58,例子,7_7,为了,例子,7,的需要,我们在,bank,数据库中创建了表,user,表,,,表的字段及属性如下:,name(,文本,) userMoney(,双精度型,),例子,7,使用了事务处理,,,将,user,表中,name,字段是,geng,的,userMon

59、ey,的值减少,50,,并将减少的,50,增加到,name,字段是,zhang,的,userMony,属性值上。运行效果,如图,7.23,.,2023/9/1458 例子7_7 为了例子7的需,2024/12/12,59,§,7.9,分页显示记录,可以使用二维数组,table,存放表的记录,即用二维数组,table,中的行(一维数组,table[i],)存放一条记录。,假设,table,存放了,m,行记录,准备每页显示,n,行,那么,总页数的计算公式:,如果,m,除以,n,的余数大于,0,,总页数等于,m,除以,n,的商加,1,;,如果,m,除以,n,的余数等于,0,,总页数等于,m

60、,除以,n,的商。,总页数,=(m%n)==0?(m/n):(m/n+1);,,如果准备显示第,p,页的内容,应当从,tablel,第,(p-1)*n,行开始,连续输出,n,行,(最后一页可能不足,n,行)。,2023/9/1459§7.9 分页显示记录 可以,2024/12/12,60,例子,7_8,下面的例子,8,使用,MVC,模式(有关知识见第,6,章)分页显示,warehouse,数据库,product,表中的记录。,2023/9/1460 例子7_8 下面的例子8使用,2024/12/12,61,,例子,7_8,中的,web.xml,根据例子,8,中使用的,serv

61、let,的名字及相关类,,Web,服务目录,ch7,的,WEB-INF,下的,web.xml,文件需包含如下内容(有关,web.xml,文件的编辑与保存,见,5.1.2,):,,queryAllServlet,myservlet.control.Example7_8_Servlet,,,queryAllServlet,/queryAllServlet,,2023/9/1461 例子7_8中的web.xml,2024/12/12,62,,例子,7_8,中的模型,,模型(,Javabean,),Javabean,模型的,id,是,pageBean,(,Example7_8_Bean,创建,),生命

62、周期是,session,,用于存储数据库中的记录。,2023/9/1462 例子7_8中的模型 模型(Ja,2024/12/12,63,,例子,7_8,中的,视图(,JSP,页面),视图(,JSP,页面),,视图部分由,2,个,JSP,页面构成,其中,example7_8.jsp,页面负责提供输入数据的视图,即用户可以在该页面输入数据库的名、表名、密码等信息,然后提交给名字是,queryAllServlet,的,servlet,。,queryAllServlet,负责查询数据库,并将结果存储到,id,为,pageBean,的,Javabean,数据模型中,然后请求视图中的,example

63、7_8_pageShow.jsp,页面负责分页显示,pageBean,的数据。,example7_8.jsp,和,example7_8_pageShow.jsp,的效果如图,7.24(a),和图,7.24(b),所示。,2023/9/1463 例子7_8中的视图(JSP页面)视图,2024/12/12,64,,例子,7_8,中的控制器,控制器(,servlet,),Example7_8_Servle,t,负责创建名字是,queryAllServlet,的,servlet,(见例子,8,前面,web.xml,文件的有关内容)。,queryAllServlet,查询数据库表中的全部记录,将结果存放

64、到,id,是,pageBean,的,Javabean,数据模型中,然后用转发的方法请求,example7_8_pageShow.jsp,显示,pageBean,中的数据。,2023/9/1464 例子7_8中的控制器控制器(serv,2024/12/12,65,§,7.10,常见数据库连接,7.10.,1 .,连接,Microsoft SQL Server,数据库,try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");,},catch(Exception e){,},try{ String uri=,"jdbc

65、:sqlserver://192.168.100.1:1433;DatabaseName=warehouse";,String user="sa";,String password="dog123456";,con=DriverManager.getConnection(uri,user,password);,},catch(SQLException e){,System.out.println(e);,},2023/9/1465§7.10 常见数据库连接 7.1,2024/12/12,66,7.10.2,连接,Oracle,数据库,Class.forName("oracle.jdbc.d

66、river.OracleDriver").newInstance();,Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();,Connection con=,DriverManager.getConnection( "jdbc:oracle:thin:@,主机,:,端口号,:,数据库名,",",用户名,",",密码,");,例如:,String user="scott";,String password="tiger";,con = DriverManager.getConnection,("jdbc:oracle:thin:@192.168.96.1:1521:oracle9i",user,password);,2023/9/1466 7.10.2 连接Oracle,2024/12/1

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

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  sobing.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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