zoukankan      html  css  js  c++  java
  • 使用ABAP(ADBC)和Java(JDBC)连接SAP HANA数据库

    在表DBCON里维护一条记录,指向HANA数据库。con_ENV里填入HANA数据库的主机名和端口号。如vmXXXX:30015

    DATA: ls_new TYPE DBCON.
    
    ls_new-con_name = 'HAN'.
    ls_new-dbms = 'HDB'.
    ls_new-user_name = 'system'.
    ls_new-password = 'Sap12345'.
    ls_new-con_env = 'vml2018:30015'.
    
    
    CALL FUNCTION 'DBCON_INSERT'
      EXPORTING
        DBCON_WORKAREA                = ls_new
      EXCEPTIONS
        DBCON_KEY_EXISTS              = 1
        SECURE_STORE_KEY_EXISTS       = 2
        SECURE_STORE_OTHER            = 3
        OTHERS                        = 4
              .
    IF SY-SUBRC = 0.
       WRITE:/ 'Insert Successfully'.
    ENDIF.
    然后使用ABAP代码创建一个新的table,插入三条entry进行,再读出来,最后删除table.
    TYPES:
         BEGIN OF result_t,
            key TYPE i,
            value TYPE string,
         END OF result_t.
    
    
    DATA: connection TYPE dbcon-con_name VALUE 'HAN',
          stmt_ref TYPE REF TO cl_sql_statement,
          cx_sql_exception TYPE REF TO cx_sql_exception,
          lv_text TYPE string,
          res_ref TYPE REF TO cl_sql_result_set,
          d_ref TYPE REF TO DATA,
          result_tab TYPE TABLE OF result_t,
          result_line TYPE result_t,
          row_cnt TYPE i,
          con_ref TYPE REF TO cl_sql_connection.
    
    con_ref = cl_sql_connection=>get_connection( connection ).
    stmt_ref = con_ref->create_statement( ).
    
    TRY.
    
       stmt_ref->execute_ddl( 'CREATE TABLE I042416_TESTPROC_TAB( key INT PRIMARY KEY, value NVARCHAR(255) )' ).
       stmt_ref->execute_update( 'INSERT INTO I042416_TESTPROC_TAB VALUES(1, ''First value'' )' ).
       stmt_ref->execute_update( 'INSERT INTO I042416_TESTPROC_TAB VALUES(2, ''Second value'' )' ).
       stmt_ref->execute_update( 'INSERT INTO I042416_TESTPROC_TAB VALUES(3, ''Third value'' )' ).
       res_ref = stmt_ref->execute_query( 'SELECT * FROM I042416_TESTPROC_TAB' ).
       GET REFERENCE OF result_tab INTO d_ref.
       res_ref->set_param_table( d_ref ).
       row_cnt = res_ref->next_package( ).
       stmt_ref->execute_ddl( 'DROP TABLE I042416_TESTPROC_TAB' ).
    CATCH cx_sql_exception INTO cx_sql_exception.
       lv_text = cx_sql_exception->get_text( ).
       WRITE:/ 'Error:' , lv_text.
    ENDTRY.
    
    LOOP AT result_tab INTO result_line.
       WRITE:/ 'Key:' , result_line-key, ' Value:', result_line-value.
    ENDLOOP.  
    

    Java实现类似:

    
    public static void main(String[] args) {
                 try
                 {
                        Class.forName("com.sap.db.jdbc.Driver");
                        System.out.println("Create a connection...");
                  con = (com.sap.db.jdbc.trace.Connection) DriverManager
                           .getConnection("jdbc:sap://<HANA数据库主机名>:30015",// ,
                                    "system", "此处填入登录密码");
                        cs = (com.sap.db.jdbc.trace.CallableStatement) con.prepareCall("call I042416_two_par(NULL, NULL)");
                        cs.execute();
                       
                        int index = 0;
                        do
                        {
                               int rowCount = 0;
                               com.sap.db.jdbc.trace.ResultSet rs = (com.sap.db.jdbc.trace.ResultSet)cs.getResultSet();
                               ResultSetMetaData metaData = rs.getMetaData();
                               int columnCount = metaData.getColumnCount();
                               while (rs != null && rs.next())
                               {
                                     for (int i = 1; i <= columnCount; i++)
                                     {
                                            System.out.print(rs.getString(i) + " ");
                                            if (i == columnCount)
                                            {
                                                   System.out.println();
                                            }
                                     }
                                     System.out.println("Current Result Set Index:" + index + " Row Count: " + rowCount++);
                              
                               }
                               System.out.println("Result Set Index: " + index++);                          
                        } while(cs.getMoreResults());
                 }
    
    

    console打印结果:数据能够成功通过JDBC从HANA数据库读取出来。

    要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

  • 相关阅读:
    document.getElementById("mytxt").style.left=""style.left在IE的FF中注意
    asp.net 用户控件中 使用相对路径的解决方法 图片路径问题(用户控件、图片路径) ,ResolveUrl
    探索 Block (一) (手把手讲解Block 底层实现原理)
    iOS 多线程开发 (概念与API简介)
    iOS 性能小点
    iOS runtime (二)(runtime学习之AutoCoding源码分析)
    探索 NSRunLoop (二)(NSRunLoop 自己动手实现SimpleRunLoop)
    iOS NSNotificationCenter (自己实现一个通知中心XMCNotificationCenter)
    iOS runtime (三)(runtime学习之YYModel源码分析)
    iOS runtime(一)(runtime 分析理解)
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/8833222.html
Copyright © 2011-2022 走看看