资源预览内容
第1页 / 共38页
第2页 / 共38页
第3页 / 共38页
第4页 / 共38页
第5页 / 共38页
第6页 / 共38页
第7页 / 共38页
第8页 / 共38页
第9页 / 共38页
第10页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第3章,在JSP中实现数据库操作,基于MVC的JSP软件开发,本章任务,通过案例引导的方式,掌握JSP中操作数据库 案例3-1:编写Java程序访问并显示数据库中的用户的信息 案例3-2:在JSP中编写Java代码显示数据库中的用户信息 案例3-3:编写Java类封装数据库处理代码,以供JSP等程序复用 案例3-4:查询3号操作员的信息 案例3-5:用户输入一个用户id,查询该id的用户信息并显示出来 案例3-6:综合运用前面学习的实现技术,编写程序实现对用户信息进行增加、删除、修改、信息显示的操作,熟练掌握对MySQL数据库的建库、建表与对数据的操作 了解用Java语言对MySQL数据库的访问的编码实现 熟练掌握在JSP网页中编码对MySQL中数据的访问操作 熟练掌握通用的创建数据连接类的创建及在JSP中的应用 熟练掌握用JSP开发数据库应用程序(包括对数据库的增、删、改、查询操作)的方法与过程,本章目标,3.1 Java程序访问数据库,应用程序中常常有对数据库的操作,即需要将处理的业务数据存储在数据库中,然后通过程序对其进行操作处理。 在Java程序设计的课程中一般会介绍采用JDBC方式连接数据库,并通过该连接实现对数据库的操作。 类似Java语言,JSP程序中也能对数据库进行操作与数据显示。,1. 数据库运行环境介绍,本书采用免费的数据库系统MySQL软件; 为了用Java访问数据库,本教程采用如下数据库环境: 1)MySQL数据库管理系统作为数据库服务器; 2)采用MySQL-Front或Navicat for MySQL作为MySql数据库客户端软件; 3)MySQL驱动程序为mysql-connector-java-5.1.5-bin.jar(或其他版本)。,2. 编写Java程序访问MySQL数据库,【案例3-1】编写Java程序访问并显示数据库中的用户的信息。 案例实现准备: 安装好了MySQL数据库 安装好MySQL客户端程序 下载或准备好了MySQL的JDBC驱动程序 创建好数据库及表,案例3-1实现,1建立被访问的数据环境 用数据库客户端建立MySQL数据库:mydatabase,编码为utf-8(支持中文);再建立一个学生表:user,并向其中添加二个用户信息。 应运行的结果显示:,案例3-1实现,2创建项目并加载JDBC驱动程序 首先创建一个Web项目如:myweb,在其中创建一个java类如命名为:researchdb.java 在项目中加载JDBC驱动程序,有两种方法: 1)直接将驱动程序mysql-connector-java-5.1.5-bin.jar复制到项目myweb的WebRootWeb-INFlib文件夹中。 2)在MyEclipse中鼠标右击myweb项目名,依次选择Bulid Path-Add External Archives,在出现的对话框中寻找到自己存放的驱动程序mysql-connector-java-5.1.5-bin.jar,并打开。,通过“复制” 到项目lib文件夹中加载驱动程序,案例3-1实现,3编写访问数据库Java程序:researchdb.java public class researchdb public static void main(String args) throws Exception try Class.forName(com.mysql.jdbc.Driver); /注册Mysql驱动 /获取数据库连接,设置数据库名为mydatabase, Connection conn = DriverManager.getConnection(jdbc:mysql:/localhost:3306/mydatabase, root, root); Statement stat = conn.createStatement(); /创建Statement对象,准备执行SQL语句 ResultSet rs = stat.executeQuery(select * from user);/执行SQL while (rs.next() /显示结果集对象中的数据 System.out.print(rs.getString(name) + ); System.out.println(rs.getString(password); rs.closs(); /释放资源 stat.closs(); conn.closs(); catch (Exception e) e.printStackTrace(); ,案例3-1,4. 代码(researchdb.java)解释 1)在Java程序中加载驱动程序 Class.forName(“com.mysql.jdbc.Driver”); 2)创建数据连接对象 Connection conn= DriverManager.getConnection(“连接数据库的URL, 用户名, 密码”) ; 3)创建Statement对象 Statement stat =conn.createStatement(); 4) 调用Statement对象的相关方法执行相对应的 SQL 语句 ResultSet rs = stat.executeQuery(select * from user); 然后才可以对rs中被访问出的数据对象进行操作。,案例3-1,在Java程序中访问数据库注意事项: 要在项目中加载MySQL的JDBC驱动程序; 在编写Java代码时,注意import语句的正确创建(可用ctrl+shift+O快捷键生成); 访问数据库语句要用try catch()语句包含起来。,3.在JSP中编写Java代码段访问数据库,【案例3-2】在JSP中编写Java代码显示数据库中的用户信息。 将案例3-1中的Java代码以的形式放到JSP文件中,则可以在JSP中访问并显示数据库中的数据。,案例3-2,在JSP中显示数据库的数据,其实只要在案例3-1的基础上做简单的修改: 1)创建JSP文件,如:researchdb.jsp。 2)将案例3-1中的java代码中try- catch中的代码,以的形势放到JSP的 标记中。 3)将,java.sql.*加到import语句中,即该语句改为:import=java.util.*,java.sql.*。 4)将System.out.print语句改为out.print语句。 然后部署该项目,启动服务器后运行,则在JSP中显示了数据库中的数据。,3.2 封装数据库处理类的创建,从案例3-2中可以看出,JSP文件实现了数据库的操作。但是上述JSP对数据库的操作有如下一些缺陷: 1)代码累赘,大量的Java代码段在JSP中,显得JSP文件复杂且不利于修改; 2)代码重用性差,因为每个JSP都需要进行相同的重复操作,不利于代码复用; 3)影响性能,由于通过JSP进行数据库连接操作,需要从客户端到服务器端交互,影响软件的性能; 4)安全性差,用户的验证代码在客户端的JSP程序中,具有不安全性; 5)连接数据库的代码大量冗余,不利于系统维护。 如果采用用Java类进行封装,在JSP需要的时候进行调用,则可以改进上述存在的这些问题。,案例3-3,【案例3-3】编写Java类封装数据库处理代码,以供JSP等程序复用。 为了改善对数据库访问的JSP代码,可将程序分为四个部分: 1)封装数据库连接的共享Java类(共享工具类); 2)封装数据的Java类(实体类); 3)封装业务处理的Java类(模型类); 4)JSP主程序(主控程序)。,案例3-3,1封装获取数据库类的编写 package dbutil; public class Dbconn public Connection getConnection() throws SQLException/获取连接方法 private Connection conn; try Class.forName(com.mysql.jdbc.Driver); conn=DriverManager.getConnection(jdbc:mysql:/localhost:3306/mydatabase,root,); catch (ClassNotFoundException e) System.out.println(找不到服务!); e.printStackTrace(); return conn; ,案例3-3,2编写封装数据的实体类 public class User private int id; private String name; private String password; public int getId() return id; public void setId(int id) this.id = id; 其他Setter/Getter方法 ,案例3-3,3编写封装业务处理的类 public class Model private Statement stat; private ResultSet rs; Dbconn s=new Dbconn(); /定义返回查询处理后获取的对象集合并返回 public List userSelect() List users=new ArrayList(); try Connection conn=s.getConnection(); String sql=select * from user; stat=conn.createStatement(); rs = stat.executeQuery(sql); User user; while(rs.next() user=new User(); user.setId(rs.getInt(id); user.setName(rs.getString(name); user.setPassword(rs.getString(password); users.add(user); s.closeAll(conn,stat,rs); catch (SQLException e) e.printStackTrace(); return users; ,案例3-3,4JSP主程序的编写 list=model.userSelect(); /执行模型中查询方法,并返回结果 % 数据库中所有用户 /循环显示获得的结果(用户信息) /从集合中取出对象的属性进行显示 ,案例3-3,运行结果,3.3 数据库交互操作的实现,固定的数据库访问语句,例如前面案例的码如: Statement stat = conn.createStatement(); ResultSet rs = stat.executeQuery(select * from user); 上述代码的特点是,访问语句固定,访问的结果数据也会固定,即不会根据用户的要求改变(否则要修改程序代码)。 改变策略:在SQL语句中增加参数,参数的值会根据执行前的需要设定不同的值。这时,要用到预处理对象: PreparedStatement对象,1. PreparedStatement对象,由Statement对象定义并执行的sql称为静态sql语句; 由PreparedStatement对象定义与执行的是动态sql语句。 它使用预编译sql语句,该sql语句中允许有一个或多个输入参数(用“?”号表示)。 在执行带参数的sql语句前,必须对“?”进行赋值。为了对“?”赋值。 PreparedStatement对象中由setXXX方法完成对输入参数的赋值。 利用PreparedStatement 对象可实现用户对数据库的交互操作。,案例3-4,【案例3-4】查询3号操作员的信息
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号