第16章 JDBC的高级应用课件

上传人:我*** 文档编号:141087567 上传时间:2020-08-04 格式:PPT 页数:22 大小:150KB
返回 下载 相关 举报
第16章 JDBC的高级应用课件_第1页
第1页 / 共22页
第16章 JDBC的高级应用课件_第2页
第2页 / 共22页
第16章 JDBC的高级应用课件_第3页
第3页 / 共22页
第16章 JDBC的高级应用课件_第4页
第4页 / 共22页
第16章 JDBC的高级应用课件_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《第16章 JDBC的高级应用课件》由会员分享,可在线阅读,更多相关《第16章 JDBC的高级应用课件(22页珍藏版)》请在金锄头文库上搜索。

1、第16章 JDBC高级应用,JSP基础知识,在前面的学习中,总有一个问题,查询所获得的结果集只能使用 next 方法将游标移到下一条记录。但是在某些情况下需要游标能够在结果集中前后移动,这时就需要使用可滚动的结果集了。 可滚动的结果集不仅支持向前浏览内容,而且还支持向后浏览内容的能力。,16.1 可滚动的结果集,可滚动与不可滚动结果集的比较: 1、之所以在默认的情况下提供不可滚动的结果集,是因为当开发人员从不可滚动的结果集中取出数据后,取出的数据将会从结果集中释放掉,这样就可以大大的节约系统资源,从而提高效率。因此,对于不可滚动结果集,数据只能取出一次。 2、而对于可滚动结果集,只要没有被关闭

2、,就要存储所有的数据以备滚动的需要。这在需要滚动的情况下提供了方便,但也付出了代价-需要更多的系统资源。因此,在实际开发中要注意只在必须使用可滚动结果集的情况下使用,没有特殊需求尽量避免使用。,16.1 可滚动的结果集,16.1 可滚动的结果集,默认情况下,结果集是不可滚动的和不可更新的。为了从查询中获得可滚动的结果集,必须使用如下方法:,Statement stat=conn.createStatement(type,concurrency);或者: PreparedStatement stat=conn.prepareStatement(command,type,concurrency);

3、,变量type来设置是否是可滚动的结果集,可以是以下几个ResultSet常量 :,16.1 可滚动的结果集,滚动不敏感的结果集通常对在结果集打开时所作的变化不敏感。滚动敏感的结果集对在结果集打开时所作的变化就很敏感。,concurrency的可能值是:,16.1 可滚动的结果集,结果集的相关方法如下: rs.previous(); rs.next(); rs.relative(n); 向前和向后移动多行,n为正数,光标向前移动;n为负数,光标向后移动;n为零不起作用。 rs.absolute(n); 将游标设置到指定的行号上。 int currentRow=rs.getRow();返回当前行

4、的行号。第一行的行号为1。如果返回值为0,那么当前游标不在任何行上。 实例:Test_ResultSet_scroll01.java Test_ResultSet_scroll02.java,16.1 可滚动的结果集,16.2 可更新的结果集,如果想更新结果集中的数据,并且将结果集上的数据变更自动反映到数据库中,那么就必须使用可更新的结果集,可更新的结果集不一定是可滚动的,但通常是可滚动的。,如下:,Statement stat=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

5、,注意: 即使使用了CONCUR_UPDATABLE参数来创建Statement,得到的结果集也不一定是“可更新的”。如果记录集来自合并查询,这样的结果集就可能是不可更新的。可以使用ResultSet类的getConcurrency()方法来确定是否为可更新结果集。 int CONCUR_READ_ONLY = 1007; int CONCUR_UPDATABLE = 1008;,16.2 可更新的结果集,import java.sql.*; public class Test_ResultSet_scroll01 public static void main(String args) /

6、声明Connection引用 Connection con = null; try / 加载JDBC-ODBC桥连接驱动类 Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver) .newInstance(); / 创建数据库连接 con = DriverManager.getConnection( jdbc:sqlserver:/127.0.0.1:1433;DatabaseName=jxgl, sa, 811103); / 创建能够生成可滚动结果集的Statement Statement st = con.createStat

7、ement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rs = st.executeQuery(select * from student); System.out.println(rs.getConcurrency(); rs.close(); st.close(); con.close(); catch (Exception e) e.printStackTrace(); ,1.更新现有行时可以如下: rs.updateXXX(“列名“|列ID, 值); rs.updateRow(); 注

8、意事项: 所有对应于SQL类型的数据类型都配有updateXXX方法,updateXXX() 方法来修改当前行中某列的数值,可以用名称和编号来指定列。 方法只是改变了结果集中的行值,而非数据库中的值。当更新完行中的字段值后,必须调用updateRow方法将当前行中的所有更新信息发送给数据库。,16.2 可更新的结果集,下例更新了结果集的第一行:,rs.first(); rs.updateString(1, 100020); rs.updateFloat(salary, 10000.0f); rs.updateRow();,16.2 可更新的结果集,2.添加一个新行如下: 说明: moveToI

9、nsertRow(): 将结果集的光标定位到插入行上。 insertRow() :同时更新结果集和数据库。 moveToCurrentRow():将游标定位于当前行。,rs.moveToInsertRow(); rs.updateXXX(Title,title); . rs.insertRow(); rs.moveToCurrentRow();,16.2 可更新的结果集,注意: 在插入行上调用 ResultSet.updateXXX() 并不会更新基本数据库或结果集。当插入行中所有的列值均被设置之后,就应调用 ResultSet.insertRow() 来同时更新结果集和数据库。如果在插入行上

10、调用 updateXXX() 时并没有为某列给定数值,或者结果集中遗漏了某列,则该列必须允许空值。否则,调用 insertRow() 就会抛出 SQLException。,16.2 可更新的结果集,rs.moveToInsertRow(); rs.updateString(1, 100050); rs.updateFloat(2, 1000000.0f); rs.insertRow(); rs.first();,下例显示了如何将新行插入到结果集中:,3.删除游标所指的行,如下: rs.deleteRow();立即将该行从结果集和数据库中删除。 下例从数据库中删除了结果集中的第五行:,16.2

11、可更新的结果集,rs.absolute(5); rs.deleteRow();,注意: ResultSet类中的updateRow、insertRow、deleteRow方法的执行效果等同于SQL中的update、insert、delete。 并不是所有的数据库都支持这种结果集类型和并发模式,就算有时候数据库支持,却又受到数据库驱动程序版本的影响, 在开发的过程中尽量不要使用这种方式来操作数据库,只做了解 。,16.2 可更新的结果集,16.3 元数据操作,元数据(MetaData)用于描述数据库或数据库一部分的数据,它是关于数据的数据。元数据被用于动态地调节数据库的内容和结果集。它分为两类,

12、一类是关于数据库的,另一类是关于结果集的。,MetaData包括: 数据库元数据DatabaseMetaData:使用connection.getMetaData()获得。包含了关于数据库整体元数据信息。 结果集元数据ResultSetMetaData:使用resultSet.getMetaData() 获得。包含了表的列名、列数等信息。,16.3 元数据操作,结果集元数据ResultSetMetaData使用rs.getMetaData()获得。 字段个数:meta.getColomnCount(); 字段名字:meta.getColumnName(); 字段JDBC类型:meta.getC

13、olumnType(); 字段数据库类型:meta.getColumnTypeName(); 实例:JDBCDemo0.java,16.3 元数据操作,常用方法如下: 数据库元数据对象: DatabaseMetaData dbmd = con.getMetaData(); 数据库名dbmd.getDatabaseProductName(); 数据库版本号dbmd.getDatabaseProductVersion(); 数据库驱动名dbmd.getDriverName(); 数据库驱动版本号dbmd.getDriverVersion(); 数据库Urldbmd.getURL(); 该连接的登陆

14、名dbmd.getUserName();,16.3 元数据操作,import java.sql.*; public class Test_ResultSet_scroll public static void main(String args) / 声明Connection引用 Connection con = null; try / 加载JDBC-ODBC桥连接驱动类 Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver) .newInstance(); / 创建数据库连接 con = DriverManager.getConn

15、ection( jdbc:sqlserver:/127.0.0.1:1433;DatabaseName=jxgl, sa, 811103); DatabaseMetaData dmd = con.getMetaData();/ 检索可在给定类别中使用的表的描述 ResultSet rs = dmd.getTables(null, null, null, new String table );,/ 定义ResultSetMetaData对象 ResultSetMetaData rsmd = rs.getMetaData(); / 返回此 ResultSet 对象中的列数 int cols = rsmd.getColumnCount(); for (int i = 1; i = cols; i+) / 获取指定列的名称。 System.out.print(rsmd.getColumnName(i) + t); System.out.println(); while (rs.next() for (int i = 1; i = cols; i+) System.out.print(rs.getString(i) + t); System.out.println(); catch (Exception e) e.printStackTrace(); ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号