chap6_在JSP中使用数据库-studen_第1页
chap6_在JSP中使用数据库-studen_第2页
chap6_在JSP中使用数据库-studen_第3页
chap6_在JSP中使用数据库-studen_第4页
chap6_在JSP中使用数据库-studen_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

1、第第6章章 在在JSP中使用数据库中使用数据库1、深入理解、深入理解JDBC的工作原理的工作原理2、掌握使用、掌握使用java数据库驱动连接数据库的基本步骤数据库驱动连接数据库的基本步骤3、掌握、掌握JDBC数据库的查询、更新操作数据库的查询、更新操作4、会在、会在JSP页面中灵活使用数据库页面中灵活使用数据库5、了解、了解JDBC-ODBC桥接器数据库连接方式桥接器数据库连接方式6、了解预处理语句和通配符、了解预处理语句和通配符课程目标 1、JDBC介绍介绍* 概念* 工作原理2、连接数据库的常用方式、连接数据库的常用方式* 使用Java数据库驱动* JDBC-ODBC桥接器3、JDBC查询

2、操作查询操作* 顺序查询* 随机查询4、JDBC更新、添加与删除操作更新、添加与删除操作5、预处理语句和通配符、预处理语句和通配符内容提要6.1 JDBC介绍1、什么是、什么是JDBC JDBC(Java DataBase Connectivity),SUN公司为Java程序程序提供的访问各种数据库的API,它由一些Java类和接口类和接口组成。2、JSP与与JDBCJSP页面页面Java程序片,程序片,使用使用java语法连语法连接数据库接数据库数据库数据库返回结果返回结果建立连接、发送建立连接、发送SQL语句语句3.JDBC的基本原理的基本原理早期数据库开发模式6.1 JDBC介绍编程语言

3、编程语言OracleSybaseSQLServerMySQLAPI for OracleAPI for SybaseAPI for SQLServerAPI for MySQL使用使用使用使用使用使用使用使用操作操作操作操作操作操作操作操作各种数据库各种数据库1、程序员操作不便、程序员操作不便 2、产品维护成本增加、产品维护成本增加3.JDBC的基本原理的基本原理JDBC开发数据库模式6.1 JDBC介绍各种数据库各种数据库OracleSybaseSQLServerMySQLAPI for OracleAPI for SybaseAPI for SQLServerAPI for MySQLJD

4、BC接接 口口 由由 各各 个个 数数 据据 库库 厂厂 商商 实实 现现 接口接口1接口接口2接口接口3接口接口4编程语言编程语言统一接口统一接口1、纯、纯Java数据库驱动程序数据库驱动程序 使用使用java语言编写的数据库驱动程序(数据库厂商完成)。语言编写的数据库驱动程序(数据库厂商完成)。JDBC提供的提供的API将将Java数据库驱动数据库驱动转换为数据库系统所使用的转换为数据库系统所使用的专门协议来实现与数据库交互专门协议来实现与数据库交互2、JDBC-ODBC桥接器桥接器 应用程序建立应用程序建立“JDBC-ODBC”之间的连接,即之间的连接,即“桥接器桥接器”,和,和数据库的

5、连接由数据库的连接由ODBC(Open Database Connectivity)去完成。)去完成。6.2 JDBC连接数据库的常用方式 JDBC调用调用Java数据库驱动程序数据库驱动程序充分利用充分利用ODBC的优势的优势JDBC-ODBC1、纯、纯Java数据库驱动程序数据库驱动程序6.2 JDBC连接数据库的常用方式应用程序应用程序JDBCOracle驱动驱动SQL Server驱动驱动MySQL驱动驱动其他驱动其他驱动Oracle数据库数据库SQL ServerMySQL数据库数据库其他数据库其他数据库使使用用加加载载连接连接连接连接连接连接连接连接使用使用JDBC的应用程序所驻留

6、的计算机的应用程序所驻留的计算机1、纯、纯Java数据库驱动程序数据库驱动程序JDBC1)位置:位于)位置:位于JDK的安装目录下的安装目录下2)内容)内容接口:接口:Driver、Connection、Statement ResultSet类:类:DriverManager6.2 JDBC连接数据库的常用方式C:Program FilesJavajdk1.6.0_02jrelibrt.jarimport java.sql.*1、纯、纯Java数据库驱动程序数据库驱动程序JDBC6.2 JDBC连接数据库的常用方式名称名称解释解释DriverDriver驱动程序接口,被数据库厂商实现,加驱动程

7、序接口,被数据库厂商实现,加载后才能连接数据库载后才能连接数据库DrvierManagerDrvierManager(类)(类)处理驱动的调入,并且产生新的数据库处理驱动的调入,并且产生新的数据库连接连接ConnectionConnection代表对特定数据库的连接代表对特定数据库的连接StatementStatement用于发送用于发送SQLSQL语句,接收语句,接收SQLSQL的执行结果的执行结果ResultSetResultSet执行查询语句得到的结果集执行查询语句得到的结果集使使用用顺顺序序自自上上而而下下1、纯、纯Java数据库驱动程序数据库驱动程序数据库驱动(数据库驱动(SQL S

8、erver2005)1)位置)位置需要开发者下载,并配置需要开发者下载,并配置项目根目录项目根目录WebRootWEB-INFlib2)内容)内容(对对JDBC底层接口的实现类底层接口的实现类)6.2 JDBC连接数据库的常用方式1、JDBC准备工作准备工作1)下载JDBC数据库驱动(驱动由相应的数据库厂商来提供) 例如:SQL Server2005 sqljdbc.jar com.microsoft.sqlserver.jdbc.SQLServerDriver2)配置JDBC数据库驱动 将sqljdbc.jar文件拷贝到MyEclipse中的web项目的目录WebRootWEB-INFlib

9、下 (驱动文件随项目一起部署,较为规范)6.3 使用JDBC连接数据库2、JDBC编程步骤编程步骤步骤步骤1:在程序中加载驱动:在程序中加载驱动*驱动程序类:com.microsoft.sqlserver.jdbc.SQLServerDriver*加载方法:Class.forName(驱动程序类)6.3 使用JDBC连接数据库try try catch (ClassNotFoundException e) catch (ClassNotFoundException e) System.out.println( System.out.println(数据库驱动加载错误数据库驱动加载错误););

10、Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);注意:注意:ClassClass是包是包java.langjava.lang中的一个类中的一个类, ,该类调用静态方法该类调用静态方法forNameforName可以加载驱动可以加载驱动, ,该方法抛该方法抛ClassNotFoundExceptionClassNotFoundException异异常,因此需要捕获异常常,因此需要捕获异常2、JDBC编程步骤

11、编程步骤步骤步骤2:创建连接对象(连接数据库):创建连接对象(连接数据库)使用DriverManager类的方法getConnection创建连接对象格式格式:Connection conn = DriverManager.getConnection(String uri, String user, String password)参数说明:参数说明: uri:要连接的数据库的路径,根据数据库不同变化:要连接的数据库的路径,根据数据库不同变化 user:登录数据库的用户名:登录数据库的用户名 password:登录数据库的密码:登录数据库的密码注意:该方法会抛出注意:该方法会抛出SQLExce

12、ption(SQL异常)异常)6.3 使用JDBC连接数据库步骤步骤2:创建数据库连接对象:创建数据库连接对象6.3 使用JDBC连接数据库String uri= jdbc:sqlserver:/127.0.0.1:1433;DatabaseName=school;String uri= jdbc:sqlserver:/127.0.0.1:1433;DatabaseName=school;String user = sa; String password = sa;String user = sa; String password = sa;try Class.forName(com.micr

13、osoft.sqlserver.jdbc.SQLServerDriver);try Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);Connection conn = DriverManager.getConnection(uri, user, password)Connection conn = DriverManager.getConnection(uri, user, password);catch (ClassNotFoundException e) catch (ClassNotFoundException e)

14、 System.out.println( System.out.println(数据库驱动加载错误数据库驱动加载错误);); catch (SQLException e) System.out.println( catch (SQLException e) System.out.println(获取连接错误获取连接错误););if (conn != null) System.out.println(if (conn != null) System.out.println(数据库连接成功数据库连接成功););数据库名数据库名服务器服务器ip如果得到空对象说明连接失败如果得到空对象说明连接失败2、

15、JDBC编程步骤编程步骤步骤步骤3:发送:发送SQL语句到数据库语句到数据库1)创建)创建Statement 作用:作用:Statement对象用于将对象用于将SQL语句发送到数据库中语句发送到数据库中 格式:格式:Statement stmt = conn.createSatement()2)执行)执行SQL语句(调用语句(调用Statement的方法)的方法) 查询方法:查询方法:public ResultSet executeQuery(String sql) throws SQLException 更新方法:更新方法:public int executeUpdate(String sq

16、l) throws SQLException6.3 使用JDBC连接数据库添加、修改、删除添加、修改、删除2、JDBC编程步骤编程步骤步骤步骤3:发送发送SQL语句到数据库(例:查询)语句到数据库(例:查询)6.3 使用JDBC连接数据库tryString sql = select * from student;Statetment stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(sql);catch() SQL语句语句语句对象语句对象执行执行SQL说明:此步骤得到的结果存储在说明:此步骤得到的结果存储在rs结果集合

17、中,下一步要遍历结果集取出数据来应用结果集合中,下一步要遍历结果集取出数据来应用2、JDBC编程步骤编程步骤步骤步骤4:遍历展示结果集1)遍历行:ResultSet对象的next()方法rs.next()2)遍历列:通过ResultSet对象的getXXX()方法遍历行中的列p1356.3 使用JDBC连接数据库游标游标游标游标游标游标游标游标返回类型返回类型方法名称(根据字段名称)方法名称(根据字段名称)返回类型返回类型方法名称(根据字段的索引)方法名称(根据字段的索引)intgetInt( String FieldName)intgetInt( int colunIndex)float g

18、etFloat(String FieldName)float getFloat(int colunIndex)date getDate(String FieldName)date getDate(int colunIndex)stringgetString(String FieldName)stringgetString(int colunIndex)注意:注意:colunIndex从从1开始计数开始计数String sql = select String sql = select * * from student ; from student ;Statetment stmt = conn.

19、createStatement();Statetment stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(sql);ResultSet rs = stmt.executeQuery(sql);while(rs.next()while(rs.next()out.print(out.print(rs.getString(id)rs.getString(id););out.print(out.print(rs.getString(name)rs.getString(name););out.print(out.print(r

20、s.getString(gender)rs.getString(gender); ); out.print(out.print(rs.getInt(age)rs.getInt(age););out.print(rs.getInt(“class);out.print(rs.getInt(“class); out.print(); out.print(); 注意:此时游标停留注意:此时游标停留在当前结果集的第一在当前结果集的第一行的前面行的前面注意:此时游标停留在第一行注意:此时游标停留在第一行输出结果:在输出结果:在jsp页面中逐行打印出结果集中的记录页面中逐行打印出结果集中的记录2、JDBC编

21、程步骤编程步骤步骤步骤5:关闭数据库连接:关闭数据库连接1)rs.close( ) 关闭结果集关闭结果集2)stmt.close( ) 关闭关闭statement对象对象3)conn.close() 关闭关闭Connection对象对象6.3 使用JDBC连接数据库注意:关闭数据库连接的顺序注意:关闭数据库连接的顺序2、JDBC编程步骤(总结)编程步骤(总结)6.3 使用JDBC连接数据库加载驱动加载驱动连接数据库连接数据库发送发送SQLSQL语句语句处理返回结果处理返回结果关闭资源关闭资源Class.forName(com.microsoft.sqlserver.jdbc.SQLServer

22、Driver);Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);String uri = jdbc:sqlserver:/127.0.0.1:1433;DatabaseName=school;String uri = jdbc:sqlserver:/127.0.0.1:1433;DatabaseName=school;Connection conn = DriverManager.getConnection(uri, user, password);Connection conn = DriverManager.getCo

23、nnection(uri, user, password);Statement stmt = conn.createSatement();Statement stmt = conn.createSatement();ResultSet rs = stmt.executeQuery(sql);ResultSet rs = stmt.executeQuery(sql);rs.close();stmt.close();conn.close();rs.close();stmt.close();conn.close();while(rs.next()while(rs.next()out.print(ou

24、t.print(rs.getString(id)rs.getString(id);); 总结总结2: JDBC API中重要的接口和类中重要的接口和类 这几个常用的类和接口都位于包这几个常用的类和接口都位于包java.sql中,接口的中,接口的实现类为于实现类为于com.microsoft.sqlserver.jdbc中中6.3 使用JDBC连接数据库名称名称解释解释DriverDriver驱动程序接口被数据库厂商实现,加载后才能连接数据库驱动程序接口被数据库厂商实现,加载后才能连接数据库DrvierManagerDrvierManager(类)(类)处理驱动的调入并且对产生新的数据库连接处理

25、驱动的调入并且对产生新的数据库连接ConnectionConnection代表对特定数据库的连接代表对特定数据库的连接StatementStatement用于发送用于发送SqlSql语句,并接收语句,并接收SqlSql的执行结果的执行结果ResultSetResultSet执行查询语句得到的结果集执行查询语句得到的结果集6.3 使用JDBC连接数据库扩展:将数据库操作封装为一个扩展:将数据库操作封装为一个javajava类,提高可重用性类,提高可重用性第一步:新建类第一步:新建类DBManager.javaDBManager.java第二步:导包操作第二步:导包操作第三步:编写类代码第三步:编

26、写类代码publicpublic classclass DBManager DBManager 1 1、定义变量、定义变量2 2、获取连接方法、获取连接方法getConnectiongetConnection3 3、执行查询方法、执行查询方法executeQueryexecuteQuery4 4、释放资源的方法、释放资源的方法releaseSourcereleaseSource 6.3 使用JDBC连接数据库 1、定义变量、定义变量 private Connection conn = null; private Statement stmt = null; private ResultSet

27、rs = null; private String uri = jdbc:sqlserver:/127.0.0.1:1433;DatabaseName=school; private String user = sa; private String password = 123456;6.3 使用JDBC连接数据库 2、编写获取数据库连接对象的方法、编写获取数据库连接对象的方法 public Connection getConnection() try Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver); conn = Dri

28、verManager.getConnection(uri,user,password); if(conn!=null) System.out.println(数据库链接获取成功数据库链接获取成功); catch(ClassNotFoundException e) System.out.println(驱动程序加载异常驱动程序加载异常); catch(SQLException e) System.out.println(获取连接异常获取连接异常); e.printStackTrace();/打印堆栈跟踪打印堆栈跟踪 return conn;6.3 使用JDBC连接数据库 3、编写获取查询结果集的

29、方法、编写获取查询结果集的方法 public ResultSet executeQuery(String sql) try stmt = conn.createStatement(); rs = stmt.executeQuery(sql); catch (SQLException e) System.out.println(SQL执行错误执行错误); e.printStackTrace();/打印堆栈跟踪打印堆栈跟踪 return rs; 6.3 使用JDBC连接数据库 4、编写释放数据库资源的方法、编写释放数据库资源的方法 public void releaseSource() try i

30、f(rs!=null) rs.close(); if(stmt!=null) stmt.close(); if(conn!=null) conn.close(); catch (SQLException e) e.printStackTrace(); 顺序查询顺序查询* 简单查询* select * from student* 条件查询* select * from student where age=23* select * from student where age between 23 and 40* 排序查询* select * from student order by jspsc

31、ore * select * from student order by jspscore asc* select * from student order by jspscore desc 6.4 JDBC数据库查询 age=23 and age=40按照按照jspscore排序排序 默认升序默认升序按照按照jspscore排序排序 升序升序按照按照jspscore排序排序 降序降序 模糊查询模糊查询* select * from student where name like 张%* 张、张三、张晓晓第一个字符是“张”* select * from student where name l

32、ike 张_* 张三、张晓包含两个字符,且第一个字符是“张”* select * from student where name like %小%* 张小青、王小红、李小丽包含字符“小” 练习* 写出SQL语句查询t1表中content字段包含“java”,并且倒数第2个字符为E的记录* select * from t1 where content like %java%E_6.4 JDBC数据库查询 学生练习时间。学生练习时间。6.4 JDBC数据库查询DBManager: executeQueryquery1.jsp (简单查询简单查询)条件查询条件查询模糊查询模糊查询排序查询排序查询6.

33、4 JDBC数据库查询 综合练习综合练习1-1-条件查询(结合表单来实现查询)条件查询(结合表单来实现查询) 请输入学生的成绩请输入学生的成绩 form action=/query/query.jsp method=get 学生成绩在学生成绩在 到到之间的学生记录是之间的学生记录是 student.jspquery.jspStatement对象调用方法:对象调用方法:*public int executeUpdate(String sqlStatement);*返回的是影响的行数,若返回0,则说明更新操作失败SQL语句语句*添加记录insert1)insert into test values

34、(zhangsan, 23) 2)insert into test(name) values(lisi)*修改记录update1)update test set age=40 where name=zhangsan*删除记录delete2)delete from test where name=zhangsan6.5 更新、添加与删除 SQL语句语句* 注意:字符串拼接技巧6.5 更新、添加与删除以插入记录的以插入记录的SQLSQL为例,为例,插入记录操作时,变量插入记录操作时,变量varvar中存储着字段的值,中存储着字段的值,首先:写好首先:写好insert into student va

35、lues ( )insert into student values ( ) 然后然后(1 1)见到字符串类型的字段,)见到字符串类型的字段,sqlsql中就拼中就拼”+var+var+”, ,(2 2)见到数据类型的字段,)见到数据类型的字段,sqlsql中就拼中就拼”+var+var+”最后形成:最后形成:insert into student values(+id+,+name+,+age+,+jspscore+);insert into student values(+id+,+name+,+age+,+jspscore+);案例:案例:insert1.jsp insert1Handl

36、e.jspinsert1.jsp insert1Handle.jsp6.5 更新、添加与删除 综合练习综合练习2-2-添加记录添加记录6.5 更新、添加与删除 综合练习综合练习3-3-更新记录(删除和修改)更新记录(删除和修改)数据库综合练习query.jsp结果展示页面结果展示页面updateForm.jsp表单表单1、接参数、接参数id2、查询数据库、查询数据库3、显示到表单中、显示到表单中(或者是接收到所有字段信息)(或者是接收到所有字段信息)updateHandle.jsp添加处理页面添加处理页面1、接参数、接参数2、更新到数据库、更新到数据库3、跳转、跳转deleteHandle.j

37、sp删除处理页面删除处理页面1、接参数、接参数id2、删除数据库、删除数据库3、跳转、跳转addForm.jsp表单表单addHandle.jsp添加处理页面添加处理页面1、接参数、接参数2、添加到数据库、添加到数据库3、跳转、跳转addHandle.jsp添加处理页面添加处理页面1、接参数、接参数2、添加到数据库、添加到数据库3、跳转、跳转批量删除query.jsp结果展示页面结果展示页面deleteAll.jsp批量删除处理页面批量删除处理页面1、接、接id参数(接收到数组)参数(接收到数组)2、使用、使用for循环拼接循环拼接delete语句语句3、执行批量删除语句、执行批量删除语句4、

38、跳转到、跳转到query页面页面 数据库综合练习添加功能添加功能删除功能删除功能修改功能修改功能展示页面展示页面 form action=/add/addHandle.jsp method=get 学号:学号: 姓名:姓名: 年龄:年龄: 成绩:成绩: addForm.jspaddHandle.jsp 以下是查询结果以下是查询结果 form action=/delete/deleteAll.jsp 选择选择id名字名字年龄年龄分数分数操作操作 input type=checkbox name=deleteAll value=/ a href=/update/updateForm.jsp?id=

39、&name=&age=&jspScore=修改修改 a href=/delete/delete.jsp?id=删除删除 query.jsp接收参数,并显示在表单中接收参数,并显示在表单中提交表单时,交给提交表单时,交给updateHandle.jsp处理处理显示当前记录显示当前记录id值,不允许修改值,不允许修改显示当前记录姓名显示当前记录姓名显示当前记录年龄显示当前记录年龄显示当前记录成绩显示当前记录成绩updateForm.jspupdateHandle.jsp 关于批量删除思路关于批量删除思路接收到的是接收到的是StringString类型的数组,数组中存放了记录

40、的类型的数组,数组中存放了记录的idid值值1 1)delete from student where id in(id1,id2,id3delete from student where id in(id1,id2,id3) )2 2)在循环中执行)在循环中执行deletedelete语句语句deleteHandle.jsp通过超链接传递参数的写法 a href=/updateanddelete/updateForm.jsp?id=&name=&age=&jspscore=修改修改 a href=/updateanddelete/deleteHandle.jsp?id

41、=删除删除1 1、随机查询、随机查询(参考教材中(参考教材中P139-143P139-143)1 1)顺序查询:结果集游标只能顺序向前移动。)顺序查询:结果集游标只能顺序向前移动。 使用使用ResultSetResultSet结果集只能够执行顺序查询结果集只能够执行顺序查询rs.next()rs.next()方法方法6.6 JDBC随机查询滚动结果集游标游标游标游标游标游标游标游标ResultSetResultSet结果集合只支持游标顺序的依次结果集合只支持游标顺序的依次下移下移,不能不能够后退,也不能够随机的定位。(只进的够后退,也不能够随机的定位。(只进的ResultSetResultSe

42、t)1) stmt = conn.createStatement();2) rs = stmt.executeQuery(sql);游标游标1 1、随机查询、随机查询(参考教材中(参考教材中P139-143P139-143)2 2)随机查询:结果集游标可以随意的滚动和定位)随机查询:结果集游标可以随意的滚动和定位 例:假设数据库中记录是按照例:假设数据库中记录是按照“学号学号”字段排序的,在页面字段排序的,在页面中中 按照下图所示顺序输出记录按照下图所示顺序输出记录6.6 JDBC随机查询滚动结果集第第4条条第第3条条第第1条条第第1条条进行随机查询需要进行随机查询需要支持滚动的结果集支持滚动

43、的结果集3)获取可滚动结果集的方法)获取可滚动结果集的方法 Statement stmtconn.createStatement(int type,int Concurrency) rs = stmt.executeQuery(sql);(1 1)TypeType取值决定滚动方式取值决定滚动方式 ResultSet.TYPE_FORWARD_ONLYResultSet.TYPE_FORWARD_ONLY:游标只能向前滚动:游标只能向前滚动 ResultSet.TYPE_SCROLL_INSENSITIVE ResultSet.TYPE_SCROLL_INSENSITIVE :游标可以前后滚动,

44、不敏感:游标可以前后滚动,不敏感 ResultSet.TYPE_SCROLL_SENSITIVE ResultSet.TYPE_SCROLL_SENSITIVE :游标可以前后滚动,敏感游标可以前后滚动,敏感(2 2)ConcurrencyConcurrency决定是否可以用结果集更新数据库决定是否可以用结果集更新数据库 ResultSet.CONCUR_READ_ONLY ResultSet.CONCUR_READ_ONLY :不能用结果集更新数据:不能用结果集更新数据 ResultSet.CONCUR_UPDATABLEResultSet.CONCUR_UPDATABLE:可以用结果集更新

45、数据:可以用结果集更新数据6.6 JDBC随机查询滚动结果集1、随机查询、随机查询(1 1)TypeType取值决定滚动方式取值决定滚动方式ustaticintTYPE_SCROLL_INSENSITIVETheconstantindicatingthetypeforaResultSetobjectthatisscrollablebutgenerallynotsensitivetochangesmadebyothers.ustaticintTYPE_SCROLL_SENSITIVETheconstantindicatingthetypeforaResultSetobjectthatisscro

46、llableandgenerallysensitivetochangesmadebyothers.6.6 JDBC随机查询滚动结果集对数据库中对数据库中updateupdate操作是否敏感,即有另外的事务更新了数据库操作是否敏感,即有另外的事务更新了数据库中的记录,则已经取出的中的记录,则已经取出的ResultSetResultSet中相应记录也会变化。中相应记录也会变化。 6.6 JDBC随机查询滚动结果集1、随机查询、随机查询(1 1)TypeType取值决定滚动方式取值决定滚动方式A线程:线程:1)查询)查询2)在页面上展示)在页面上展示B线程:线程:1)更新)更新2)在页面上展示)在页

47、面上展示内存:内存:ResultSet(在线)(在线)更新了数据表的某条记录更新了数据表的某条记录如果如果ResultSetResultSet是敏感的(是敏感的(TYPE_SCROLL_SENSITIVETYPE_SCROLL_SENSITIVE),),则则ResultSetResultSet会自动更新数据,否则,会自动更新数据,否则,A A看到的将不是看到的将不是最新的数据库中的数据最新的数据库中的数据1、随机查询、随机查询(2 2)ConcurrencyConcurrency决定是否可以用结果集更新数据库决定是否可以用结果集更新数据库 ResultSet.CONCUR_READ_ONLY

48、ResultSet.CONCUR_READ_ONLY :不能用结果集更新数据:不能用结果集更新数据 ResultSet.CONCUR_UPDATABLEResultSet.CONCUR_UPDATABLE:可以用结果集更新数据:可以用结果集更新数据例:创建一个支持滚动的敏感结果集,可以使用结果集更新数据库例:创建一个支持滚动的敏感结果集,可以使用结果集更新数据库6.6 JDBC随机查询滚动结果集stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);rs = stmt.exe

49、cuteQuery(sql);1、随机查询、随机查询(2 2)ConcurrencyConcurrency决定是否可以用结果集更新数据库决定是否可以用结果集更新数据库 ResultSet.CONCUR_UPDATABLEResultSet.CONCUR_UPDATABLE:可以用结果集更新数据:可以用结果集更新数据 方法方法1:void updateString(String columnLabel, String x) throws SQLException; 例:例:rs.updateString(id,0011); 方法方法2:void updateString(int columnIn

50、dex, String x) throws SQLException; 例:例:rs.updateString(2,小王小王); 方法方法3 3:void updateRow() throws SQLException; 提交更新提交更新6.6 JDBC随机查询滚动结果集 /更新结果集合示例更新结果集合示例 rs.first();/将游标移动到第一行将游标移动到第一行 rs.updateString(“id”,“0011”);/设置更新的设置更新的id字段值字段值 rs.updateString(2,“小王小王”);/设置更新的设置更新的name字段值字段值 rs.updateRow();/提

51、交更新提交更新数据库表字段索引,从数据库表字段索引,从1开始开始1232 2、rsrs对象的常用方法对象的常用方法1 1)rsrs.next().next() 游标前进游标前进2 2)rsrs.previous() .previous() 游标向前移动一次,若游标指向第一行时,调用该游标向前移动一次,若游标指向第一行时,调用该方法返回方法返回falsefalse,指向其他行时,调用返回,指向其他行时,调用返回truetrue3 3)rsrs.first().first()、rsrs.last().last()游标定位到第一条和最后一条记录游标定位到第一条和最后一条记录4 4)rsrs.abso

52、lute(int row) .absolute(int row) 游标指定移动到某行游标指定移动到某行5 5)rsrs.isBeforeFirst().isBeforeFirst()、rsrs.isAfterLast().isAfterLast()、rsrs.isFirst().isFirst()、 rsrs.isLast().isLast()6 6)rsrs.getRow() .getRow() 返回当前游标指向的行号,行号从返回当前游标指向的行号,行号从1 1开始开始* 示例:chap06/scroolRS/scroolRS.jsp6.6 JDBC随机查询滚动结果集/*支持可滚动结果集的查

53、询方法(添加到支持可滚动结果集的查询方法(添加到DBManager中)中) * param sql * return */public ResultSet scollExecuteQuery(String sql)try stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);rs = stmt.executeQuery(sql); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrac

54、e();return rs; 学生练习时间。学生练习时间。6.6 JDBC随机查询滚动结果集滚动结果集练习滚动结果集练习* chap06/scroolRS/scroolRS.jsp滚动结果集的应用滚动结果集的应用思考题:思考题:* 如何获取数据库中某个表(student)中的记录数?* 1)遍历rs结果集,使用局部变量count+* 2)使用select count(*) as count from user1 查询出计算字段,并命名为count,再利用rs.getString(1),将其获取出来* 3)使用可滚动的结果集,rs.last(); rs.getRow();6.6 JDBC随机查询

55、滚动结果集6.6 JDBC随机查询滚动结果集/方法一和方法三方法一和方法三trytry Class. Class.forNameforName( (com.microsoft.sqlserver.jdbc.SQLServerDrivercom.microsoft.sqlserver.jdbc.SQLServerDriver);); Connection conn = DriverManager. Connection conn = DriverManager.getConnectiongetConnection(uri,(uri,sasa, ,65077256507725);); Statem

56、ent stmt = conn.createStatement(); Statement stmt = conn.createStatement(); String sql = String sql = select select * * from student from student; ; ResultSet rs = stmt.executeQuery(sql); ResultSet rs = stmt.executeQuery(sql); int int rowCount = 0; rowCount = 0; while while(rs.next()(rs.next() rowCo

57、unt+; rowCount+; System. System.outout.println(.println(userInfouserInfo表总共行数为表总共行数为: + rowCount); + rowCount); catchcatch (ClassNotFoundException e) (ClassNotFoundException e) catchcatch (SQLException e) (SQLException e) 注意:这种实现方法有个弊端,如果此时想对注意:这种实现方法有个弊端,如果此时想对rsrs的结果集进行操作,是没有办法的的结果集进行操作,是没有办法的。因为游

58、标已经停留在最后一行之后,最好使用支持滚动的结果集,重新将游标放。因为游标已经停留在最后一行之后,最好使用支持滚动的结果集,重新将游标放到第一行。到第一行。rs.first();rs.getRow();Statement stmt = conn.createStatement(ResultSet.Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVETYPE_SCROLL_INSENSITIVE, , ResultSet. ResultSet.CONCUR_READ_ONLYCONCUR_READ_ONLY

59、);); 思考题思考题6.6 JDBC随机查询滚动结果集/方法二方法二String uri = String uri = jdbc:sqlserver:/127.0.0.1:1433;DatabaseName=schooljdbc:sqlserver:/127.0.0.1:1433;DatabaseName=school; ;trytry Class. Class.forNameforName( (com.microsoft.sqlserver.jdbc.SQLServerDrivercom.microsoft.sqlserver.jdbc.SQLServerDriver);); Connec

60、tion conn = DriverManager. Connection conn = DriverManager.getConnectiongetConnection(uri,(uri,sasa, ,65077256507725);); Statement stmt = conn.createStatement(); Statement stmt = conn.createStatement(); String sql = select count(String sql = select count(* *) as count from student;) as count from student; ResultSet rs =

温馨提示

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

评论

0/150

提交评论