zoukankan      html  css  js  c++  java
  • Trail: JDBC(TM) Database Access(2)

    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("
    Calling 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("
    Supplier of the coffee " + coffeeNameArg + ": " + supplierName);          
          } else {
            System.out.println("
    Unable to find the coffee " + coffeeNameArg);        
          }
          
          System.out.println("
    Calling 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("
    Contents of COFFEES table before calling RAISE_PRICE:");
          CoffeesTable.viewTable(this.con);
          
          System.out.println("
    Calling 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("
    Value of newPrice after calling RAISE_PRICE: " + cs.getFloat(3));
          
          System.out.println("
    Contents 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界面展现结果(略)

  • 相关阅读:
    校园WebGIS开发与实践(论文部分)
    初来博客园,请多多关照
    MIFtoTAB and TABtoMIF(MIF和TAB互转小工具)
    MIFtoSHP通用转换工具
    activity 对home 按钮事件的处理
    在XML布局文件里,会遇到的一些单位
    自己写的Adapter 无法被鼠标点中问题
    linux 下查看文件修改时间 等
    Android中使用GridView分页显示系统所安装的应用,支持拖动与手势滑动
    getLaunchIntentForPackage 获取到的为null原因
  • 原文地址:https://www.cnblogs.com/gcg0036/p/4143609.html
Copyright © 2011-2022 走看看