1 / 49

第 9 章 JSP 与数据库

第 9 章 JSP 与数据库. 9.1 SQL 语言简介 9.2 JDBC 简介 9.3 使用 JDBC 连接数据库 9.4 访问数据库 9.5 数据库访问应用举例. 9.1 SQL 语言简介. 将系统讲述在 JSP 中最常用到的语句如下: ( 1 ) Select 语句 —— 查询数据; ( 2 ) Insert 语句 —— 添加记录; ( 3 ) Delete 语句 —— 删除记录; ( 4 ) Update 语句 —— 更新记录。 注意: SQL 语句不区分大小写. 9.1.1 Select 语句

ursala
Download Presentation

第 9 章 JSP 与数据库

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第 9 章 JSP与数据库 • 9.1 SQL语言简介 • 9.2 JDBC简介 • 9.3 使用JDBC连接数据库 • 9.4 访问数据库 • 9.5 数据库访问应用举例

  2. 9.1 SQL语言简介 • 将系统讲述在JSP中最常用到的语句如下: • (1)Select语句——查询数据; • (2)Insert语句——添加记录; • (3)Delete语句——删除记录; • (4)Update语句——更新记录。 • 注意:SQL语句不区分大小写

  3. 9.1.1 Select语句 • SQL语言的主要功能之一是实现数据库查询,其Select语句可以从数据库中查询满足特定条件的有关记录。Select语句的语法如下: • Select[Top(数据)]字段列表From表[Where条件][Order By字段][Group By字段]

  4. ① Top(数据) • ② 字段列表 • ③ 表 • ④ 条件 • ⑤ Order By • ⑥ Group By

  5. 下列举一些常见的例子说明。 • (1)选取全部数据 • Select*From users • (2)选取指定字段的数据 • 如果只想选取列表中某些字段的数据,在Select后面指定字段,可以指定多个列,但每个列之间必须用逗号隔开。 • Select real_name, email From users

  6. (3)只选取前若干条记录 • 比如选取前3条记录: • Select Top (3)* From users • (4)用表中原有的字段产生派生字段 • 有时候为了需要,可以利用一列或若干列产生一个新的字段。例如,在上面建立的用户数据库中,可以显示客户注册一年后的日期: • Select real _ name, (submit _ date+365) As new _ date From users

  7. (5)根据条件选取数据 • 比如选取2003年11月1日之前注册的用户: • Select * From users Where submit _ date<#2003-11-1#

  8. 表9-1 条件连接符

  9. (6)按关键字查找记录 • 有时候查找条件可能不太精确,比如,要查询所有姓名中“勇”字的用户: • Select * From users Where real _ name like “%勇%”

  10. (7)查询结果排序 • 在查询表中数据时,特别是表中数据较多时,总是希望表中的数据能够按照我们要求的顺序显现出来,利用Order By就可以实现。例如,将查询结果按姓名升序排列: • Select * From users Order By real _ name ASC

  11. (8)查询满足条件的记录的总数 • Select Count (*) As total From users Where submit _ date<#2003-11-1# • (9)组合查询 • Select users.real_name, day_log.log_date,day_log.IP From users, day_log Where users.user_ name=day_log.user_name

  12. 在选取各个表的字段时,要标明是哪个表的字符。 • ② 用到的两个表之间用逗号隔开。 • ③ 在两个表连接时,用到users.user_name=pday_log.user_name条件,表示根据两个表中的user_name字段将两个表合成一个表。 • ④ 这只是最简单的组合查询,还有左连接、右连接等,请参考专门的SQL参考书籍。

  13. (10)利用Group By分类合并 • 假如有一个学生成绩表usergrade,字段有user_name(学号)和grade(学分)和class(班级),现在要求每个班级的总分和平均分: • Select Sum(grade) As total_grade, Average (grade) As average_grade From usergrade Group By class

  14. 9.1.2 Insert语句 • Insert Into表(字段1,字段2,…)Values(字段1的值,字段2的值,…) • 下面举一些常见的例子说明。 • (1)只插入user_name字段 • Insert Into users (user_name) Values ("liya") • (2)只插入user_name和real_name字段 • Insert Into users (user_name , real_name) Values ("feiyun", "费云")

  15. (3)只插入user_name和submit_date字段 • Insert Into users (user_name, submit_date) Values ("luofang",#2003-12-5#) • (4)假如在users表中增加一条完整的记录 • Insert Into users (user_name, age) Values ("zhangpen",23) • (5)在users表中增加一条完整的记录 • Insert Into users (user_name, password, real_name, tel, email, submit_date) Values ("mengment", "123456", "萌萌", "6887150", "mengmeng@henan.com", #2003-11-2#)

  16. 下面举几条经常出错的Insert语句。 • (1)user_name 是主键,但没有赋值 • Insert Into users (real_name) Values ("涂涂") • (2)real_name 字段不允许空字符串,却赋了空字符串(两个双引号表示空字符串) • Insert Into users (user_name, real_name) Values ("tutu" "") • (3)字符串字段两边没有加双引号 • Insert Into users (user_name, real_name) Values ("tutu",涂涂)

  17. 9.1.3 Delete • 在SQL语言中,可以使用Delete语句删除表中无用的记录。其语法如下: • Delete From表[Where条件] • 下面举一些常用的例子。 • (1)删除user_name为“tutu”的用户。 • (2)删除2003年1月1日前注册,且real_name为“李亚”的用户。 • (3)删除表中所有数据

  18. 9.1.4 Update语句 • Update数据表名Sel字段1=字段值1,字段2=字段值2,…[Where条件] • (1)修改user_name为“jjshang”的用户的电话和E-mail地址。 • (2)将所有2003年1月1日前注册的用户的注册日期统一更改为2003年1月1日。 • (3)若有年龄字段age,将所有人的年龄增加10岁。

  19. 9.2 JDBC简介 • JDBC(Java DataBase Connectivity,中文意为Java数据库连接)是在Java中用面向对象的方法来连接数据库的技术。 • 9.2.1 什么是JDBC

  20. 1.JDBC的主要类包 • (1)java.sql包,提供在Java中访问和处理存储于客户端数据源中数据的API。 • (2)javax.sql包,提供在Java中对服务器端数据源进行访问和处理的API。

  21. 2.JDBC可访问的数据源 • (1)关系型数据库,如:Oracle,DB2,SQL Server,My SQL,Access等。 • (2)电子数据表格,如:Excel等。 • (3)平面数据文件,如:DBase,Foxpro,Paradox等。 • 3.JDBC的驱动程序

  22. 9.2.2 使用JDBC的访问数据库的方法 • 1.JDBC实现对数据库访问与操作的步骤 • (1)建立与数据源的连接。 • (2)发送查询、更新等SQL语句到数据源。 • (3)处理由SQL语句得到的结果。2.JDBC访问数据库的简单例子

  23. 9.2.3 JDBC支持的数据访问模式 • 1.两层模型 • 2.三层模型

  24. 图9-1 两层数据访问模型图

  25. 图9-2 三层数据访问模型

  26. 9.3 使用JDBC连接数据库 • 9.3.1 JDBC连接数据库的方法 • 1.Java程序连接数据库的4种方法 • Java 程序连接数据库的方法实际上有下面4种。

  27. (1)JDBC-ODBC桥和ODBC驱动程序。 • (2)本机代码和Java驱动程序。 • (3)JDBC网络的纯Java驱动程序。 • (4)本机协议纯Java驱动程序。 • 2.连接数据库4种方法的性质

  28. 表9-2 JDBC连接数据库的4种方法

  29. 9.3.2 建立数据库连接 • 1.建立连接的基本步骤 • (1)加载要使用的数据库驱动程序类,该工作由Class类的静态方法forName完成,它加载相应的驱动程序类,并创建该类的一个实例。如要加载JDBC-ODBC桥驱动类采用如下语句: • Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

  30. (2)声明一个Connection接口的对象。如: • Connection conn; • (3)并使用driverManager类的静态方法getConnection建立数据库连接,该方法主要有两种重载形式: • Connection getConnection(String url) • Connection getConnection(String url,String user,String password)

  31. 2.JDBC URL字符串 • (1)JDBC URL字符串语法格式 • ① jdbc • ② <subprotocol> • ③ <subname> • (2)JDBC URL字符串的例子

  32. 9.3.3 使用JDBC-ODBC桥的连接应用 • 1.使用JDBC-ODBC桥建立“数据源名称”的步骤 • (1)打开Windows的控制面板,选择“ODBC”设置程序

  33. (2)打开该程序后,选择“系统DSN”选项卡建立系统的ODBC数据源(2)打开该程序后,选择“系统DSN”选项卡建立系统的ODBC数据源 • (3)单击“添加”按钮添加新的系统DSN • (4)在图9-5所示的对话框中选择适当的ODBC驱动程序,此处选择Microsoft Access Driver(*.MDB),然后按“完成”按钮 • (5)在图9-6中设置“数据源名”,并按“选择”按钮选择特定的数据库。 • (6)单击“确定”按钮完成ODBC DSN的建立。 • 2.编写JDBC-ODBC桥连接数据库的代码

  34. 9.3.4 使用JDBC桥直接连接数据库应用 • 9.3.5 关闭与数据库的连接

  35. 9.4 访问数据库 • java.sql包中与数据库操作有关的接口主要有以下几个: • (1)Connection • (2)Statement • (3)PreparedStatement • (4)CallableStatement • (5)ResultSet

  36. 9.4.1 使用SQL语句对数据库进行操作 • 1.查询操作 • 2.获取结果集的字段

  37. 表9-3 Result接口获取字段的get方法

  38. 3.记录的插入、删除和更新操作 • 4.使用带参数的SQL语句 • (1)set方法组 • (2)clearParameters()方法 • (3)executeQuery()方法 • (4)executeUpdate()方法

  39. 9.4.2 使用ResultSet对象对数据库进行操作 • 1.结果集的游标操作 • (1)使用get或update方法组对当前记录的字段进行操作。 • (2)使用insertRow、deleteRow和updateRow等方法对整条记录进行操作。 • (3)以当前记录为起点进行游标的相对移动操作。

  40. 表9-4 ResultSet的游标操作

  41. 2.结果集的类型 • Statement createStatement(int resultSetType,int resultSetConcurrency) • (1)resultSetType定义了结果集的类型 • (2)resultSetConcurrency决定结果集的更新方式

  42. 3.使用结果集对表进行操作 • (1)更新操作 • ① update方法组 • ② updateRow()方法 • ③ cancelRowUpdates()方法

  43. (2)插入操作 • ① 使用moveToInsertRow()方法将游标移动到插入行。 • ② 使用update方法组对插入行的字段进行赋值。 • ③ 使用insertRow()方法向数据库的表提交插入操作。 • (3)删除操作

  44. 9.4.3 数据库的高级操作 • 1.批量操作 • 实现批量操作需要使用Statement对象的下面3个方法。 • (1)void addBatch(String sql),向Statement对象添加SQL语句。 • (2)int[] executeBatch(),向数据库提交Statement对象中的SQL语句,SQL语句的执行情况以整型数组返回,数组元素的顺序与SQL语句的顺序一致。 • (3)void clearBatch(),清空Statement对象的SQL语句列表。

  45. 2.事务处理 • (1)setAutoCommit(Boolean) • (2)commit() • (3)rollback()

  46. 3.调用数据库的存储过程 • JDBC的CallableStatement对象提供了调用关系数据库的存储过程的标准方法。CallableStatement对象使用call命令调用存储过程,call命令的语法形式如下,其中的问号代表存储过程的参数。 • {[? = ]call storedProcedure_name[(?, ?, ...)]}

  47. 创建CallableStatement对象使用Connection对象的prepareCall方法。下面的语句创建了一个CallableStatement对象。 创建CallableStatement对象使用Connection对象的prepareCall方法。下面的语句创建了一个CallableStatement对象。 • CallableStatement cst; • cst = conn.prepareCall("{call getTestData(?, ?)}");

  48. 存储过程的参数有3种:输入参数、输出参数和输入输出参数。每种参数的作用不同,使用的方法也有所不同。 存储过程的参数有3种:输入参数、输出参数和输入输出参数。每种参数的作用不同,使用的方法也有所不同。 • (1)输入参数,用于在调用存储过程时向存储过程传入数据。 • (2)输出参数,用于返回存储过程执行后的结果。 • (3)输入输出参数,同时具有输入参数和输出参数的功能。

  49. 9.5 数据库访问应用举例 • 9.5.1 JavaApplet访问数据库应用 • 9.5.2 JavaApplication访问数据库应用实例

More Related