JDBC高级特性-带存储过程.ppt

上传人:xin****828 文档编号:6288642 上传时间:2020-02-21 格式:PPT 页数:29 大小:1,014.31KB
返回 下载 相关 举报
JDBC高级特性-带存储过程.ppt_第1页
第1页 / 共29页
JDBC高级特性-带存储过程.ppt_第2页
第2页 / 共29页
JDBC高级特性-带存储过程.ppt_第3页
第3页 / 共29页
点击查看更多>>
资源描述
访问数据库 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 try con 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 try con 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 try con 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 Object params if params null return for inti 0 i params length i ps setObject i 1 params i publicvoidexecuteQuery Stringsql Object params Connectioncon null PreparedStatementpstmt null ResultSetrs null try con 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 try con 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 i colCount i System out print rs getString i t System out println catch ClassNotFoundExceptione TODOAuto generatedcatchblocke printStackTrace catch SQLExceptione 使用PreparedStatement查询数据2 2 设置可滚动不敏感 并发只读的结果集 将结果即指针直接移动到指定位置 19 在自动增长主键的表中插入一条数据 往往需要获得该数据的主键 publicintinsertGoods intresultId 1 try con getConnection Stringsql1 insertintoGoodsvalues 猪八戒 63 5 stmt con createStatement stmt executeUpdate sql1 Statement RETURN GENERATED KEYS rs stmt getGeneratedKeys if rs next resultId rs getInt 1 catch ClassNotFoundExceptione e printStackTrace catch SQLExceptione e printStackTrace finally returnresultId 获得新插入记录的主键 设置获取返回的主键 获取返回的主键 20 在自动增长主键的表中插入一条数据 往往需要获得该数据的主键 publicintinsertGoods intresultId 1 try con getConnection Stringsql1 insertintoGoodsvalues 猪八戒 63 5 stmt con prepareStatement sql1 Statement RETURN GENERATED KEYS stmt executeUpdate rs stmt getGeneratedKeys if rs next resultId rs getInt 1 catch ClassNotFoundExceptione e printStackTrace catch SQLExceptione e printStackTrace finally returnresultId 获得新插入记录的主键 设置获取返回的主键 获取返回的主键 21 2 CallableStatement 2 1CallableStatement简介 CallableStatement是PreparedStatement和Statement接口的子接口 其主要作用是调用存储过程CallableStatement的主要方法如下 除了上面的方法外 CallableStatement继承了PreparedStatement中大量的方法 22 2 2CallableStatement使用 Java中使用CallableStatement调用存储过程 可以完成复杂的数据操作 调用存储过程步骤 编写存储过程 创建CallableSatement 为存储过程赋值 执行存储过程调用 23 CallableStatement使用 CallableStatementcst connection prepareCall Stringname 如何创建CallableStatement prepareCall方法中的参数格式 call存储过程名称 如果存储过程带有参数需要在括号中加问号 并为参数赋值 call存储过程名称 有两个问号表示此存储过程有两个参数如果存储过程有输出参数应调用cst registerOutParameter 方法注册输出参数 如何设置参数 24 调用无参数存储过程 usedemoifexists select fromsysobjectswherename pro demo1 andtype p dropprocedurepro demo1gocreateprocedurepro demo1asselect fromstuclassgo con DBManager getCon cst con prepareCall callpro demo1 cst execute 调用存储过程rst cst getResultSet while rst next System out println 名称 rst getString 2 25 调用带输入参数存储过程 useDemoifexists select fromsysobjectswherename pro demo2 andtype p dropprocedurepro demo2gocreateprocedurepro demo2 majoyNamevarchar 20 输入参数asselectCOUNT fromstuclasswheremajoy majoyNamego con DBManager getCon cst con prepareCall callpro demo2 cst setString 1 计算机 cst execute rst cst getResultSet while rst next System out println 计算机专业的班级有 rst getInt 1 为输入参数赋值 26 调用带输入输出参数存储过程 useDemoifexists select fromsysobjectswherename pro demo3 andtype p dropprocedurepro demo3gocreateprocedurepro demo3 majoyNamevarchar 20 stuNumintoutputasselect stuNum COUNT fromstudent stuclasswherestudent classID stuclass idandmajoy majoyNamego con DBManager getCon cst con prepareCall callpro demo3 cst setString 1 计算机 cst registerOutParameter 2 java sql Types INTEGER cst execute System out println cst getInt 2 为输出参数赋值 获取输出参数值 27 调用带return语句存储过程 ifexists select fromsysobjectswherename pro demo4 andtype p dropprocedurepro demo4gocreateprocedurepro demo4 majoyNamevarchar 20 asif selectCOUNT fromstudent stuclasswherestudent classID stuclass idandmajoy majoyName 8return0elsereturn1go con DBManager getCon cst con prepareCall callpro demo4 cst registerOutParameter 1 java sql Types INTEGER cst setString 2 经济学 cst execute 28 总结 使用PreparedStatement语句执行如下操作 取出表employees中第10 20位的员工信息 编写通用的查询方法 可以查询任何带参数的sql 并把结果存入到LIst嵌套集合中 29
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!