第7章 JSP中使用数据库分析课件.ppt
JSP实用教程(第三版),配合JSP实用教程(第三版)例子源代码一起使用Power Point 制作 张跃平 耿祥义,第7章 JSP中使用数据库,2022/12/20,2,本章主要内容,7.1 MySQL数据库管理系统7.2 JDBC7.3 连接MySQL数据库7.4 查询记录7.5 更新、添加与删除记录7.6 用结果集操作数据库中的表7.7 预处理语句7.8 事务7.9 分页显示记录7.10 常见数据库连接7.11 标准化考试,2022/12/20,3,7.1 MySQL数据库管理系统,MySQL数据库管理系统,简称MySQL,是世界上最流行的开源数据库管理系统,其社区版(MySQL Community Edition)是世界上最流行的免费下载的开源数据库管理系统。,目前许多Web开发项目都选用MySQL,其主要原因是MySQL的社区版(MySQL Community Edition)性能卓越,满足许多Web应用已经绰绰有余,而且MySQL的社区版是开源数据库管理系统、可以降低软件的开发和使用成本.,2022/12/20,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文件: 即在命令行键入: mysqld 或 mysqld -nt启动MySQL数据库服务器。启动成功,MySQL数据库服务器将占用当前MS-DOS窗口,如图7.3所示。,2022/12/20,5,7.1.2 建立数据库,启动MySQL数据库服务器后,就可以建立数据库,并在数据库中创建表。,可以下载图形界面的MySQL管理工具,并使用该工具进行创建数据库、在数据库中创建表等操作,MySQL管理工具有免费的也有需要购买的。 也可以使用MySQL提供的命令行工具进行创建数据库、在数据库中创建表等操作,2022/12/20,1使用MySQL管理工具,可以登录:http:/,(1)建立连接 启动navicat for MySQL 出现如图7.4所示界面 。我们建立的连接名称是gengxiangyi,用户名取root,密码是空,MySQL服务器占用的端口是3306,如图7.5。(2)建立数据库 在新建的连接(gengxiangyi)上单击鼠标右键,然后选择“新建数据库”,在弹出的新建数据库对话框中输入,选择有关信息.如图7.6所示.(3)创建表 在其“表”选择项上单击鼠标右键,选择“新建表”,将出现创建表的对话框。如图7.7所示以及7.8所示。,2022/12/20,7,2使用MySQL监视器,MySQL提供的监视器(MySQL monitor),允许用户使用命令行方式管理数据库。如果读者有比较好的数据库知识,特别是SQL语句的知识,那么使用命令行方式管理MySQL数据库也是很方便的.,需要再打开一个MS-DOS命令行窗口,并使用MS-DOS命令进入到bin目录中,然后使用默认的root用户启动MySQL监视器(在安装MySQL时root用户是默认的一个用户,没有密码)。命令如下: mysql u root,如图7.9所示,2022/12/20,8,(1) 创建数据库,启动MySQL监视器后就可以使用SQL语句进行创建数据库、建表等操作。在MS-DOS命令行窗口输入SQL语句需要用“;”号结束,在编辑SQL语句的过程中可以使用c终止当前SQL语句的编辑。需要提醒的是,可以把一个完整的SQL语句命令分成几行来输入,最后用分号作结束标志即可。,使用MySQL监视器创建一个名字为Book的数据库,在当前MySQL监视器占用的命令行窗口输入创建数据库的SQL语句:,create database Book;,(如图7.10所示意),2022/12/20,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);,插入记录的SQL语句:(如图7.13)insert into bookList values(7-302-01465-5,高等数学,28.67);,查询记录的SQL语句(图7.14) select * from bookList;,2022/12/20,10,(3)导入.sql文件中的SQL语句,可以事先将需要的SQL语句保存在一个扩展名是.sql的文本文件中,然后在MySQL监视器占用的命令行窗口使用source命令导入.sql的文本文件中的SQL语句.,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,2015-10-10);select * from carList;,然后在当前MySQL监视器占用的命令行窗口键入如下命令:source d:/1000/group.sql导入SQL语句,如图7.15 。,group.sql文本文件的内容如下:,2022/12/20,11,删除数据库的命令:drop database ,例如:删除名为tiger的数据库: drop database tiger;删除表的命令:drop table ,例如,使用book数据库后,执行 drop table booklist;将删除book数据库中的bookList表。,(4)删除数据库或表,2022/12/20,12,7.2 JDBC,JDBC(Java DataBase Connectivity)提供了访问数据库的API,即由一些Java类和接口组成,是Java运行平台的核心类库中的一部分。在JSP中可以使用JDBC实现对数据库中表的记录的查询、修改和删除等操作。如图7.16所示意,我们经常使用JDBC进行如下的操作:与一个数据库建立连接。向已连接的数据库发送SQL语句。处理SQL语句返回的结果。,2022/12/20,13,使用JDBC-数据库驱动程序方式和数据库建立连接需要经过2个步骤:,7.3 连接MySQL数据库,加载JDBC-数据库驱动程序和指定的数据库建立连接,如图7.17所示意,2022/12/20,14,教材下载的是mysql-connector-java-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-数据库驱动程序代码如下:try Class.forName(com.mysql.jdbc.Driver);catch(Exception e),2022/12/20,15,为了能和MySQL数据库服务器管理的数据库建立连接,必须保证该MySQL数据库服务器已经启动,如果没有更改过MySQL数据库服务器的配置,那么该数据库服务器占用的端口是3306。假设MySQL数据库服务器所驻留的计算机的IP地址是192.168.100.1,7.3.2 建立连接_1,使用 Connection getConnection(String,String,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);,2022/12/20,16,7.3.2建立连接_2,使用Connection getConnection(String) 方法建立连接的代码如下:try String uri = jdbc:mysql:/192.168.100.1:3306/warehouse?user=root如果root用户没有设置密码,那么将上述uri中的&password=99更改为:&password=,2022/12/20,17,7.3.2建立连接_3,避免操作数据库出现中文乱码(细节见稍后的7.3.3),那么需要使用 Connection getConnection(String) 方法建立连接,连接代码是(假设用户是root,其密码是99):String uri = jdbc:mysql:/127.0.0.1/warehouse?+ user=root,用户要和连接MySQL驻留在同一计算机上,使用的IP地址可以是127.0.0.1或localhost。另外,由于3306是MySQL数据库服务器的默认端口号,链接数据库时允许应用程序省略默认的3360端口号.,2022/12/20,18,7.3.3 MySQL乱码解决方案_1,1数据库和表使用支持中文的字符编码 在创建数据库时指定数据库使用的字符编码: create 数据库名 CHARACTER SET字符编码 创建表时,可以指定某个字段使用的字符编码: 字段名 类型 CHARACTER SET字符编码,例如:,create people CHARACTER SET gb2312create table myList (id int, name varchar(100) CHARACTER SET gb2312,PRIMARY KEY (id);,2022/12/20,19,7.3.3 MySQL乱码解决方案_2,2连接数据库支持中文编码,JSP中连接MySQL数据库时,需要使用Connection getConnection(java.lang.String) 方法建立连接,而且向该方法参数传递的字符串是:“jdbc:mysql:/地址/数据库?user=用户,2022/12/20,20,例子7_1,例子1是一个简单的JSP页面,该页面中的Java程序片代码负责加载JDBC-驱动程序,并连接到数据库warehouse,查询product表中全部记录(见7.1节曾建立的warehouse数据库),页面运行效果如图7.18。,2022/12/20,21,7.4 查询记录,和数据库建立连接后,就可以使用JDBC提供的API和数据库交互信息。比如查询、修改和更新数据库中的表等。 JDBC和数据库表进行交互的主要方式是使用SQL语句(其它方式见7.8节),JDBC提供的API可以将标准的SQL语句发送给数据库,实现和数据库的交互。,2022/12/20,22,7.4.1 结果集与查询_1,1SQL查询语句与结果集,让连接对象con调用方法createStatement()创建这个SQL语句对象:try Statement sql=con.createStatement(); catch(SQLException e ) System.out.println(e); 对于 ResultSet rs=sql.executeQuery(SELECT * FROM product);内存的结果集对象rs的列数是4列,刚好和product的列数相同.,2022/12/20,23,7.4.1 结果集与查询_2,对于ResultSet rs=sql.executeQuery(SELECT name,price FROM product);内存的结果集对象rs只有两列,第1列是name列、第2列是price列。 ResultSet结果集一次只能看到一个数据行,使用next()方法走到下一数据行,获得一行数据后,ResultSet结果集可以使用getXxx方法获得字段值(列值),将位置索引(第一列使用1,第二列使用2等等)或列名传递给getXxx方法的参数即可,2022/12/20,24,表7.1 ResultSet类的若干方法,2022/12/20,25,7.4.1 结果集与查询_3,2结果集的列名与列的数目,程序查询的时候。为了代码更加容易维护,希望知道数据库表的字段(列)的名字以及表的字段的个数,那么一个办法是使用返回到程序中的结果集来获取相关的信息。,假如结果集是rs(1) 得到元数据对象metaData ResultSetMetaData metaData = rs.getMetaData();(2)得到结果集的列的个数,即共有几列 int columnCount = metaData.getColumnCount();(3)结果集rs中的第i列的名字: String columnName = metaData.getColumnName(i);,2022/12/20,26,7.4.2 随机查询_1,使用下述方法获得一个Statement对象:Statement stmt=con.createStatement(int type, int concurrency);type取值: ResultSet.TYPE_SCROLL_INSENSITIVE或 ResultSet.TYPE_SCROLL_SENSITIVEConcurrency取值: ResultSet.CONCUR_READ_ONLY或 ResultSet.CONCUR_UPDATABLE,2022/12/20,27,7.4.2 随机查询_2,根据参数的type、concurrency的取值情况,stmt返回相应类型的结果集:ResultSet re=stmt.executeQuery(SQL语句);,滚动查询经常用到ResultSet的下述方法:public void first():将游标移到结果集的第一行。public void last():将游标移到结果集的最后一行。public int getRow():得到当前游标所指行的行号,行号从1开始,如果结果集没有行,返回0public boolean absolute(int row):将游标移到参数row指定的行号。,2022/12/20,7.4.3 条件查询,select from 表 where 字段 满足的条件,例如: select * from product where price 2000 and price5000,select * from product where name = java,select * from product where name like %里% ,2022/12/20,29,例子7_2,例子2使用MVC模式(有关知识见第6章)显示warehouse数据库product表中price字段值大于某个值的记录。,2022/12/20,30,例子7_2中的web.xml,根据例子2中使用的servlet的名字及相关类,Web服务目录ch7的WEB-INF下的web.xml文件需包含如下内容(有关web.xml文件的编辑与保存见5.1.2)。, queryByConditionServlet myservlet.control.Example7_2_Servlet queryByConditionServlet /queryByConditionServlet,2022/12/20,31,例子7_2中的模型,模型(Javabean)Javabean模型Example7_2_Bean.java负责存储查询到的记录,在本例子中Example7_2_Bean创建的Javabean模型的id是resultBean,scope取值是request。,2022/12/20,32,例子7_2中的视图(JSP页面),视图(JSP页面) 视图部分由2个JSP页面构成,其中example7_2.jsp页面负责提供输入数据的视图,即用户可以在该页面输入查询的价格条件,然后将数据提交给名字是queryByConditionServlet的servlet。queryByConditionServlet负责查询数据库,并将结果存储到id为resultBean的Javabean数据模型中,然后请求视图中的showRecord.jsp显示数据模型resultBean中的数据。example7_2.jsp和showRecord.jsp的效果如图7.19(a)和图7.19(b)所示,2022/12/20,33,例子7_2中的控制器,控制器(servlet)Example7_2_Sevlet负责创建名字是 queryByConditionServlet的servlet(见例子2前面web.xml文件的有关内容)。 queryByConditionServlet查询warehouse数据库的product表中满足价格条件的记录,将结果存放到id是resultBean的Javabean数据模型中, 然后用转发的方法请求showRecord.jsp显示resultBean中的数据。,2022/12/20,34,7.5 更新、添加与删除记录,1更新Statement对象调用方法:public int executeUpdate(String sqlStatement);实现对数据库表中记录的字段值的更新。例如,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(String sqlStatement);删除数据库表中的记录。例如:executeUpdate(DELETE FROM product WHERE number = 888 );,2022/12/20,35,例子7_3,下面的例子3使用MVC模式(有关知识见第6章)向warehouse数据库product表中插入录。,2022/12/20,36,例子7_3中的web.xml,根据例子3中使用的servlet的名字及相关类,Web服务目录ch7的WEB-INF下的web.xml文件需包含如下内容(有关web.xml文件的编辑与保存见5.1.2):, insertServlet myservlet.control.Example7_3_Servlet insertServlet /insertServlet,2022/12/20,37,例子7_3中的模型,模型(Javabean) Javabean模型例子2中的Example7_2_Bean.java完全相同,创建的Javabean模型的id是resultBean,scope取值是request。,2022/12/20,38,例子7_3中的视图(JSP页面),视图(JSP页面) 视图部分由2个JSP页面构成,一个是example7_3.jsp,另一个是例子2中的showRecord.jsp,其中example7_3.jsp页面负责提供输入新记录提交给名字是insertServlet的servlet。 insertServlet负责将记录插入到数据库的表中,然后查询数据库的表,并将查询结果存储到id为resultBean的Javabean数据模型中,然后请求视图中的showRecor.jsp显示数据模型resultBean中的数据。example7_3.jsp和showRecord.jsp的效果如图7.20(a)和图7.20(b)所示。,2022/12/20,39,例子7_3中的控制器,控制器(servlet)Example7_3_Sevlet负责创建名字是insertServlet的servlet(见例子3前面web.xml文件的有关内容)。insertServlet负责向数据库warehouse的product表插入记录,并查询product表中的全部记录,将结果存放到id是resultBean的Javabean数据模型中,然后用转发的方法请求showRecod.jsp显示resultBean中的数据。,为了避免出现中文乱码,数据库的连接方式采用:“jdbc:mysql:/地址/数据库?user=用户,2022/12/20,40,7.6用结果集操作数据库中的表,尽管可以用SQL语句对数据库中表进行更新、插入操作,但也可以使用内存中ResultSet结果集对底层数据库表进行更新和插入操作(这些操作由系统自动转化为相应的SQL语句),优点是不必熟悉有关更新、插入的SQL语句,而且方便编写代码,缺点是,必须要事先返回结果集。,7.6.1 更新记录,2022/12/20,41,使用结果集更新数据库表中第n行记录中某列的值的步骤是:1.结果集rs的游标移动到第n行 rs.absolute(n);2.结果集将第n行的某列的列值更新例如 更新列名是columnName的日期值是x指定的值: updateDate(String columnName, Date x) 3.更新数据库中的表最后,结果集调用updateRow()方法用结果集中的第n行更新数据库表中的第n行记录。 以下代码片段更新product表中的第3行记录的name列(字段)的值。rs.absolute(3);rs.updateString(name, IBM PC);rs.updateRow();,7.6.2 插入记录,2022/12/20,42,使用结果集向数据库表中插入(添加)一行记录步骤是:1.结果集rs的游标移动到插入行 rs.moveToInsertRow();2.更新插入行的列值 例如:rs.updateString(1, c002);rs.updateString(2, IBM iPad);rs.updateDate(3,Date();rs.updateDouble(4, 5356);3. 插入记录最后,结果集调用insertRow()方法用结果集中的插入行向数据库表中插入一行新记录。,2022/12/20,43,例子7_4,下面的例子4使用MVC模式(有关知识见第6章)向warehouse数据库product表中插入录,但和前面的例子3不同的是,例子4不直接使用SQL语句,而是使用结果集操作数据库中的表。,2022/12/20,44,例子7_4中的web.xml,根据例子4中使用的servlet的名字及相关类,Web服务目录ch7的WEB-INF下的web.xml文件需包含如下内容(有关web.xml文件的编辑与保存见5.1.2):, insertBySetServlet myservlet.control.Example7_4_Servlet insertBySetServlet /insertBySetServlet,2022/12/20,45,例子7_4中的模型,模型(Javabean) Javabean模型与例子2中的Example7_2_Bean.java完全相同,创建的Javabean模型的id是resultBean,scope取值是request。,2022/12/20,46,例子7_4中的视图(JSP页面),视图(JSP页面) 视图部分由2个JSP页面构成,一个是example7_4.jsp,另一个是例子2中的showRecord.jsp。 其中example7_4.jsp页面负责提供输入新记录的视图,即用户可以在该页面输入要添加的记录,然后将要添加的记录提交给名字是insertBySetServlet的servlet。 insertBySetServlet负责将记录插入到数据库的表中,然后查询数据库的表,并将查询结果存储到id为resultBean的Javabean数据模型中,然后请求视图中的showRecor.jsp显示数据模型resultBean中的数据。example7_4.jsp和showRecord.jsp的效果如图7.21(a)和图7.21(b)所示。,2022/12/20,47,例子7_4中的控制器,控制器(servlet) Example7_4_Sevlet负责创建名字是insertBySetServlet的servlet(见例子4前面web.xml文件的有关内容)。insertBySetServlet使用结果集操作数据库,并向数据库warehouse的product表插入记录,然后查询product表中的全部记录,将结果存放到id是resultBean的Javabean数据模型中,然后用转发的方法请求showRecod.jsp显示resultBean中的数据.,为了避免出现中文乱码,数据库的连接方式采用:jdbc:mysql:/地址/数据库?user=用户,2022/12/20,48,7.7 预处理语句,Java提供了更高效率的数据库操作机制,就是PreparedStatement对象,该对象被习惯地称作预处理语句对象。本节学习怎样使用预处理语句对象操作数据库中的表。,7.7.1 预处理语句优点,2022/12/20,49,Connection连接对象con调用prepareStatement(String sql)方法:PreparedStatement pre=con.prepareStatement(String sql);对参数sql指定的SQL语句进行预编译处理.,那么pre调用下列方法都可以使得该底层内部命令被 数据库执行: ResultSet executeQuery()boolean execute()int executeUpdate() 只要编译好了PreparedStatement对象pre,那么pre可以随时地执行上述方法,提高了访问数据库的速度。,2022/12/20,50,例子7_5,在下面的例5使用预处理语句来查询warehouse数据库中product表的全部记录(有关product表见7.1.2节),请读者比较例子5和例子1的不同之处,2022/12/20,51,7.7.2 使用通配符,在对SQL进行预处理时可以使用通配符“?”来代替字段的值。例如: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 x)void setDouble(int parameterIndex,double x)void setFloat(int parameterIndex,float x),2022/12/20,52,例子7_6,例子6使用MVC模式(有关知识见第6章)更新warehouse数据库product表中的记录,但和前面的例子不同的是,这里使用了预处理语句。,2022/12/20,53,例子7_6中的web.xml,根据例子6中使用的servlet的名字及相关类,Web服务目录ch7的WEB-INF下的web.xml文件需包含如下内容(有关web.xml文件的编辑与保存见5.1.2):, preparedServlet myservlet.control.Example7_6_Servlet preparedServlet /preparedServlet,2022/12/20,54,例子7_6中的模型,模型(Javabean) Javabean模型与例子2中的Example7_2_Bean.java完全相同,创建的Javabean模型的id是resultBean,scope取值是request。,2022/12/20,55,例子7_6中的(JSP页面),视图(JSP页面) 视图部分由2个JSP页面构成,一个是example7_6.jsp,另一个是例子2中的showRecord.jsp(showRecod.jsp的代码见例子2的视图部分)。example7_6.jsp页面将要更新的记录,提交给名字是preparedServlet的servlet。preparedServlet负责更新数据库表中的记录,然后查询数据库的表,并将查询结果存储到id为resultBean的Javabean数据模型中,然后请求视图中的showRecor.jsp(见例子2中的视图部分)显示数据模型resultBean中的数据。example7_6.jsp和showRecord.jsp的效果如图7.22(a)和图7.22(b)所示,2022/12/20,56,例子7_6中的控视图制器,控制器(servlet) Example7_6_Servlet负责创建名字是insertServlet的servlet(见例子3前面web.xml文件的有关内容)。insertServlet负责向数据库warehouse的product表插入记录,并查询product表中的全部记录,将结果存放到id是resultBean的Javabean数据模型中,然后用转发的方法请求showRecod.jsp显示resultBean中的数据。,为了避免出现中文乱码,数据库的连接方式采用:“jdbc:mysql:/地址/数据库?user=用户,2022/12/20,57,7.8 事务,事务由一组SQL语句组成,所谓“事务处理”是指:应用程序保证事务中的SQL语句要么全部都执行,要么一个都不执行。,事务处理步骤如下:1连接对象使用setAutoCommit(boolean autoCommit)方法将参数autoCommit取值为false来关闭自动提交模式:con.setAutoCommit(false);2commit()方法 con调用commit()方法就是让事务中的SQL语句全部生效。3rollback()方法 只要事务中任何一个SQL语句没有生效,就抛出SQLException异常。在处理SQLException异常时,必须让con调用rollback()方法,其作用是撤消事务中成功执行过的SQL语句对数据库数据所做的更新、插入或删除操作.,2022/12/20,58,例子7_7,为了例子7的需要,我们在bank数据库中创建了表user表,表的字段及属性如下:name(文本) userMoney(双精度型) 例子7使用了事务处理,将user表中name字段是geng的userMoney的值减少50,并将减少的50增加到name字段是zhang的userMony属性值上。运行效果如图7.23.,2022/12/20,59,7.9 分页显示记录,可以使用二维数组table存放表的记录,即用二维数组table中的行(一维数组tablei)存放一条记录。假设table存放了m行记录,准备每页显示n行,那么,总页数的计算公式:如果m除以n的余数大于0,总页数等于m除以n的商加1;如果m除以n的余数等于0,总页数等于m除以n的商。 总页数=(m%n)=0?(m/n):(m/n+1); 如果准备显示第p页的内容,应当从tablel第 (p-1)*n行开始,连续输出n行(最后一页可能不足n行)。,2022/12/20,60,例子7_8,下面的例子8使用MVC模式(有关知识见第6章)分页显示warehouse数据库product表中的记录。,2022/12/20,61,例子7_8中的web.xml,根据例子8中使用的servlet的名字及相关类,Web服务目录ch7的WEB-INF下的web.xml文件需包含如下内容(有关web.xml文件的编辑与保存见5.1.2):, queryAllServlet myservlet.control.Example7_8_Servlet queryAllServlet /queryAllServlet,2022/12/20,62,例子7_8中的模型,模型(Javabean) Javabean模型的id是pageBean(Example7_8_Bean创建),生命周期是session,用于存储数据库中的记录。,2022/12/20,63,例子7_8中的视图(JSP页面),视图(JSP页面)视图部分由2个JSP页面构成,其中example7_8.jsp页面负责提供输入数据的视图,即用户可以在该页面输入数据库的名、表名、密码等信息,然后提交给名字是queryAllServlet的servlet。queryAllServlet负责查询数据库,并将结果存储到id为pageBean的Javabean数据模型中,然后请求视图中的example7_8_pageShow.jsp页面负责分页显示pageBean的数据。example7_8.jsp和example7_8_pageShow.jsp的效果如图7.24(a)和图7.24(b)所示。,2022/12/20,64,例子7_8中的控制器,控制器(servlet)Example7_8_Servlet负责创建名字是queryAllServlet的servlet(见例子8前面web.xml文件的有关内容)。queryAllServlet查询数据库表中的全部记录,将结果存放到id是pageBean的Javabean数据模型中,然后用转发的方法请求example7_8_pageShow.jsp显示pageBean中的数据。,2022/12/20,65,7.10 常见数据库连接 7.10.1 .连接Microsoft SQL Server数据库,try Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);catch(Exception e),try String uri= jdbc:sqlserver:/192.168.100.1:1433;DatabaseName=warehouse; String user=sa; String password=dog123456; con=Driver