最新消息: 关于Git&GitHub 版本控制你了解多少?
您现在的位置是:群英 > 服务器 > 云计算 >
java调用hana的存储过程写法分享
CSDN发表于 2020-09-05 18:08 次浏览

今天给大家分享一下java调用 hana 的存储过程的教程。

一)存储过程写法如下:


  1.  
    CREATE PROCEDURE "HANA_BI"."com.WFJ.OFFLINE.PROCEDURES::TEST" (P_INT INT, out V_RESULT nvarchar(1000))
  2.  
    LANGUAGE SQLSCRIPT
  3.  
    SQL SECURITY INVOKER
  4.  
    --DEFAULT SCHEMA <default_schema_name>
  5.  
    --READS SQL DATA
  6.  
    AS
  7.  
    BEGIN
  8.  
    /*****************************
  9.  
    Write your procedure logic
  10.  
    *****************************/
  11.  
    IF P_INT = 0 THEN
  12.  
    SELECT '数据验证成功' INTO V_RESULT FROM DUMMY;
  13.  
    ELSE
  14.  
    SELECT '数据验证失败,数据差异如下:<br>' || string_agg('门店:' || store_name || '(' || store_id || ') ,年份:'
  15.  
    || year_code || ',月份:' || month_code || ',超市合计:' || SUPER_SUM || ',零本合计:' || STORE_SUM,';<br>') INTO V_RESULT
  16.  
    FROM (
  17.  
     
  18.  
    SELECT '大楼' AS STORE_NAME ,'21011' AS STORE_ID,'2018' AS YEAR_CODE,'09' AS MONTH_CODE,'200' AS SUPER_SUM,'205' AS STORE_SUM FROM DUMMY
  19.  
    union all
  20.  
    SELECT '大楼','21011','2018','10','200','205' FROM DUMMY
  21.  
    )
  22.  
    ;
  23.  
    END IF;
  24.  
    END;

 

 

二)java写法如下:


  1.  
     
  2.  
    /**
  3.  
    * 测试 方法1
  4.  
    */
  5.  
    public static void test1(){
  6.  
    try {
  7.  
    Connection conn = DataBaseDaoImpl.getConnection();
  8.  
    //创建存储过程的对象
  9.  
    CallableStatement c=conn.prepareCall("{call \"HANA_BI\".\"com.WFJ.OFFLINE.PROCEDURES::TEST\" (?,?) }");
  10.  
    //给存储过程的参数设置值
  11.  
    c.setInt(1,1); //将第一个参数的值设置成100
  12.  
    //注册存储过程的第二个参数
  13.  
    c.registerOutParameter(2,java.sql.Types.VARCHAR);
  14.  
    //执行存储过程
  15.  
    c.execute();
  16.  
    //得到存储过程的输出参数值
  17.  
    System.out.println (c.getString(2));
  18.  
    conn.close();
  19.  
    }catch (Exception e) {
  20.  
    e.printStackTrace();
  21.  
    }
  22.  
    }
  23.  
    /**
  24.  
    * 测试 方法2 procedures
  25.  
    */
  26.  
    public static void test2(){
  27.  
    List<Map<String, Object>> dl = new ArrayList<Map<String, Object>>();//数据集合
  28.  
    try {
  29.  
    Connection conn = DataBaseDaoImpl.getConnection();
  30.  
    //创建存储过程的对象 CALL "LTETL"."com.BJYLLT.LTETL.PROCEDURES::ETL_TEST1" ('H0');
  31.  
    CallableStatement c=conn.prepareCall("{call \"LTETL\".\"com.BJYLLT.LTETL.PROCEDURES::ETL_TEST1\" (?) }");
  32.  
    //给存储过程的参数设置值
  33.  
    c.setString(1,"1"); //第一个参数的设置值
  34.  
    //执行存储过程
  35.  
    c.execute();
  36.  
     
  37.  
    //【***注意:多个ResultSet的写法】如果不加下面这句话,拿到的是第一个ResultSet,这样写是拿到下一个ResultSet。
  38.  
    boolean isResultSet = c.getMoreResults();
  39.  
    if (!isResultSet) {
  40.  
    System.out.println("The next result is not a ResultSet.");
  41.  
    return;
  42.  
    }
  43.  
    //得到存储过程的输出参数值
  44.  
    ResultSet rs = c.getResultSet();
  45.  
    ResultSetMetaData rsmetaData = rs.getMetaData();
  46.  
     
  47.  
    while(rs.next()){
  48.  
    Map<String, Object> data = new HashMap<String, Object>();//单行数据
  49.  
    for(int i=1;i<=rsmetaData.getColumnCount();i++){//从1开始
  50.  
    data.put(rsmetaData.getColumnName(i), rs.getObject(i));
  51.  
    }
  52.  
    dl.add(data);
  53.  
    }
  54.  
    System.out.println("###总共 "+dl.size()+"条记录");
  55.  
    if(dl.size()<1000)System.out.println(dl);
  56.  
    conn.close();
  57.  
    }catch (Exception e) {
  58.  
    e.printStackTrace();
  59.  
    }
  60.  
    }
 

--over

标签:Java编程写法
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
相关信息推荐