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

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏面朝大海春暖花开

mysql树形结构递归查询

之前一直用的是Oracle,对于树形查询可以使用start with ... connect by 

6254
来自专栏乐沙弥的世界

PL/SQL --> 动态SQL

使用动态SQL是在编写PL/SQL过程时经常使用的方法之一。很多情况下,比如根据业务的需要,如果输入不同查询条件,则生成不同的执行

721
来自专栏乐沙弥的世界

MySQL EXPLAIN SQL 输出信息描述

1072
来自专栏技术之路

使用Linq to Sql 创建数据库和表

1.建一个类Article 1 using System.Data.Linq.Mapping; 2 3 4 5 [Table(Name =...

2037
来自专栏杨建荣的学习笔记

关于sql_profile中的绑定变量(r4笔记第57天)

使用sql_profile来调优一些紧急的性能sql可以起到立竿见影的效果,如果sql语句本身结构就很清晰,简单,略作修改就能得到调优后的sql语句。 但是如果...

3666
来自专栏乐沙弥的世界

PL/SQL --> 动态SQL的常见错误

动态SQL在使用时,有很多需要注意的地方,如动态SQL语句结尾处不能使用分号(;),而动态PL/SQL结尾处需要使用分号(;),但不能使用正

862
来自专栏小白鼠

HIVE基础命令Sqoop导入导出插入表问题动态分区表创建HIVE表脚本筛选CSV中的非文件行GROUP BYSqoop导出到MySQL字段类型问题WHERE中的子查询CASE中的子查询

从一个表查数据插入到另一个表中,出现以下异常: 'STATUS' in insert schema specification is not found am...

1.5K2
来自专栏数据之美

Hive 基础(2):库、表、字段、交互式查询的基本操作

1、命令行操作 (1)打印查询头,需要显示设置: set hive.cli.print.header=true; (2)加"--",其后的都被认为是注释...

65210
来自专栏文渊之博

DATETIME类型和BIGINT 类型互相转换

项目中使用BIGINT来存放时间,以下代码用来转换时间类型和BIGINT类型 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIE...

2198
来自专栏WindCoder

where in与join 查询

Oracle:当前所用版本中,限制in中的参数不能超过 1000个。当超出时会被报错"ORA-01795异常(where in超过1000)的解决"。

3720

扫码关注云+社区

领取腾讯云代金券