• 使用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的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

  • 相关阅读:
    【JDK8特性】Stream接口详解
    【JDK8特性】Optional包装类详解
    【JDK8特性】lambda表达式详解
    关闭windows defender 扫描目录
    IIS服务启动提示当文件已存在时,无法创建该文件,183(转载)
    java部署到ubuntu
    设计模式之模板模式
    Aop示例之注解切面方式实现日志打印
    多线程实现生产消费模式
    关于linux-centos 7.x中使用xfreerdp命令去连接windows主机的远程桌面
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/8833222.html
Copyright © 2020-2023  润新知