第 9 章 JSP 与数据库

49
9 9 JSP JSP 第第第第 第第第第 9.1 9.1 SQL SQL 第第第第 第第第第 9.2 9.2 JDBC JDBC 第第 第第 9.3 第第 9.3 第第 JDBC JDBC 第第第第第 第第第第第 9.4 第第第第第 9.4 第第第第第 9.5 9.5 数数数数数数数数数 数数数数数数数数数

description

第 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 语句 - PowerPoint PPT Presentation

Transcript of 第 9 章 JSP 与数据库

Page 1: 第 9 章   JSP 与数据库

第 第 9 9 章 章 JSPJSP 与数据库与数据库

9.1 9.1 SQLSQL语言简介 语言简介 9.2 9.2 JDBCJDBC简介 简介 9.3 使用9.3 使用JDBCJDBC连接数据库连接数据库9.4 访问数据库 9.4 访问数据库 9.5 9.5 数据库访问应用举例数据库访问应用举例

Page 2: 第 9 章   JSP 与数据库

9.1 SQL9.1 SQL 语言简介 语言简介 将系统讲述在将系统讲述在 JSPJSP 中最常用到的语句如下:中最常用到的语句如下:(( 11)) SelectSelect 语句语句————查询数据;查询数据;(( 22)) InsertInsert 语句语句————添加记录;添加记录;(( 33)) DeleteDelete 语句语句————删除记录;删除记录;(( 44)) UpdateUpdate 语句语句————更新记录。更新记录。注意:注意: SQLSQL 语句不区分大小写语句不区分大小写

Page 3: 第 9 章   JSP 与数据库

9.1.1 Select9.1.1 Select 语句语句SQLSQL 语言的主要功能之一是实现数据库语言的主要功能之一是实现数据库

查询,其查询,其 SelectSelect 语句可以从数据库中查询满语句可以从数据库中查询满足特定条件的有关记录。足特定条件的有关记录。 SelectSelect 语句的语法语句的语法如下:如下:

Select[Top(Select[Top( 数据数据 )])] 字段列表字段列表 FromFrom表表[Where[Where 条件条件 ][Order By][Order By 字段字段 ][Group By][Group By 字字段段 ]]

Page 4: 第 9 章   JSP 与数据库

① ① TopTop (数据)(数据)② ② 字段列表字段列表③ ③ 表表④ ④ 条件条件

⑤ ⑤ Order ByOrder By

⑥ ⑥ Group ByGroup By

Page 5: 第 9 章   JSP 与数据库

下列举一些常见的例子说明。下列举一些常见的例子说明。(( 11 )选取全部数据)选取全部数据 Select*From usersSelect*From users

(( 22 )选取指定字段的数据)选取指定字段的数据如果只想选取列表中某些字段的数据,在如果只想选取列表中某些字段的数据,在SelectSelect 后面指定字段,可以指定多个列,后面指定字段,可以指定多个列,但每个列之间必须用逗号隔开。但每个列之间必须用逗号隔开。 Select real_name, email From usersSelect real_name, email From users

Page 6: 第 9 章   JSP 与数据库

(( 33 )只选取前若干条记录)只选取前若干条记录比如选取前比如选取前 33 条记录:条记录: Select Top (3)* From usersSelect Top (3)* From users

(( 44 )用表中原有的字段产生派生字段)用表中原有的字段产生派生字段有时候为了需要,可以利用一列或若干列产有时候为了需要,可以利用一列或若干列产生一个新的字段。例如,在上面建立的用户生一个新的字段。例如,在上面建立的用户数据库中,可以显示客户注册一年后的日期:数据库中,可以显示客户注册一年后的日期: Select real _ name, (submit _ date+365) As Select real _ name, (submit _ date+365) As new _ date From usersnew _ date From users

Page 7: 第 9 章   JSP 与数据库

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

Page 8: 第 9 章   JSP 与数据库

= 等 于<> 不等于> 大于>= 大于等于< 小于<= 小于等于Not 非And 与Or 或Between 介于Not Between 不介于In 列的数据值位于所列的范围内Not In 列的数据值不位于所列的范围内Is NULL 列的数据值为 NULL

Is Not NULL 列的数据值不为 NULL

表 9-1 条件连接符

Page 9: 第 9 章   JSP 与数据库

(( 66 )按关键字查找记录)按关键字查找记录有时候查找条件可能不太精确,比如,有时候查找条件可能不太精确,比如,

要查询所有姓名中“勇”字的用户:要查询所有姓名中“勇”字的用户: Select * From users Where real _ name Select * From users Where real _ name like “%like “%勇勇%”%”

Page 10: 第 9 章   JSP 与数据库

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

Page 11: 第 9 章   JSP 与数据库

(( 88 )查询满足条件的记录的总数)查询满足条件的记录的总数 Select Count (*) As total From users Where Select Count (*) As total From users Where submit _ datesubmit _ date<< #2003-11-1##2003-11-1#

(( 99 )组合查询)组合查询Select users.real_name, Select users.real_name, day_log.log_date,day_log.IP From users, day_log.log_date,day_log.IP From users, day_log Where users.user_ day_log Where users.user_ name=day_log.user_namename=day_log.user_name

Page 12: 第 9 章   JSP 与数据库

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

Page 13: 第 9 章   JSP 与数据库

(( 1010 )利用)利用 Group ByGroup By 分类合并分类合并假如有一个学生成绩表假如有一个学生成绩表 usergradeusergrade ,字段,字段

有有 user_nameuser_name (学号)和(学号)和 gradegrade (学分)和(学分)和classclass (班级),现在要求每个班级的总分和(班级),现在要求每个班级的总分和平均分:平均分:Select Sum(grade) As total_grade, Average Select Sum(grade) As total_grade, Average (grade) As average_grade From usergrade (grade) As average_grade From usergrade Group By classGroup By class

Page 14: 第 9 章   JSP 与数据库

9.1.2 Insert9.1.2 Insert 语句语句 Insert IntoInsert Into表表 (( 字段字段 11 ,字段,字段 22,,…… )Values()Values( 字字段段 11 的值,字段的值,字段 22 的值,的值,…… ))

下面举一些常见的例子说明。下面举一些常见的例子说明。(( 11 ))只插入只插入 user_nameuser_name 字段字段 Insert Into users (user_name) Values ("liya")Insert Into users (user_name) Values ("liya")

(( 22 ))只插入只插入 user_nameuser_name和和 real_namereal_name 字段字段 Insert Into users (user_name , real_name) Insert Into users (user_name , real_name) Values ("feiyun", "Values ("feiyun", " 费云费云 ")")

Page 15: 第 9 章   JSP 与数据库

(( 33 ))只插入只插入 user_nameuser_name和和 submit_datesubmit_date 字段字段 Insert Into users (user_name, submit_date) Values Insert Into users (user_name, submit_date) Values ("luofang",#2003-12-5#)("luofang",#2003-12-5#)

(( 44 ))假如在假如在 usersusers 表中增加一条完整的记录表中增加一条完整的记录 Insert Into users (user_name, age) Values Insert Into users (user_name, age) Values ("zhangpen",23)("zhangpen",23)

(( 55 ))在在 usersusers 表中增加一条完整的记录表中增加一条完整的记录 Insert Into users (user_name, password, real_name, Insert Into users (user_name, password, real_name, tel, email, submit_date) Values ("mengment", tel, email, submit_date) Values ("mengment", "123456", ""123456", " 萌萌萌萌 ", "6887150", ", "6887150", "[email protected]", #2003-11-2#)"[email protected]", #2003-11-2#)

Page 16: 第 9 章   JSP 与数据库

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

Page 17: 第 9 章   JSP 与数据库

9.1.3 Delete9.1.3 Delete在在 SQLSQL 语言中,可以使用语言中,可以使用 DeleteDelete 语句删语句删

除表中无用的记录。其语法如下:除表中无用的记录。其语法如下:Delete FromDelete From表表 [Where[Where 条件条件 ]]

下面举一些常用的例子。下面举一些常用的例子。(( 11 ))删除删除 user_nameuser_name 为“为“ tutu”tutu” 的用户。的用户。(( 22 ))删除删除 20032003年年 11月月 11 日前注册,且日前注册,且real_namereal_name 为“李亚”的用户。为“李亚”的用户。(( 33 ))删除表中所有数据删除表中所有数据

Page 18: 第 9 章   JSP 与数据库

9.1.4 Update9.1.4 Update 语句语句 UpdateUpdate 数据表名数据表名 SelSel 字段字段 1=1= 字段值字段值 11 ,,字段字段 2=2= 字段值字段值 22,,…… [Where[Where 条件条件 ]]

(( 11 ))修改修改 user_nameuser_name 为“为“ jjshang”jjshang” 的用户的用户的电话和的电话和 E-mailE-mail 地址。地址。(( 22 ))将所有将所有 20032003年年 11月月 11 日前注册的用户日前注册的用户的注册日期统一更改为的注册日期统一更改为 20032003年年 11月月 11 日。日。(( 33 ))若有年龄字段若有年龄字段 ageage ,将所有人的年龄增,将所有人的年龄增加加 1010 岁。岁。

Page 19: 第 9 章   JSP 与数据库

9.2 JDBC9.2 JDBC 简介 简介 JDBCJDBC(( Java DataBase ConnectivityJava DataBase Connectivity ,,

中文意为中文意为 JavaJava 数据库连接)是在数据库连接)是在 JavaJava 中中用面向对象的方法来连接数据库的技术。用面向对象的方法来连接数据库的技术。

9.2.1 9.2.1 什么是什么是 JDBCJDBC

Page 20: 第 9 章   JSP 与数据库

11 .. JDBCJDBC 的主要类包的主要类包(( 11)) java.sqljava.sql 包,提供在包,提供在 JavaJava 中访问和中访问和处理存储于客户端数据源中数据的处理存储于客户端数据源中数据的 APIAPI 。。(( 22)) javax.sqljavax.sql 包,提供在包,提供在 JavaJava 中对服中对服务器端数据源进行访问和处理的务器端数据源进行访问和处理的 APIAPI 。。

Page 21: 第 9 章   JSP 与数据库

22 .. JDBCJDBC 可访问的数据源可访问的数据源(( 11 ))关系型数据库,如:关系型数据库,如:OracleOracle,, DB2DB2,, SQL ServerSQL Server,, My SQLMy SQL,,AccessAccess 等。等。(( 22 ))电子数据表格,如:电子数据表格,如: ExcelExcel 等。 等。 (( 33 ))平面数据文件,如:平面数据文件,如:DBaseDBase,, FoxproFoxpro,, ParadoxParadox 等。等。33 .. JDBCJDBC 的驱动程序的驱动程序

Page 22: 第 9 章   JSP 与数据库

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

Page 23: 第 9 章   JSP 与数据库

9.2.3 JDBC9.2.3 JDBC 支持的数据访问模式支持的数据访问模式

11 .两层模型.两层模型

22 .三层模型.三层模型

Page 24: 第 9 章   JSP 与数据库

Java应用程序 Java小程序 客户机

JDBC

DBMS使用的协议

数据库服务器

数据库

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

Page 25: 第 9 章   JSP 与数据库

客户机

应用程序服务器 (Java)

JDBC

商业逻辑服务器

数据库服务器 数据库

Java应用程序 Java小程序

HTTP,CORBA,RMI或其他

DBMS使用的协议

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

Page 26: 第 9 章   JSP 与数据库

9.3 9.3 使用使用 JDBCJDBC 连接数据库 连接数据库

9.3.1 JDBC9.3.1 JDBC 连接数据库的方法连接数据库的方法

11 .. JavaJava 程序连接数据库的程序连接数据库的 44 种方法种方法Java Java 程序连接数据库的方法实际上程序连接数据库的方法实际上

有下面有下面 44 种。种。

Page 27: 第 9 章   JSP 与数据库

(( 11)) JDBC-ODBCJDBC-ODBC 桥和桥和 ODBCODBC 驱动程驱动程序。序。(( 22 ))本机代码和本机代码和 JavaJava 驱动程序。驱动程序。(( 33)) JDBCJDBC 网络的纯网络的纯 JavaJava 驱动程序。驱动程序。(( 44 ))本机协议纯本机协议纯 JavaJava 驱动程序。驱动程序。22 .连接数据库.连接数据库 44 种方法的性质种方法的性质

Page 28: 第 9 章   JSP 与数据库

连接方法 用于所有平台的 Java 网络连接方式

JDBC-ODBC桥 否 直接连接

本机代码和 Java驱动程序 否 直接连接

JDBC网络的纯 Java驱动程序 客户端—是;服务器—否 间接连接

本机协议纯 Java驱动程序 是 直接连接

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

Page 29: 第 9 章   JSP 与数据库

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

Page 30: 第 9 章   JSP 与数据库

(( 22 ))声明一个声明一个 ConnectionConnection 接口的对象。接口的对象。如:如: Connection conn;Connection conn;

(( 33 ))并使用并使用 driverManagerdriverManager 类的静态方类的静态方法法 getConnectiongetConnection 建立数据库连接,该方法建立数据库连接,该方法主要有两种重载形式:主要有两种重载形式: Connection getConnection(String url)Connection getConnection(String url)

Connection getConnection(String Connection getConnection(String url,String user,String password)url,String user,String password)

Page 31: 第 9 章   JSP 与数据库

22 .. JDBC URLJDBC URL 字符串字符串(( 11)) JDBC URLJDBC URL 字符串语法格式字符串语法格式

① ① jdbcjdbc

② ② <subprotocol><subprotocol>

③ ③ <subname><subname>

(( 22)) JDBC URLJDBC URL 字符串的例子字符串的例子

Page 32: 第 9 章   JSP 与数据库

9.3.3 9.3.3 使用使用 JDBC-ODBCJDBC-ODBC桥的连接应桥的连接应用用

11 .使用.使用 JDBC-ODBCJDBC-ODBC 桥建立“数据源名桥建立“数据源名称”的步骤称”的步骤

(( 11 ))打开打开 WindowsWindows 的控制面板,选的控制面板,选择“择“ ODBC”ODBC” 设置程序 设置程序

Page 33: 第 9 章   JSP 与数据库

(( 22 ))打开该程序后,选择“系统打开该程序后,选择“系统 DSN”DSN” 选项卡建立选项卡建立系统的系统的 ODBCODBC 数据源数据源(( 33 ))单击“添加”按钮添加新的系统单击“添加”按钮添加新的系统 DSNDSN

(( 44 ))在图在图 9-59-5 所示的对话框中选择适当的所示的对话框中选择适当的 ODBCODBC驱驱动程序,此处选择动程序,此处选择Microsoft Access Driver(*.MDB)Microsoft Access Driver(*.MDB) ,,然后按“完成”按钮然后按“完成”按钮(( 55 ))在图在图 9-69-6 中设置“数据源名”,并按“选择”中设置“数据源名”,并按“选择”按钮选择特定的数据库。按钮选择特定的数据库。(( 66 ))单击“确定”按钮完成单击“确定”按钮完成 ODBC DSNODBC DSN 的建立。的建立。22 .编写.编写 JDBC-ODBCJDBC-ODBC 桥连接数据库的代桥连接数据库的代码码

Page 34: 第 9 章   JSP 与数据库

9.3.4 9.3.4 使用使用 JDBCJDBC桥直接连接数据桥直接连接数据库应用库应用

9.3.5 9.3.5 关闭与数据库的连接关闭与数据库的连接

Page 35: 第 9 章   JSP 与数据库

9.4 9.4 访问数据库 访问数据库 java.sqljava.sql 包中与数据库操作有关的接口主要有包中与数据库操作有关的接口主要有以下几个:以下几个:(( 11)) ConnectionConnection

(( 22)) StatementStatement

(( 33)) PreparedStatementPreparedStatement

(( 44)) CallableStatementCallableStatement

(( 55)) ResultSetResultSet

Page 36: 第 9 章   JSP 与数据库

9.4.1 9.4.1 使用使用 SQLSQL 语句对数据库进语句对数据库进行操作行操作

11 .查询操作.查询操作

22 .获取结果集的字段.获取结果集的字段

Page 37: 第 9 章   JSP 与数据库

方 法 说 明

getBlob(int),getBlob(String) 将指定字段的值以 Blob 对象类型返回

getBoolean(int),getBoolean(String) 将指定字段的值以 Boolean 类型返回

getByte(int),getByte(String) 将指定字段的值以 Byte 类型返回

getBytes(int),getBytes(String) 将指定字段的值以 Byte[] 类型返回

getDate(int),getDate(String) 将指定字段的值以 Date 对象类型返回

getDouble(int),getDouble(String) 将指定字段的值以 Double 类型返回

getFloat(int),getFloat(String) 将指定字段的值以 Float 类型返回

getInt(int),getInt(String) 将指定字段的值以 Int 类型返回

getLong(int),getLong(String) 将指定字段的值以 Long 类型返回

getObject(int),getObject(String) 将指定字段的值以 Object 类型返回

getShort(int),getShort(String) 将指定字段的值以 Short 类型返回

getString(int),getString(String) 将指定字段的值以 String 对象类型返回

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

Page 38: 第 9 章   JSP 与数据库

33 .记录的插入、删除和更新操作.记录的插入、删除和更新操作44 .使用带参数的.使用带参数的 SQLSQL 语句语句

(( 11)) setset 方法组方法组(( 22)) clearParameters()clearParameters() 方法方法(( 33)) executeQuery()executeQuery() 方法方法(( 44)) executeUpdate()executeUpdate() 方法方法

Page 39: 第 9 章   JSP 与数据库

9.4.2 9.4.2 使用使用 ResultSetResultSet 对象对数对象对数据库进行操作据库进行操作11 .结果集的游标操作.结果集的游标操作(( 11 ))使用使用 getget或或 updateupdate 方法组对当前记方法组对当前记录的字段进行操作。录的字段进行操作。(( 22 ))使用使用 insertRowinsertRow、、 deleteRowdeleteRow和和updateRowupdateRow 等方法对整条记录进行操作。等方法对整条记录进行操作。(( 33 ))以当前记录为起点进行游标的相对以当前记录为起点进行游标的相对移动操作。移动操作。

Page 40: 第 9 章   JSP 与数据库

方 法 使 用 说 明

beforeFirst() 移动到结果集的开始位置(第一条记录前)

first() 移动到第一条记录

previous() 上移一条记录

next() 下移一条记录

last() 移动到最后一条记录

afterLast() 移动到结果集的结束位置(最后一条记录后)

absolute(int row) 移动到 row 指定的记录,绝对定位

relative(int row) 从当前记录开始,上移或下移 row 条记录

isBeforeFirst() 判断是否是结果集的开始位置

isFirst() 判断是否是结果集的第一条记录

isLast() 判断是否是结果集的最后一条记录

IsAfterLast() 判断是否是结果集的结束位置

表 9-4 ResultSet 的游标操作

Page 41: 第 9 章   JSP 与数据库

22 .结果集的类型.结果集的类型 Statement createStatement(int Statement createStatement(int resultSetType,int resultSetConcurrency)resultSetType,int resultSetConcurrency)

(( 11)) resultSetTyperesultSetType 定义了结果集的类型定义了结果集的类型(( 22)) resultSetConcurrencyresultSetConcurrency 决定结果集的决定结果集的更新方式更新方式

Page 42: 第 9 章   JSP 与数据库

33 .使用结果集对表进行操作.使用结果集对表进行操作(( 11 )更新操作)更新操作

① ① updateupdate 方法组方法组 ② ② updateRow()updateRow() 方法方法 ③ ③ cancelRowUpdates()cancelRowUpdates() 方法方法

Page 43: 第 9 章   JSP 与数据库

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

Page 44: 第 9 章   JSP 与数据库

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

Page 45: 第 9 章   JSP 与数据库

22 .事务处理.事务处理(( 11)) setAutoCommit(Boolean)setAutoCommit(Boolean)

(( 22)) commit()commit()

(( 33)) rollback()rollback()

Page 46: 第 9 章   JSP 与数据库

33 .调用数据库的存储过程.调用数据库的存储过程JDBCJDBC的的 CallableStatementCallableStatement 对象提供了调对象提供了调

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

Page 47: 第 9 章   JSP 与数据库

创建创建 CallableStatementCallableStatement 对象使用对象使用ConnectionConnection 对象的对象的 prepareCallprepareCall 方法。下面的语方法。下面的语句创建了一个句创建了一个 CallableStatementCallableStatement 对象。对象。 CallableStatement cst;CallableStatement cst;

cst = conn.prepareCall("{call cst = conn.prepareCall("{call getTestData(?, ?)}");getTestData(?, ?)}");

Page 48: 第 9 章   JSP 与数据库

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

Page 49: 第 9 章   JSP 与数据库

9.5 9.5 数据库访问应用举例 数据库访问应用举例

9.5.1 JavaApplet9.5.1 JavaApplet 访问数据库应用访问数据库应用

9.5.2 JavaApplication9.5.2 JavaApplication 访问数据库访问数据库应用实例应用实例