版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JSP实用教程(第三版)配合JSP实用教程(第三版)例子源代码一起使用例子源代码一起使用Power Point 制作 张跃平 耿祥义第第7章章 JSP中使用数据库中使用数据库2021-10-292 本章主要内容本章主要内容7.1 MySQL数据库管理系统数据库管理系统7.2 JDBC7.3 连接连接MySQL数据库数据库7.4 查询记录查询记录7.5 更新、添加与删除记录更新、添加与删除记录7.6 用结果集操作数据库中的表用结果集操作数据库中的表7.7 预处理语句预处理语句7.8 事务事务7.9 分页显示记录分页显示记录7.10 常见数据库连接常见数据库连接7.11 标准化考试标准化考试202
2、1-10-2937.1 MySQL数据库管理系统数据库管理系统 MySQL数据库管理系统,简称MySQL,是世界上最流行的开源数据库管理系统,其社区版(MySQL Community Edition)是世界上最流行的免费下载的开源数据库管理系统。 目前许多Web开发项目都选用MySQL,其主要原因是MySQL的社区版(MySQL Community Edition)性能卓越,满足许多Web应用已经绰绰有余,而且MySQL的社区版是开源数据库管理系统、可以降低软件的开发和使用成本.2021-10-294 1.下载下载 登录后选择导航条上的products,在出现的页面的左侧选择“MySQL Co
3、mmunity Edition”或在出现的页面的右侧选择“下载MySQL社区版”。如图7.1所示意。 7.1.1 下载、安装与启动下载、安装与启动MySQL2. 安装安装 将下载的mysql-5.6.16-win32.zip解压缩到本地计算机即可,比如解压缩到D:。形成的安装目录结构如图7.2。3.启动启动 打开MS-DOS命令行窗口,进入到bin目录中,执行MySQL安装目录的bin子目录中的mysqld.exe文件: 即在命令行键入: mysqld 或 mysqld -nt启动MySQL数据库服务器。启动成功,MySQL数据库服务器将占用当前MS-DOS窗口,如图7.3所示。2021-10
4、-295 7.1.2 建立数据库建立数据库 启动MySQL数据库服务器后,就可以建立数据库,并在数据库中创建表。 可以下载图形界面的MySQL管理工具,并使用该工具进行创建数据库、在数据库中创建表等操作,MySQL管理工具有免费的也有需要购买的。 也可以使用MySQL提供的命令行工具进行创建数据库、在数据库中创建表等操作2021-10-29 1使用使用MySQL管理工具管理工具可以登录:http:/ 启动navicat for MySQL 出现如图7.4所示界面 。我们建立的连接名称是gengxiangyi,用户名取root,密码是空,MySQL服务器占用的端口是3306,如图7.5。(2)建
5、立数据库)建立数据库 在新建的连接(gengxiangyi)上单击鼠标右键,然后选择“新建数据库”,在弹出的新建数据库对话框中输入,选择有关信息.如图7.6所示.(3)创建表)创建表 在其“表”选择项上单击鼠标右键,选择“新建表”,将出现创建表的对话框。如图7.7所示以及7.8所示。2021-10-297 2使用使用MySQL监视器监视器 MySQL提供的监视器(MySQL monitor),允许用户使用命令行方式管理数据库。如果读者有比较好的数据库知识,特别是SQL语句的知识,那么使用命令行方式管理MySQL数据库也是很方便的. 需要再打开一个MS-DOS命令行窗口,并使用MS-DOS命令进
6、入到bin目录中,然后使用默认的root用户启动MySQL监视器(在安装MySQL时root用户是默认的一个用户,没有密码)。命令如下: mysql u root如图7.9所示2021-10-298 (1) 创建数据库创建数据库 启动MySQL监视器后就可以使用SQL语句进行创建数据库、建表等操作。在MS-DOS命令行窗口输入SQL语句需要用语句需要用“;”号结束号结束,在编辑SQL语句的过程中可以使用c终止当前SQL语句的编辑。需要提醒的是,可以把一个完整的SQL语句命令分成几行来输入,最后用分号作结束标志即可。 使用MySQL监视器创建一个名字为Book的数据库,在当前MySQL监视器占用
7、的命令行窗口输入创建数据库的SQL语句:create database Book;(如图7.10所示意)2021-10-299 (2) 为数据库建表为数据库建表u 首先进入该数据库(即使用数据库): use Book如图7.11所示意。u在数据库Book建立一个名字为bookList表:(如图7.12)CREATE TABLE bookList ( ISBN varchar(100) not null , name varchar(100) CHARACTER SET gb2312, price float , PRIMARY KEY (ISBN); u插入记录的SQL语句:(如图7.13)i
8、nsert into bookList values(7-302-01465-5,高等数学高等数学,28.67); u查询记录的SQL语句(图7.14) select * from bookList;2021-10-2910 ( (3)导入)导入.sql文件中的文件中的SQL语句语句 可以事先将需要的SQL语句保存在一个扩展名是.sql的文本文件中,然后在MySQL监视器占用的命令行窗口使用source命令导入.sql的文本文件中的SQL语句. drop table carList ;create table carList(number char(60) CHARACTER SET gb23
9、12 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,2015-10-10);select * from carList;然后在当前MySQL监视器占用的命令行窗口键入如下命令:source d:/1000/group.sqlsource d:/1000/group.s
10、ql导入SQL语句,如图7.15 。 group.sql文本文件的内容如下:文本文件的内容如下:2021-10-2911删除数据库的命令删除数据库的命令:drop database ,例如:删除名为tiger的数据库: drop database tiger;删除表的命令删除表的命令:drop table ,例如,使用book数据库后,执行 drop table booklist;将删除book数据库中的bookList表。 (4)删除数据库或表)删除数据库或表2021-10-29127.2 JDBC JDBC(Java DataBase Connectivity)提供了访问数据库的API,即
11、由一些Java类和接口组成,是Java运行平台的核心类库中的一部分。在JSP中可以使用JDBC实现对数据库中表的记录的查询、修改和删除等操作。如图7.16所示意我们经常使用JDBC进行如下的操作:与一个数据库建立连接。向已连接的数据库发送SQL语句。1. 处理SQL语句返回的结果。2021-10-2913 使用JDBC-数据库驱动程序方式和数据库建立连接需要经过2个步骤:7.3 连接连接MySQL数据库数据库加载加载JDBC-数据库驱动程序数据库驱动程序和指定的数据库建立连接和指定的数据库建立连接如图7.17所示意2021-10-2914 教材下载的是mysql-connector-java-
12、5.1.28.zip,将该zip文件解压至硬盘,在解压后的目录下的mysql-connector-java-5.1.28-bin.jar文件就是连接MySQL数据库的JDBC-数据库驱动程序。将该驱动程序复制到Tomcat服务器所使用的JDK的扩展目录中(即java_home环境变量指定的JDK,见第1章的1.2),比如:D:jdk1.7jrelibext或复制到Tomcat服务器安装目录的commonlib文件夹中,比如:D:apache-tomcat-8.0.3commonlib 7.3.1加载加载JDBC-数据库驱动程序数据库驱动程序加载MySQL的JDBC-数据库驱动程序代码如下:tr
13、y try Class.forName(com.mysql.jdbc.Driver);Class.forName(com.mysql.jdbc.Driver); catch(Exception e)catch(Exception e)2021-10-2915 为了能和MySQL数据库服务器管理的数据库建立连接,必须保证该MySQL数据库服务器已经启动,如果没有更改过MySQL数据库服务器的配置,那么该数据库服务器占用的端口是3306。假设MySQL数据库服务器所驻留的计算机的IP地址是 7.3.2 建立连接建立连接_1使用 Connection getConnecti
14、on(String,String,String)方法建立连接的代码如下:try String uri = jdbc:mysql:/ :3306/warehouse; String user =root; String password =99; con = DriverManager.getConnection(uri,user,password); catch(SQLException e) System.out.println(e);2021-10-2916 7.3.2建立连接建立连接_2 使用Connection getConnection(String) 方法
15、建立连接的代码如下:try String uri = jdbc:mysql:/:3306/warehouse?user=root&password=99; con = DriverManager.getConnection(uri); catch(SQLException e) System.out.println(e);如果root用户没有设置密码,那么将上述uri中的&password=99更改为:&password= 2021-10-2917 7.3.2建立连接建立连接_3 避免操作数据库出现中文乱码(细节见稍后的7.3.3),那么需要使
16、用 Connection getConnection(String) 方法建立连接,连接代码是(假设用户是root,其密码是99):String uri = jdbc:mysql://warehouse?+ user=root&password=99&characterEncoding=gb2312;con = DriverManager.getConnection(uri); 用户要和连接MySQL驻留在同一计算机上,使用的IP地址可以是或localhost。另外,由于3306是MySQL数据库服务器的默认端口号,链接数据库时允许应用程序省
17、略默认的3360端口号.2021-10-2918 7.3.3 MySQL乱码解决方案乱码解决方案_11数据库和表使用支持中文的字符编码 在创建数据库时指定数据库使用的字符编码: create 数据库名数据库名 CHARACTER SET字符编码字符编码 创建表时,可以指定某个字段使用的字符编码: 字段名字段名 类型类型 CHARACTER SET字符编码字符编码例如:create people CHARACTER SET gb2312create table myList (id int, name varchar(100) CHARACTER SET gb2312,PRIMARY KEY (
18、id);2021-10-2919 7.3.3 MySQL乱码解决方案乱码解决方案_22连接数据库支持中文编码连接数据库支持中文编码JSP中连接MySQL数据库时,需要使用Connection getConnection(java.lang.String) 方法建立连接,而且向该方法参数传递的字符串是:“jdbc:mysql:/地址/数据库?user=用户&password=密码 &characterEncoding=gb2312characterEncoding=gb2312;2021-10-2920 例子例子7_17_1 例子1是一个简单的JSP页面,该页面中的Java程序片
19、代码负责加载JDBC-驱动程序,并连接到数据库warehouse,查询product表中全部记录(见7.1节曾建立的warehouse数据库),页面运行效果如图7.18。 2021-10-29217.4 查询记录查询记录 和数据库建立连接后,就可以使用JDBC提供的API和数据库交互信息。比如查询、修改和更新数据库中的表等。 JDBC和数据库表进行交互的主要方式是使用SQL语句(其它方式见7.8节),JDBC提供的API可以将标准的SQL语句发送给数据库,实现和数据库的交互。2021-10-2922 7.4.1 结果集与查询结果集与查询_11SQL查询语句与结果集查询语句与结果集让连接对象co
20、n调用方法createStatement()创建这个SQL语句对象:try Statement sql=con.createStatement(); catch(SQLException e ) System.out.println(e); 对于 ResultSet rs=sql.executeQuery(SELECT * FROM product);内存的结果集对象rs的列数是4列,刚好和product的列数相同.2021-10-2923 7.4.1 结果集与查询结果集与查询_2对于ResultSet rs=sql.executeQuery(SELECT name,price FROM pr
21、oduct);内存的结果集对象rs只有两列,第1列是name列、第2列是price列。 ResultSet结果集一次只能看到一个数据行,使用next()方法走到下一数据行,获得一行数据后,ResultSet结果集可以使用getXxx方法获得字段值(列值),将位置索引(第一列使用1,第二列使用2等等)或列名传递给getXxx方法的参数即可2021-10-2924 表7.1 ResultSet类的若干方法2021-10-2925 7.4.1 结果集与查询结果集与查询_32结果集的列名与列的数目结果集的列名与列的数目 程序查询的时候。为了代码更加容易维护,希望知道数据库表的字段(列)的名字以及表的字
22、段的个数,那么一个办法是使用返回到程序中的结果集来获取相关的信息。假如结果集是rs(1) 得到元数据对象metaData ResultSetMetaData metaData = rs.getMetaData();(2)得到结果集的列的个数,即共有几列 int columnCount = metaData.getColumnCount();(3)结果集rs中的第i列的名字: String columnName = metaData.getColumnName(i);2021-10-2926 7.4.2 随机查询随机查询_1使用下述方法获得一个Statement对象:Statement stmt
23、=con.createStatement(int type, int concurrency);type取值: ResultSet.TYPE_SCROLL_INSENSITIVE或 ResultSet.TYPE_SCROLL_SENSITIVEConcurrency取值: ResultSet.CONCUR_READ_ONLY或 ResultSet.CONCUR_UPDATABLE2021-10-2927 7.4.2 随机查询随机查询_2 根据参数的type、concurrency的取值情况,stmt返回相应类型的结果集:ResultSet re=stmt.executeQuery(SQL语句语
24、句);滚动查询经常用到ResultSet的下述方法:u public void first():将游标移到结果集的第一行。u public void last():将游标移到结果集的最后一行。u public int getRow():得到当前游标所指行的行号,行号从1开始,如果结果集没有行,返回0u public boolean absolute(int row):将游标移到参数row指定的行号。 2021-10-29 7.4.3 条件查询条件查询select from 表表 where 字段字段 满足的条件满足的条件例如: select * from product where price
25、 2000 and price5000select * from product where name = javaselect * from product where name like %里% 2021-10-2929 例子例子7_27_2 例子2使用MVC模式(有关知识见第6章)显示warehouse数据库product表中price字段值大于某个值的记录。2021-10-2930 例子例子7_27_2中的中的web.xmlweb.xml 根据例子2中使用的servlet的名字及相关类,Web服务目录ch7的WEB-INF下的web.xml文件需包含如下内容(有关web.xml文件的编
26、辑与保存见见5.1.2)。 queryByConditionServlet myservlet.control.Example7_2_Servlet queryByConditionServlet /queryByConditionServlet2021-10-2931 例子例子7_27_2中的模型中的模型 模型(Javabean)Javabean模型Example7_2_Bean.java负责存 储 查 询 到 的 记 录 , 在 本 例 子 中Example7_2_Bean创建的Javabean模型的id是resultBean,scope取值是request。2021-10-2932 例子
27、例子7_27_2中的中的视图(视图(JSP页面)页面)视图(视图(JSP页面)页面) 视图部分由2个JSP页面构成,其中example7_2.jsp页面负责提供输入数据的视图,即用户可以在该页面输入 查 询 的 价 格 条 件 , 然 后 将 数 据 提 交 给 名 字 是q u e r y B y C o n d i t i o n S e r v l e t 的 s e r v l e t 。queryByConditionServlet负责查询数据库,并将结果存储到id为resultBean的Javabean数据模型中,然后请求视图中的showRecord.jsp显示数据模型result
28、Bean中的数据。example7_2.jsp和showRecord.jsp的效果如图如图7.19(a)和图图7.19(b)所示2021-10-2933 例子例子7_27_2中的控制器中的控制器控制器(控制器(servlet)E x a m p l e 7 _ 2 _ S e v l e t 负 责 创 建 名 字 是 queryByConditionServlet的servlet(见例子2前面web.xml文件的有关内容)。 queryByConditionServlet查询warehouse数据库的product表中满足价格条件的记录,将结果存放到id是resultBean的Javabea
29、n数据模型中, 然后用转发的方法请求showRecord.jsp显示resultBean中的数据。2021-10-29347.5 更新、添加与删除记录更新、添加与删除记录1更新更新Statement对象调用方法:对象调用方法:public int executeUpdate(String sqlStatement);实现对数据库表中记录的字段值的更新。例如,实现对数据库表中记录的字段值的更新。例如,executeUpdate(UPDATE product SET price = 6866 WHERE name=海尔电视机海尔电视机);2添加Statement对象调用方法:public int
30、executeUpdate(String sqlStatement);实现向数据库表中添加新的记录。例如,executeUpdate(INSERT INTO students VALUES (012,神通手机,2015-2-26,2687);3删除Statement对象调用方法:public int executeUpdate(String sqlStatement);删除数据库表中的记录。例如:executeUpdate(DELETE FROM product WHERE number = 888 );2021-10-2935 例子例子7_37_3 下面的例子3使用MVC模式(有关知识见第6
31、章)向warehouse数据库product表中插入录。2021-10-2936 例子例子7_37_3中的中的web.xmlweb.xml 根据例子3中使用的servlet的名字及相关类,Web服务目录ch7的WEB-INF下的web.xml文件需包含如下内容(有关web.xml文件的编辑与保存见见5.1.2): insertServlet myservlet.control.Example7_3_Servlet insertServlet /insertServlet2021-10-2937 例子例子7_37_3中的模型中的模型 模型(Javabean) J a v a b e a n 模
32、型 例 子 2 中 的Example7_2_Bean.java完全相同,创建的Javabean模型的id是resultBean,scope取值是request。2021-10-2938 例子例子7_37_3中的中的视图(视图(JSP页面)页面)视图(JSP页面) 视 图 部 分 由 2 个 J S P 页 面 构 成 , 一 个 是example7_3.jsp,另一个是例子2中的showRecord.jsp,其中example7_3.jsp页面负责提供输入新记录提交给名字是insertServlet的servlet。 insertServlet负责将记录插入到数据库的表中,然后查询数据库的表,
33、并将查询结果存储到id为resultBean的 J a v a b e a n 数 据 模 型 中 , 然 后 请 求 视 图 中 的showRecor.jsp显示数据模型resultBean中的数据。example7_3.jsp和showRecord.jsp的效果如图如图7.20(a)和图图7.20(b)所示。2021-10-2939 例子例子7_37_3中的控制器中的控制器控制器(控制器(servlet)Example7_3_Sevlet负责创建名字是insertServlet的servlet(见例子3前面web.xml文件的有关内容)。insertServlet负责向数据库warehou
34、se的product表插入记录,并查询product表中的全部记录,将结果存放到id是resultBean的Javabean数据模型中,然后用转发的方法请求showRecod.jsp显示resultBean中的数据。为了避免出现中文乱码,数据库的连接方式采用:“jdbc:mysql:/地址地址/数据库数据库?user=用户用户&password=密码密码 &characterEncoding=gb2312;2021-10-29407.6用结果集操作数据库中的表用结果集操作数据库中的表 尽管可以用SQL语句对数据库中表进行更新、插入操作,但也可以使用内存中ResultSet结果集
35、对底层数据库表进行更新和插入操作(这些操作由系统自动转化为相应的SQL语句),优点是不必熟悉有关更新、插入的SQL语句,而且方便编写代码,缺点是,必须要事先返回结果集。 7.6.1 更新记录更新记录2021-10-2941使用结果集更新数据库表中第使用结果集更新数据库表中第n行记录中某列的值的步骤是:行记录中某列的值的步骤是:1.结果集rs的游标移动到第n行 rs.absolute(n);2.结果集将第n行的某列的列值更新例如 更新列名是columnName的日期值是x指定的值: updateDate(String columnName, Date x) 3.更新数据库中的表最后,结果集调用u
36、pdateRow()方法用结果集中的第n行更新数据库表中的第n行记录。 以下代码片段更新product表中的第3行记录的name列(字段)的值。rs.absolute(3);rs.updateString(name, IBM PC);rs.updateRow(); 7.6.2 插入记录插入记录2021-10-2942使用结果集向数据库表中插入(添加)一行记录步骤是使用结果集向数据库表中插入(添加)一行记录步骤是:1.结果集rs的游标移动到插入行 rs.moveToInsertRow();2.更新插入行的列值 例如:rs.updateString(1, c002);rs.updateString
37、(2, IBM iPad);rs.updateDate(3,Date();rs.updateDouble(4, 5356);3. 插入记录最后,结果集调用insertRow()方法用结果集中的插入行向数据库表中插入一行新记录。2021-10-2943 例子例子7_47_4 下面的例子4使用MVC模式(有关知识见第6章)向warehouse数据库product表中插入录,但和前面的例子3不同的是,例子4不直接使用SQL语句,而是使用结果集操作数据库中的表。2021-10-2944 例子例子7_47_4中的中的web.xmlweb.xml 根据例子4中使用的servlet的名字及相关类,Web服务
38、目录ch7的WEB-INF下的web.xml文件需包含如下内容(有关web.xml文件的编辑与保存见见5.1.2): insertBySetServlet myservlet.control.Example7_4_Servlet insertBySetServlet /insertBySetServlet2021-10-2945 例子例子7_47_4中的模型中的模型 模型(Javabean) J a v a b e a n 模 型 与 例 子 2 中 的Example7_2_Bean.java完全相同,创建的Javabean模型的id是resultBean,scope取值是request。20
39、21-10-2946 例子例子7_47_4中的中的视图(视图(JSP页面)页面)视图(视图(JSP页面)页面) 视图部分由2个JSP页面构成,一个是example7_4.jsp,另一个是例子2中的showRecord.jsp。 其中example7_4.jsp页面负责提供输入新记录的视图,即用户可以在该页面输入要添加的记录,然后将要添加的记录提交给名字是insertBySetServlet的servlet。 insertBySetServlet负责将记录插入到数据库的表中,然后查询数据库的表,并将查询结果存储到id为resultBean的Javabean数据模型中,然后请求视图中的showRe
40、cor.jsp显示数据模型resultBean中的数据。example7_4.jsp和showRecord.jsp的效果如图7.21(a)和图7.21(b)所示。2021-10-2947 例子例子7_47_4中的控制器中的控制器控制器(控制器(servlet) Example7_4_Sevlet负责创建名字是insertBySetServlet的s e r v l e t ( 见 例 子 4 前 面 w e b . x m l 文 件 的 有 关 内 容 ) 。insertBySetServlet使用结果集操作数据库,并向数据库warehouse的product表插入记录,然后查询produc
41、t表中的全部记录,将结果存放到id是resultBean的Javabean数据模型中,然后用转发的方法请求showRecod.jsp显示resultBean中的数据. 为了避免出现中文乱码,数据库的连接方式采用:jdbc:mysql:/地址地址/数据库数据库?user=用户用户&password=密码密码&characterEncoding=gb2312;2021-10-29487.7 预处理语句预处理语句 Java提供了更高效率的数据库操作机制,就是PreparedStatement对象,该对象被习惯地称作预处理语句对象。本节学习怎样使用预处理语句对象操作数据库中的表。 7.
42、7.1 预处理语句优点预处理语句优点2021-10-2949 Connection连接对象con调用prepareStatement(String sql)方法:PreparedStatement pre=con.prepareStatement(String sql);对参数sql指定的SQL语句进行预编译处理.那么pre调用下列方法都可以使得该底层内部命令被 数据库执行: ResultSet executeQuery()boolean execute()int executeUpdate() 只要编译好了PreparedStatement对象pre,那么pre可以随时地执行上述方法,提高了
43、访问数据库的速度。2021-10-2950 例子例子7_57_5 在下面的例5使用预处理语句来查询warehouse数据库中product表的全部记录(有关product表见7.1.2节),请读者比较例子5和例子1的不同之处2021-10-2951 7.7.2 使用通配符使用通配符在对SQL进行预处理时可以使用通配符“?”来代替字段的值。例如:prepareStatement pre=con.prepareStatement(SELECT * FROM product WHERE price ? );先调用相应的方法设置通配符“?”代表的具体值,比如:pre.setDouble(1,6565)
44、;指定上述预处理语句pre中第1个通配符“?”代表的值是6565。 通配符按着它们在预处理的“SQL语句”中从左至右依次出现的顺序分别被称做第1个、第2个 第m个通配符。预处理语句设置通配符“?”的值的常用方法有:void setDate(int parameterIndex,Date x)void setDouble(int parameterIndex,double x)void setFloat(int parameterIndex,float x)2021-10-2952 例子例子7_67_6 例子6使用MVC模式(有关知识见第6章)更新warehouse数据库product表中的记录
45、,但和前面的例子不同的是,这里使用了预处理语句。2021-10-2953 例子例子7_67_6中的中的web.xmlweb.xml 根据例子6中使用的servlet的名字及相关类,Web服务目录ch7的WEB-INF下的web.xml文件需包含如下内容(有关web.xml文件的编辑与保存见5.1.2): preparedServlet myservlet.control.Example7_6_Servlet preparedServlet /preparedServlet2021-10-2954 例子例子7_67_6中的模型中的模型 模型(Javabean) Javabean模型与例子2中的E
46、xample7_2_Bean.java完全相同,创建的Javabean模型的id是resultBean,scope取值是request。2021-10-2955 例子例子7_67_6中的中的(JSP页面)页面)视图(JSP页面) 视图部分由2个JSP页面构成,一个是example7_6.jsp,另一个是例子2中的showRecord.jsp(showRecod.jsp的代码见例子2的视图部分)。example7_6.jsp页面将要更新的记录,提交给名字是preparedServlet的servlet。preparedServlet负责更新数据库表中的记录,然后查询数据库的表,并将查询结果存储到
47、id为resultBean的Javabean数据模型中,然后请求视图中的showRecor.jsp(见例子2中的视图部分)显示数据模型resultBean中的数据。example7_6.jsp和showRecord.jsp的效果如图7.22(a)和图7.22(b)所示2021-10-2956 例子例子7_67_6中的控中的控视图视图制器制器控制器(控制器(servlet) Example7_6_Servlet负责创建名字是insertServlet的servlet(见例子3前面web.xml文件的有关内容)。insertServlet负责向数据库warehouse的product表插入记录,并
48、查询product表中的全部记录,将结果存放到id是resultBean的Javabean数据模型中,然后用转发的方法请求showRecod.jsp显示resultBean中的数据。为了避免出现中文乱码,数据库的连接方式采用:“jdbc:mysql:/地址地址/数据库数据库?user=用户用户&password=密码密码 &characterEncoding=gb2312;2021-10-29577.8 事务事务 事务由一组SQL语句组成,所谓“事务处理”是指:应用程序保证事务中的SQL语句要么全部都执行,要么一个都不执行。 事务处理步骤如下:1连接对象使用setAutoCom
49、mit(boolean autoCommit)方法将参数autoCommit取值为false来关闭自动提交模式:con.setAutoCommit(false);2commit()方法 con调用commit()方法就是让事务中的SQL语句全部生效。3rollback()方法 只要事务中任何一个SQL语句没有生效,就抛出SQLException异常。在处理SQLException异常时,必须让con调用rollback()方法,其作用是撤消事务中成功执行过的SQL语句对数据库数据所做的更新、插入或删除操作.2021-10-2958 例子例子7_77_7 为了例子7的需要,我们在bank数据库中
50、创建了表user表,表的字段及属性如下:name(文本文本) userMoney(双精度型双精度型) 例子7使用了事务处理,将user表中name字段是geng的userMoney的值减少50,并将减少的50增加到name字段是zhang的userMony属性值上。运行效果如图如图7.23.2021-10-29597.9 分页显示记录分页显示记录 可以使用二维数组table存放表的记录,即用二维数组table中的行(一维数组tablei)存放一条记录。假设table存放了m行记录,准备每页显示n行,那么,总页数的计算公式:如果m除以n的余数大于0,总页数等于m除以n的商加1;如果m除以n的余数
51、等于0,总页数等于m除以n的商。 总页数总页数=(m%n)=0?(m/n):(m/n+1);=(m%n)=0?(m/n):(m/n+1); 如果准备显示第p页的内容,应当从tablel第 (p-1)*n行开始,连续输出行开始,连续输出n行行(最后一页可能不足n行)。2021-10-2960 例子例子7_87_8 下面的例子8使用MVC模式(有关知识见第6章)分页显示warehouse数据库product表中的记录。2021-10-2961 例子例子7_87_8中的中的web.xmlweb.xml 根据例子8中使用的servlet的名字及相关类,Web服务目录ch7的WEB-INF下的web.x
52、ml文件需包含如下内容(有关web.xml文件的编辑与保存见见5.1.2): queryAllServlet myservlet.control.Example7_8_Servlet queryAllServlet /queryAllServlet2021-10-2962 例子例子7_87_8中的模型中的模型 模型(Javabean) Javabean模型的id是pageBean(Example7_8_Bean创建),生命周期是session,用于存储数据库中的记录。2021-10-2963 例子例子7_87_8中的中的视图(视图(JSP页面)页面)视图(JSP页面)视图部分由2个JSP页面构
53、成,其中example7_8.jsp页面负责提供输入数据的视图,即用户可以在该页面输入数据库的名、表名、密码等信息,然后提交给名字是queryAllServlet的servlet。queryAllServlet负责查询数据库,并将结果存储到id为pageBean的 J a v a b e a n 数 据 模 型 中 , 然 后 请 求 视 图 中 的example7_8_pageShow.jsp页面负责分页显示pageBean的数据。example7_8.jsp和example7_8_pageShow.jsp的效果如图7.24(a)和图7.24(b)所示。2021-10-2964 例子例子7_
54、87_8中的控制器中的控制器控制器(控制器(servlet)Example7_8_Servlet负责创建名字是queryAllServlet的servlet(见例子8前面web.xml文件的有关内容)。queryAllServlet查询数据库表中的全部记录,将结果存放到id是pageBean的Javabean数据模型中,然后用转发的方法请求example7_8_pageShow.jsp显示pageBean中的数据。2021-10-29657.10 常见数据库连接常见数据库连接 7.10.1 .连接连接Microsoft SQL Server数据库数据库try Class.forName(com
55、.microsoft.sqlserver.jdbc.SQLServerDriver);catch(Exception e)try String uri= jdbc:sqlserver:/:1433;DatabaseName=warehouse; String user=sa; String password=dog123456; con=DriverManager.getConnection(uri,user,password); catch(SQLException e) System.out.println(e);2021-10-2966 7.10.2 连接Ora
56、cle数据库Class.forName(oracle.jdbc.driver.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
57、:thin::1521:oracle9i,user,password);2021-10-2967 7.10.3 连接Microsoft Access数据库Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);Connection con = DriverManager.getConnection(jdbc:odbc:数据源名字“, loginName, password )2021-10-2968 例子例子7_97_9例子9连接Access数据库shop、查询其中的goods表。2021-10-29697.11 标准化考试标准化考试 我
58、们很熟悉标准化考试,就是只需在给出的选择中选出正确的答案。在本节的标准化考试中,用户只能顺序的回答每个随机抽取到的题目,即回答一个题目,然后读取下一个题目后,用户就不能再回到上一个题目(类似新的驾驶员交通理论考试规则)。 7.11.1 设计要求设计要求2021-10-29701. 考生可以在输入考号的页面输入考号,单击确认提交键开始考试。2 .考生单击确认提交键后,可以在答题页面看到随机抽取到的第1题。3考生回答一个题目后,可以继续随机抽取下一题目。4. 考生在答题页面单击交卷提交键,完成考试,系统将给出考生的分数。 7.11.2 数据库设计数据库设计2021-10-2971 创建一个名字为s
59、chool的数据库,在数据库中使用test表存放试题。test表的各个字段及意义如下:number(int) number(int) :存放题号,content(char) content(char) :存放试题内容 ,a(char) a(char) :存放试题提供的a选择 , ,b(char) b(char) :存放试题提供的b选择,c(char) c(char) :存放试题提供的c选择,d(char) d(char) :存放试题提供的d选择,pic(char) pic(char) :存放试题示意图的图像文件的名字 ,answer(char) answer(char) :存放试题的答案使用s
60、tudent表存放考生的学号和分数。student表的各个字段及意义如下:id(char) :存放考号,score(float) :存放分数。2021-10-2972 7.11.3 有关代码有关代码 例子10给出设计的有关代码,使用MVC模式(有关知识见第6章)设计标准化考试。2021-10-2973 例子例子7_107_10中的中的web.xmlweb.xml 根据例子10中使用的servlet的名字及相关类,Web服务目录ch7的WEB-INF下的web.xml文件需包含如下内容(有关web.xml文件的编辑与保存见5.1.2): readTestServlet myservlet.control.Example7_10_Servlet readTestServlet /readT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 急性喉炎护理查房
- 2026年健康管理师三级技能模拟试题及答案
- 2026年节水知识竞赛试题库150道及完整答案(历年真题)
- 2026年雷锋知识竞赛题库试题及参考答案
- 2026年美甲美睫师中级职业技能鉴定题库及答案
- 2026年南宁市第四十七中学招聘考试笔试试题(含答案)
- 2026年起重安全培训测试题及答案
- 2026年普法模拟试题附参考答案(B卷)
- 2026年人工智能安全与伦理考试试题及答案
- 2026年人工智能训练师(四级)职业技能考试试题
- 电力工程建设与管理指南(标准版)
- 2026中级消防监控证考试题目及答案
- 2025年新版中控证考试题及答案
- 进户门安装合同协议书
- 村卫生室标准化建设课件
- TD/T 1023-2010市(地)级土地利用总体规划编制规程
- 《农机安全生产重大事故隐患判定标准(试行)》解读与培训
- 客服基础考试试题及答案
- 评判性思维在临床中的应用
- 中小学人工智能课程教学指南
- 《低钾血症》课件
评论
0/150
提交评论