package com.oracle.tutorial.jdbc; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.sql.Types; public class StoredProcedureMySQLSample { private String dbName; private Connection con; private String dbms; public StoredProcedureMySQLSample(Connection connArg, String dbName, String dbmsArg) { super(); this.con = connArg; this.dbName = dbName; this.dbms = dbmsArg; } public void createProcedureRaisePrice() throws SQLException {//新建存储过程 String createProcedure = null; String queryDrop = "DROP PROCEDURE IF EXISTS RAISE_PRICE"; createProcedure = "create procedure RAISE_PRICE(IN coffeeName varchar(32), IN maximumPercentage float, INOUT newPrice numeric(10,2)) " + "begin " + "main: BEGIN " + "declare maximumNewPrice numeric(10,2); " + "declare oldPrice numeric(10,2); " + "select COFFEES.PRICE into oldPrice " +//读取原价格 "from COFFEES " + "where COFFEES.COF_NAME = coffeeName; " + "set maximumNewPrice = oldPrice * (1 + maximumPercentage); " + "if (newPrice > maximumNewPrice) " + "then set newPrice = maximumNewPrice; " + "end if; " + "if (newPrice <= oldPrice) " + "then set newPrice = oldPrice;" + "leave main; " + "end if; " + "update COFFEES " + "set COFFEES.PRICE = newPrice " +//写入新价格 "where COFFEES.COF_NAME = coffeeName; " + "select newPrice; " + "END main; " + "end"; Statement stmt = null; Statement stmtDrop = null; try { System.out.println("Calling DROP PROCEDURE"); stmtDrop = con.createStatement(); stmtDrop.execute(queryDrop); } catch (SQLException e) { JDBCTutorialUtilities.printSQLException(e); } finally { if (stmtDrop != null) { stmtDrop.close(); } } try { stmt = con.createStatement(); stmt.executeUpdate(createProcedure); } catch (SQLException e) { JDBCTutorialUtilities.printSQLException(e); } finally { if (stmt != null) { stmt.close(); } } } public void createProcedureGetSupplierOfCoffee() throws SQLException { String createProcedure = null; String queryDrop = "DROP PROCEDURE IF EXISTS GET_SUPPLIER_OF_COFFEE"; createProcedure = "create procedure GET_SUPPLIER_OF_COFFEE(IN coffeeName varchar(32), OUT supplierName varchar(40)) " + "begin " + "select SUPPLIERS.SUP_NAME into supplierName " + "from SUPPLIERS, COFFEES " + "where SUPPLIERS.SUP_ID = COFFEES.SUP_ID " + "and coffeeName = COFFEES.COF_NAME; " + "select supplierName; " + "end"; Statement stmt = null; Statement stmtDrop = null; try { System.out.println("Calling DROP PROCEDURE"); stmtDrop = con.createStatement(); stmtDrop.execute(queryDrop); } catch (SQLException e) { JDBCTutorialUtilities.printSQLException(e); } finally { if (stmtDrop != null) { stmtDrop.close(); } } try { stmt = con.createStatement(); stmt.executeUpdate(createProcedure); } catch (SQLException e) { JDBCTutorialUtilities.printSQLException(e); } finally { if (stmt != null) { stmt.close(); } } } public void createProcedureShowSuppliers() throws SQLException { String createProcedure = null; String queryDrop = "DROP PROCEDURE IF EXISTS SHOW_SUPPLIERS"; createProcedure = "create procedure SHOW_SUPPLIERS() " + "begin " + "select SUPPLIERS.SUP_NAME, COFFEES.COF_NAME " + "from SUPPLIERS, COFFEES " + "where SUPPLIERS.SUP_ID = COFFEES.SUP_ID " + "order by SUP_NAME; " + "end"; Statement stmt = null; Statement stmtDrop = null; try { System.out.println("Calling DROP PROCEDURE"); stmtDrop = con.createStatement(); stmtDrop.execute(queryDrop); } catch (SQLException e) { JDBCTutorialUtilities.printSQLException(e); } finally { if (stmtDrop != null) { stmtDrop.close(); } } try { stmt = con.createStatement(); stmt.executeUpdate(createProcedure); } catch (SQLException e) { JDBCTutorialUtilities.printSQLException(e); } finally { if (stmt != null) { stmt.close(); } } } public void runStoredProcedures(String coffeeNameArg, float maximumPercentageArg, float newPriceArg) throws SQLException { CallableStatement cs = null; try { System.out.println("\nCalling the procedure GET_SUPPLIER_OF_COFFEE"); cs = this.con.prepareCall("{call GET_SUPPLIER_OF_COFFEE(?, ?)}");//存储过程语句 cs.setString(1, coffeeNameArg);//in的跟以前一样赋值 cs.registerOutParameter(2, Types.VARCHAR);//执行前先注册out参数 cs.executeQuery();//执行 String supplierName = cs.getString(2);//获取结果,out参数为第二个 if (supplierName != null) { System.out.println("\nSupplier of the coffee " + coffeeNameArg + ": " + supplierName); } else { System.out.println("\nUnable to find the coffee " + coffeeNameArg); } System.out.println("\nCalling the procedure SHOW_SUPPLIERS"); cs = this.con.prepareCall("{call SHOW_SUPPLIERS}"); ResultSet rs = cs.executeQuery(); while (rs.next()) { String supplier = rs.getString("SUP_NAME"); String coffee = rs.getString("COF_NAME"); System.out.println(supplier + ": " + coffee); } System.out.println("\nContents of COFFEES table before calling RAISE_PRICE:"); CoffeesTable.viewTable(this.con); System.out.println("\nCalling the procedure RAISE_PRICE"); cs = this.con.prepareCall("{call RAISE_PRICE(?,?,?)}"); cs.setString(1, coffeeNameArg); cs.setFloat(2, maximumPercentageArg); cs.registerOutParameter(3, Types.NUMERIC);//inout类型的也要注册 cs.setFloat(3, newPriceArg); cs.execute();//如果不确定会返回几个ResultSet就用这个 System.out.println("\nValue of newPrice after calling RAISE_PRICE: " + cs.getFloat(3)); System.out.println("\nContents of COFFEES table after calling RAISE_PRICE:"); CoffeesTable.viewTable(this.con); } catch (SQLException e) { JDBCTutorialUtilities.printSQLException(e); } finally { if (cs != null) { cs.close(); } } }
关于RowSet和几个不常见类型(略) (mysql没有,oracle有)
用Swing界面展现结果(略)
相关推荐
VS代码的Sourcetrail扩展 此扩展使VS Code可以与进行通信 链接 项目主页,新闻: 说明文件: 下载,评论: 代码,问题: 特征 插件设置 通过上下文菜单将VS Code中的位置发送到Sourcetrail 显示插件是否连接...
2. **学习曲线**:对于新接触JavaScript的团队,Vue.js通常因其易学性和直观的API而受到青睐。 3. **社区支持**:React和Angular拥有庞大的社区,提供丰富的资源和解决方案,但较小的框架可能更新更快,风险也相对较...
Trail 是一个专为 Scala 平台设计的轻量级路由库,主要应用于 Web 开发领域。它提供了简洁、高效的 API,使得开发者能够方便地构建和管理应用的路由规则。Trail 的设计目标是零依赖,这意味着它不依赖任何外部库,这...
续篇论文集 想要的帮助:请尝试sequelize-paper-trail@3.0.0-rc.6并给 :...const sequelize = new Sequelize ( 'database' , 'username' , 'password' ) ; 然后添加Sequelize Paper Trail很简单: const PaperTrail =
Trail 是一个协作的实时任务管理环境。 堆 Trail 的客户端使用 AngularJS 构建,使用 Firebase 作为持久性服务。 Trail 还使用 NodeJS 服务器来存储附加(外围)数据。 服务 Firebase:用于获得实时用户体验。 所有...
ProtonTrail-Godot的3D Trail插件 概述 Godot Engine的3D Trail自定义节点 在运行时生成 可调分辨率 它只是一个网格,因此您可以在其上应用自己的材料 如何使用 将存储addons到您的addons文件夹 转到Project ...
vim-sourcetrail Vim插件可将光标位置与同步。 安装 使用您选择的插件管理器。 git clone https://github.com/CoatiSoftware/vim-sourcetrail ~/.vim/bundle/vim-sourcetrail 将Plugin 'CoatiSoftware/vim-source...
Trail是一种模块化且灵活的审核跟踪日志服务。 特征 作为独立服务器运行或扩展现有服务 具有灵活架构的Postgres后端 REST和GraphQL接口 支持Fastify和Hapi框架 文献资料 完整文档可在或docs/文件夹中找到。 执照 ...
该matlab代码包含2个演示: “ demo_tr_te_CI”:matlab代码,通过使用differnet特征选择方法和机器学习分类器来计算交叉组合的诊断性能。 “ demo_heatmap_CI”:matlab代码,用于准备AUC,测试误差,灵敏度和绘制...
"Paper-Trail: OSU Hackathon 2021年Spring"是一个编程竞赛项目,可能由俄亥俄州立大学(OSU)的学生在2021年春季黑客马拉松活动中创建。项目名称“纸足迹”暗示它可能关注的是数据跟踪、环境保护或信息记录方面的...
这是一个用于跟踪的存储库 - 一...启动 Trail 的步骤: cd kibana/样品 节点服务器.js 转到浏览器并启动: 笔记: 确保 elastic-search 在 localhost:9200 上运行 在elastic-search中保留一些数据以便能够开始查询
2. **准备项目**:确保你的项目结构符合Heroku的部署要求。通常,这需要一个`Procfile`,它定义了应用启动时应执行的命令。对于Python项目,可能还需要一个`requirements.txt`文件,列出所有依赖库及其版本。 3. **...
踪迹该软件包将公开一个@trail刀片指令,您可以将其包含在主刀片或布局文件中。 此刀片指令公开了一个Trail JavaScript对象,该对象包含config和应用程序具有的命名路由的集合。 如果您知道我的意思,该指令还公开了...
审计足迹这基本上是对在上进行的先前扩展的修改。...第2步该安装表了。 您可以使用此扩展的原始作者提供的迁移文件,也可以使用迁移文件夹中捆绑SQL文件。 只需在您的数据库服务器上运行它(使用PHPMyAd
$ npm install --save eulerian-trail 用法 var eulerianTrail = require ( 'eulerian-trail' ) ; eulerianTrail ( { edges : [ [ 0 , 1 ] , [ 1 , 2 ] , [ 2 , 3 ] , [ 3 , 6 ] , [ 6 , 7 ] , [ 7 , 10 ] ,...
D3 步道布局 这是用于在 D3 中创建路径的布局函数,其中(与原生 d3.svg.line() 元素不同)您需要将特定的美学应用到行的每个元素。 演示 最初的用例是具有衰减不透明度的轨迹来表示运动:这是一个示例图像: (即将...
paper_trail 科 Ruby 活动记录 未发行 主 > = 2.5.0 > = 5.2,<6> = 2.4.0 > = 5.2,<6> = 2.3.0 > = 4.2,<6> = 2.3.0 > = 4.2,<5> = 2.2.0 > = 4.2,<5> = 2.1.0 > = 4.0,<5> = 1.9.3 > = 4.0,<5> = ...
当启用`paper_trail`后,每当你调用`Repo.insert/2`, `Repo.update/2`或`Repo.delete/2`,它都会自动创建一个新的版本记录。这些版本记录存储在`paper_trail`配置中指定的版本表中。你可以通过`PaperTrail.version_...
2. CSS 文件:这些文件定义了页面的样式,如颜色、布局和字体,使得网站具有更好的视觉效果。 3. JavaScript 文件:可能用于添加交互功能,比如地图的缩放和平移,以及点击事件触发的信息弹出。 4. 图像和媒体文件:...
区块链审计追踪 该存储库包含一个分支,在其顶部构建了概念验证的区块链审计跟踪实现。 该区块链审计追踪是我在阿姆斯特丹大学验证审计追踪数据的学士论文的一部分。 该论文的完整版本可,该实现的演示视频可在获得...