JSP中使用数据库1.ppt_第1页
JSP中使用数据库1.ppt_第2页
JSP中使用数据库1.ppt_第3页
JSP中使用数据库1.ppt_第4页
JSP中使用数据库1.ppt_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

第6章,配合例子源代码一起使用,Power point 制作:杨俊成,普通高等教育“十一五”国家级规划教材,JSP 中使用数据库,主要内容 JDBC 连接数据库的常用方式 查询记录 更新记录 添加记录 删除记录 用结果集更新数据库 预处理 事务 常见数据库连接 查询Excel电子表格 难点 用结果集更新数据库 预处理 事务 关键实践 查询记录 更新记录 删除记录,第6章导读,第6章 在JSP中使用数据库,本章将学习在JSP技术中怎样使用数据库,为了更好的体现一个Web应用将数据的处理和显示相分离,除个别例子为了说明基本知识外,本章大部分例子采用JSP+Tag模式,即JSP页面调用Tag文件来完成对数据库的操作。,6.1. SQL Server 2000数据库管理系统,本章选用SQLServer 2000数据库管理系统。 1 启动SQL Server 2000 单击“开始”“程序”“Microsoft SQL Server” “服务器管理器” 2 建立数据库 单击“开始”“所有程序”“Microsoft SQL Server” “企业管理器”,新建立的数据库名称是“Warehouse” 3 创建表 打开“企业管理器”,用鼠标单击“数据库”下的Warehouse数据库,在Warehouse管理的“表”的选项上单击右键,选择“新建表”,将出现相应的建表界面,我们建立的表是product,该表的字段(属性)为: number(char),name(char),madeTime(datetime),price(float).其中 “number”字段为主键.,6. 2. JDBC,JDBC(Java DataBase Connectivity)是Java运行平台的核心类库中的一部分,提供了访问数据库的API,它由一些Java类和接口组成。 JDBC操作不同的数据库仅仅是连接方式上的差异而已,使用JDBC的应用程序一旦和数据库建立连接,就可以使用JDBC提供的API操作数据库 .我们经常使用JDBC进行如下操作: 与一个数据库建立连接。 向已连接的数据库发送SQL语句。 处理SQL语句返回的结果。,6.3. 连接数据库的常用方式,1.一种常见方式是使用JDBC-ODBC桥接器: 2.另一种是加载Java数据库驱动程序,6.3.1 JDBC-ODBC桥接器_1,使用JDBC-ODBC桥接器方式的机制是,应用程序只需建立JDBC和ODBC之间的连接,而和数据库的连接由ODBC去完成。,6.3.1 JDBC-ODBC桥接器_2,使用JDBC-ODBC桥接器访问数据库的步骤: 建立JDBC-ODBC桥接器 try Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); catch(ClassNotFoundException e) out.print(e); 创建ODBC数据源 Windows控制面板_管理工具_ ODBC数据源 和ODBC数据源建立连接 Connection con= DriverManager.getConnection(“jdbc:odbc:数据源名字”,“登录名”,“密码”); 例6-1 P144,6.3.2 使用Java数据库驱动程序_1,用Java语言编写的数据库驱动程序称作Java数据库驱动程序。 JDBC可以调用本地的Java数据库驱动程序和相应的数据库建立连接 。,6.3.2 使用Java数据库驱动程序_2,使用纯Java驱动程序方式和数据库建立连接的两个步骤: 加载纯Java驱动程序(以连接SQL Server 2000为例) 连接SQL Server 2000用的纯Java驱动程序(从下载) sqljdbc_1.1.1501.101_enu.exe 安装后此文件后,在enu子目录中找到驱动文件sqljdbc.jar,将其复制到Tomcat所用的JDK的jrelibext文件夹中或Tomcat的安装目录commonlib中。 和指定的数据库建立连接 try Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver“); catch(Exception e) out.print(e); 例6-2 P146,6.4 访问数据库,Statement接口用于执行不带参数的简单SQL语句,用来向数据库提交SQL语句交返回SQL语句的执行结果。 创建一个Statement接口的一般形式如下: Connection con=DriverManager.getConnection(URL,“user“,“password“) Statement sm=con.createStatement();,Statement,创建了Statement接口的实例后,可调用其中的方法执行SQL语句,JDBC中提供了三种执行方法,它们是execute()、executeQuery()和executeUpdate()。 executeUpdate方法 :这个方法一般用于执行SQL的INSERT、UPDATE或DELETE语句,当执行INSERT等SQL语句时,此方法的返回值是执行了这个SQL语句后所影响的记录的总行数。,Statement,executeQuery方法 :一般用于执行SQL的SELECT语句。它的返回值是执行SQL语句后产生的一个ResultSet接口的实例(结果集)。 execute方法 :一般是在用户不知道执行SQL语句后会产生什么结果或可能有多种类型的结果产生时才会使用。execute()的执行结果包括如下三种情况: 1.包含多个ResultSet(结果集); 2.多条记录被影响; 3.既包含结果集也有记录被影响。,Statement,ResultSet,ResultSet 对象包含了Statement和PreparedStatement的executeQuery方法中SELECT查询的结果集,即符合指定SQL 语句中条件的所有行。 ResultSet.next 方法用于移动到 ResultSet 中的下一行,使下一行成为当前行。结果集一般是一个表,其中有查询所返回的列标题及相应的值。,检索数据库,课堂演示6.3:query.jsp通过SQL Server 2000 Driver For JDBC建立数据库连接,并查询product表中的前5种商品的编号、类型、名称、单价和数量。,更新数据库,insert.jsp提供输入表单供用户输入商品信息,do_insert.jsp通过SQL Server 2000 Driver For JDBC建立数据库连接后通过Statemen将商品信息插入到数据库中。convert.jsp在添加商品信息之前进行编码转换。,图6-19 do_insert.jsp运行结果,图6-18 insert.jsp运行结果,PreparedStatement,PreparedStatement接口是Statement接口的子接口,它直接继承并重载了Statement的方法。 PreparedStatement接口的常用方法见图6-5。,图6-5 PreparedStatement接口的常用方法,创建PreparedStatement对象形式如下: PreparedStatement psm=con.prepareStatement(“INSERT INTO users(u_name,u_pass) VALUES(?,?)“); 输入参数的赋值 PreparedStatement中提供了大量的setXXX方法对输入参数进行赋值。根据输入参数的SQL类型应选用合适的setXXX方法。,PreparedStatement,CallableStatement,创建CallableStatement的对象主要用于执行存储过程,可以使用DatabaseMetaData类中的有关方法去获取相关信息以查看数据库是否支持存储过程。 调用类Connection中的方法prepareCall可以创建一个CallableStatement的对象。一般形式如下: CallableStatement csm=con.prepareCall(“call test(?,?)“);,OUT参数类型注册的方法: 在执行一个存储过程之前,必须先对其中的OUT参数进行类型注册 。 CallableStatement提供两种方法进行类型注册: registerOutParamenter(int parameterIndex,int sqlType); registerOutParameter(int parameterIndex.,int sqlType,int scale);,CallableStatement,查询结果的获取 由于CallableStatement允许执行带OUT参数的存储过程,所以它提供了完善的getXXX方法来获取OUT参数的值。除了IN参数与OUT参数外,还有一种INOUT参数。INOUT参数具有其它两种参数的全部功能,可以用setXXX方法对参数值进行设置,再对这个参数进行类型注册,允许对此参数使用getXXX方法。执行完带此参数的SQL声明后,用getXXX方法可获取改变了的值。,CallableStatement,执行存储过程演示结果,6.5 元数据操作,DatabaseMetaData接口主要是用来得到关于数据库的信息。 DatabaseMetaData类的实例对象是通过Connection接口的getMetaData方法创建的。 DatabaseMetaData提供大量获取信息的方法,这些方法可分为两大类:一类返回值为boolean型,多用以检查数据库或驱动器是否支持某项功能;另一类则用获取数据库或驱动器本身的某些特征值,返回值可能为整型,可能为字符串型,甚至可能是ResultSet接口的对象。,DatabaseMetaData,DatabaseMetaData接口常见方法如图6-6所示。,图6-6 DatabaseMetaData接口的常用方法,ResultSetMetaData,ResultSetMetaData类用来获取数据库表的结构。 ResultSetMetaData接口的常用方法见图6-7。,图6-7 ResultSetMetaData接口的常用方法,6.6 查询记录,与数据库建立连接后,就可以使用JDBC提供的API和数据库交互信息,如查询、修改和更新数据库中的表等。对一个数据库中表进行查询操作的具体步骤: 创建SQL语句对象 try Statement sql=con.createStatement(); catch(SQLException e ) System.out.println(e); 处理查询结果 sql对象可以调用相应的方法实现对数据库中表的查询和修改,并将查询结果存放在一个ResultSet类声明的对象中。 ResultSet rs=sql.executeQuery(“SELECT * FROM 表名”); ResultSet对象使用next()方法一次看到一个数据行,用getXxx (索引或字段名)方法获取字段值。 注: P148 注意内容。,6.6.1 顺序查询,如何知道一个表中有哪些字段? 1.与数据库建立的连接对象con调方法getMetaData返回一个DatabaseMetaData对象. DatabaseMetaData metadata=con. getMetaData(); 2. Metadata对象再调用getColumns()方法可以将表的字段信息以行列的形式存储在一个ResultSet对象中。 ResultSet tableMessage= metadata. getColumns(null,null, “employee“,null); 表的字段信息以行列的形式存储在tableMessage对象中. 该对象使用next()方法和getXxx (索引)方法查看该行中信息,第4列是字段名。 例6-3 P149,6.6.2 随机查询,为了在结果集中可以前后移动,随机显示若干记录,必须要返回一个可滚动的结果集。 Statement stmt=con. createStatement(int type,int concurrency); ResultSet re=stmt. executeQuery(SQL语句); int type,int concurrency取值情况及ResultSet常用方法见p151。 例6-4 P152,6.6.3 条件查询,在JSP页面中输入查询条件,Tag文件可以根据JSP提交的条件进行查询。 例6-5 P155,6.6.4 排序查询,可以在SQL语句中使用ORDER BY子语句,对记录排序。在JSP页面中输入排序方式, Tag文件可以根据JSP提交的数据进行排序查询。 例6-6 P158,6.6.5 模糊查询,在JSP页面中输入模糊查询条件,Tag文件可以根据JSP提交的条件进行模糊查询。 在SQL语句中用like进行模式匹配,% 代替零个或多个字符,下划线代替一个字符等。 比如,下述语句查询产品名称中含有“机”的记录: rs=sql.executeQuery(“SELECT * FROM product WHERE name LIKE %机%“); 下述语句查询产品名称中含有“电”或“手”的记录: rs=sql.executeQuery(“SELECT * FROM product WHERE name LIKE %电手% ”); 例6-7 P160,6.7 更新记录,可以使用SQL语句更新记录中字段的值。 Statement对象调用方法: public int executeUpdate(String sqlStatement); 通过参数sqlStatement指定的方式实现对数据库表中记录的字段值更新。 例如: executeUpdate(“UPDATE product SET price = 6866 WHERE name=海尔电视机“); 例6-8 P163,6.8 添加记录,可以使用SQL语句添加新的记录。 Statement对象调用方法: public int executeUpdate(String sqlStatement); 通过参数sqlStatement指定的方式实现向数据库表中添加新的记录。 例如: executeUpdate(“INSERT INTO students VALUES (012,神通手机,2010-2-26,2687)“); 例6-9 P164,6.9 删除记录,可以使用SQL语句删除记录。 Statement对象调用方法: public int executeUpdate(String sqlStatement); 删除数据库表中的记录。 例如: executeUpdate(“DELETE FROM product WHERE number = 888 “); 例6-10 P167,6.10 用结果集操作数据库中的表,可以使用内存中ResultSet对象对底层数据库表进行更新和插入操作。前提是要事先返回结果集。 Connnection con= DriverManager.getConnection(“jdbc:odbc:mystar“,“,“); Statement sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet rs=sql.executeQuery(“SELECT * FROM product“); 1。更新记录中的列值 结果集rs的游标移动到第n行 rs.absolute(n); 结果集将第n行的p列的列值更新 updateInt(String columnName, int x)更多方法见p168 更新数据库中的表 rs.absolute(3); rs.updateString(“name“, “IBM笔记本“); rs.updateRow(); 2。插入记录 结果集rs的游标移动到插入行 rs.moveToInsertRow(); 更新插入行的列值updateXXX() rs.updateString(2, “神通手机“); 插入记录 insertRow() 例6-11 P169,6.11 预处理语句,1。预处理语句优点 对于JDBC,如果使用Connection和某个数据库建立了连接对象con,那么con就可以调用方法对参数sql指定的SQL语句进行预编译处理,生成该数据库底层的内部命令,并将该命令封装在PreparedStatement对象pre中 PreparedStatement pre=con.prepareStatement(String sql); 对象pre可以随时地执行下述方法,提高访问数据库的速度。 ResultSet executeQuery() boolean execute() int executeUpdate() 2。使用统配符 在对SQL进行预处理时可以使用统配符“?”来代替字段的值,只要在预处理语句执行之前再设置统配符所表示的具体值即可。例如: pre=con.prepareStatement(“SELECT * FROM product WHERE price ? “); pre.setDouble(1,6565);(设置统配符“?”的值) 的功能等同于 pre=con.prepareStatement(“SELECT * FROM message WHERE price 6565 “); 预处理语句设置统配符“?”的值的常用方法见p173. 例6-12, 6-13 P171,6.12 事务,事务由一组SQL语句组成,所谓“事务处理”是指:应用程序保证事务中的SQL语句要么全部都执行,要么一个都不执行。 事务是保证数据库中数据完整性与一致性的重要机制。JDBC事务处理步骤如下: 1。setAutoCommit(boolean autoCommit)方法 为了能进行事务处理,必须关闭连接对象 con的默认设置。 con.setAutoCommit(false); 2. commit()方法 连接对象 con调用commit()方法就是让事务中的SQL语句全部生效。 mit(); 3. rollback()方法 连接对象 con调用rollback()方法,撤消事务中成功执行过的SQL语句对数据库数据所做的更新、插入或删除操作,即撤消引起数据发生变化的SQL语句操作,将数据库中的数据恢复到commi()方法执行之前的状态。 con. rollback(); 例6-4 P176,6.13 常见数据库连接,6.13.1 连接Oracle数据库,下面介绍通过直接加载Oracle的Java数据库驱动程序来连接数据库的方法。 安装Oracle后,找到目录Oracle/ora81/jdbc中的classes.jar(classes12.zip),即用java编写Oracle数据库驱动程序。将classes.jar复制到Tomcat引擎所使用的JDK的扩展目录中。通过如下的两个步骤和一个Oracle数据库建立连接。 1.加载驱动程序 Class.forName(“oracle.jdbc.driver.OracleDriver“); 2.建立连接 Connection con= DriverManager.getConnection( “jdbc:oracle:thin:主机host:端口号:数据库名“, ”用户名“, ”密码“); 例6-15 P177,6.13.2 连接Access数据库,Access也是比较流行的一种数据库管理系统,操作简单、使用方便。一些规模不大的Web应用经常使用Access数据库数据库管理系统。 下面介绍使用JDBC-ODBC桥接器方式连接Access数据库。 1.建立JDBC-ODBC桥接器 try Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); catch(ClassNotFoundException e) out.p

温馨提示

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

评论

0/150

提交评论