JDBC高级特性-带存储过程.ppt_第1页
JDBC高级特性-带存储过程.ppt_第2页
JDBC高级特性-带存储过程.ppt_第3页
JDBC高级特性-带存储过程.ppt_第4页
JDBC高级特性-带存储过程.ppt_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

访问数据库(2),第6章,2,回顾,怎样注册JDBC驱动程序?怎样获得数据库连接接口对象?获得PreparedStatement和Statement接口对象的方法分别是什么?,3,本章目标,本次课程目标掌握事务的处理方法;掌握ResultSetMateData对象的用法;掌握怎样将ResultSet中的数据装入到集合中了解怎样获得可滚动结果集,4,事务处理:,默认情况下,连接Connection是处于自动提交模式。在自动提交模式下,每个SQL更新语句(insert,update,delete)成功执行完后就会自动提交到数据库中。为了将多个数据库更新组合成一组更新,我们需要将自动提交模式关闭(使用setAutoCommit(booleanauto)方法)。一旦关闭了自动提交模式,每个SQL语句都是一个事务的一部分,为使事务对数据库产生永久效果,需要使用commit()方法来显式地进行提交。在自动提交关闭后,不成功的提交会导致数据库进行隐式的回滚,所有的更新都会丢失。也可以调用rollback();,5,事务设置,publicvoidtrans()Connectioncon=null;PreparedStatementpstmt=null;trycon=getConnection();con.setAutoCommit(false);Stringsql1=insertintostudentvalues(?,?,?);pstmt=con.prepareStatement(sql1);pstmt.setString(1,孙悟空);pstmt.setString(2,男);pstmt.setDate(3,java.sql.Date.valueOf(1753-5-13);pstmt.executeUpdate();System.out.println(第一次录入成功);pstmt.setString(1,观世音);pstmt.setString(2,女);pstmt.setDate(3,java.sql.Date.valueOf(1753-5-13);pstmt.executeUpdate();System.out.println(第二次录入成功);mit();catch(SQLExceptione)con.rollback();,事务管理,设置手动提交,事务开始,出现异常,事务回滚,提交事务,6,练习1,训练内容使用JDBC事务保证数据操作的完整性需求说明开通银行帐户需记录客户基本信息,同时应给客户分配一个银行资金帐户,且在开户时,银行资金帐户必须存入至少10元金额.为了保证客户信息完整和资金帐户数据安全,在添加客户资料和分配资金帐户时,应确保两个操作同时执行成功,7,表结构,8,ResultSetMetaData对象,继续完善BaseDB的方法通用查询方法只要输入一个sql语句就能将结果输出到控制台,publicvoidexecuteQuery(Stringsql)Connectioncon=null;PreparedStatementpstmt=null;ResultSetrs=null;trycon=getConnection();pstmt=con.prepareStatement(sql);rs=pstmt.executeQuery();while(rs.next()System.out.print(rs.getString(1)+t);System.out.print(rs.getString(2)+t);System.out.print(rs.getString(3)+t);catch(ClassNotFoundExceptione)。finally/关闭资源,你用用ResultSetMetaData,保管好使,怎么才能知道查询语句里有几个字段呢?,9,ResultSetMetaData对象,可用于获取关于ResultSet对象中列的类型和属性信息的对象获得ResultSetMetaData对象:ResultSet对象的getMetaData()方法;ResultSetMetaData对象的常用方法:intgetColumnCount():获得本次查询中的列数StringgetColumnName(intcolumn):获得本次查询中指定列的列名。StringgetColumnTypeName(intcolumn):检索指定列的数据库特定的类型名称。intgetColumnDisplaySize(intcolumn):指示指定列的最大标准宽度,以字符为单位。StringgetTableName(intcolumn):获取指定列的表名称,10,从数据库中取出表中所有信息,publicvoidexecuteQuery(Stringsql)Connectioncon=null;PreparedStatementpstmt=null;ResultSetrs=null;trycon=getConnection();pstmt=con.prepareStatement(sql);rs=pstmt.executeQuery();ResultSetMetaDatard=rs.getMetaData();intcolCount=rd.getColumnCount();while(rs.next()for(inti=1;i=colCount;i+)System.out.print(rs.getString(i)+t);System.out.println();catch(ClassNotFoundExceptione)e.printStackTrace();catch(SQLExceptione)e.printStackTrace();finally/关闭资源,ResultSetMetaData对象,获得媒体元数据对象,循环输出每一列数据,获得本次查询的列数,11,参数设置,继续完善BaseDB的方法通用参数设置方法,告诉你个秘密,要自己写一个设置参数的方法。,如果sql中有“?”参数那该怎么办?,publicvoidsetParams(PreparedStatementps,Objectparams)if(params=null)return;for(inti=0;iparams.length;i+)ps.setObject(i+1,paramsi);,publicvoidexecuteQuery(Stringsql,Objectparams)Connectioncon=null;PreparedStatementpstmt=null;ResultSetrs=null;trycon=getConnection();pstmt=con.prepareStatement(sql);setParams(pstmt,params);rs=pstmt.executeQuery();ResultSetMetaDatard=rs.getMetaData();intcolCount=rd.getColumnCount();while(rs.next()for(inti=1;i=colCount;i+)System.out.print(rs.getString(i)+t);System.out.println();.,有了这个方法以后就太方便了!,12,Java和数据库数据类型匹配,数据库java类型对照表表示完全匹配,表示有时可以用,13,将ResultSet对象中的数据装入到集合中,思路:每一条记录的每个字段值放入到一个集合中-rowList所有记录是一个大的集合-tabList,创建一个集合用来存放表中的数据。tabList,将行的集合加入到表的集合中。,每行创建一个集合rowList用来存放每一条记录中的每一列的值,14,将ResultSet对象中的数据装入到集合中,思路:每一条记录的每个字段值放入到一个集合中所有记录是一个大的集合,intcolCount=metaData.getColumnCount();ArrayListtableData=newArrayList();while(rs.next()ArrayListrowList=newArrayList();for(inti=1;i=colCount;i+)rowList.add(rs.getString(i);tableData.add(rowList);,创建一个集合用来存放每一条记录中的每一列的值,创建一个表集合用来加载-存放每一条记录的小的集合,将行的集合加入到表的集合中。,15,创建可滚动的ResultSet对象,StatemetcreateStatement(intresultSetType,intresultSetConcurrency)PreparedStatementprepareStatement(Stringsql,intresultSetType,intresultSetConcurrency)resultSetType参数决定对象的类型(可否滚动);ResultSet.TYPE_FORWARD_ONLYResultSet.TYPE_SCROLL_INSENSITIVEResultSet.TYPE_SCROLL_SENSITIVEresultSetConcurrency参数决定并发级别;ResultSet.CONCUR_READ_ONLYResultSet.CONCUR_UPDATABLE,16,数据库编程,创建可滚动的ResultSet对象:,17,只读性可滚动结果集,con=DBManager.getCon();Stringsql=select*fromstudent;pst=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);rst=pst.executeQuery();rst.absolute(3);/定位至结果集第三条记录System.out.println(rst.getString(2);rst.previous();/定位至当前记录的上一条记录System.out.println(rst.getString(2);rst.next();/定位至当前记录的下一条记录System.out.println(rst.getString(2);rst.first();/定位至第一条记录System.out.println(rst.getString(2);rst.last();/定位至最后一条记录System.out.println(rst.getString(2);,上面的程序可获取任意位置的数据,更新数据,应使用读写可滚动结果集,18,设置具有可滚动结果集的语句对象,publicvoidrollSet()Connectioncon=null;PreparedStatementpstmt=null;ResultSetrs=null;trycon=getConnection();Stringsql1=select*fromstudent;pstmt=con.prepareStatement(sql1,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);rs=pstmt.executeQuery();ResultSetMetaDatard=rs.getMetaData();intcolCount=rd.getColumnCount();rs.absolute(4);while(rs.next()for(inti=1;i8return0elsereturn

温馨提示

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

评论

0/150

提交评论