SAP ABAP ADBC和Java JDBC的使用比较

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: SAP ABAP ADBC和Java JDBC的使用比较

Horst Keller has already introduced ADBC in his blog ABAP Geek 15 – ADBC long times ago. And recently during my self study on PostgreSQL I made some practice to connect PostgreSQL in Java programming using Java Database Connectivity – JDBC. In fact I found out that there are lots of commonality between these two technologies.


There is a demo program demo_adbc_query mentioned in SAP help to demonstrate the use of ADBC.


I make some changes on it in order to perform a line-by-line comparison with JDBC.

The source code of adapted program:


REPORT zjerry_adbc.

CLASS demo DEFINITION.

 PUBLIC SECTION.

   CLASS-METHODS main.

 PRIVATE SECTION.

   CLASS-DATA: BEGIN OF result_line,

                 carrid TYPE sflight-carrid,

                 connid TYPE sflight-connid,

                 fldate TYPE sflight-fldate,

               END OF result_line,

               result_tab LIKE TABLE OF result_line.

ENDCLASS.

CLASS demo IMPLEMENTATION.

 METHOD main.

   DATA: carrid    TYPE sflight-carrid VALUE 'AA',

         cols      TYPE adbc_column_tab,

         lv_carrid TYPE string,

         con_ref   TYPE REF TO cl_sql_connection,

         con_name  TYPE dbcon-con_name VALUE 'DEFAULT'.

   cols = VALUE #( ( CONV adbc_name( 'CARRID' ) )

                   ( CONV adbc_name( 'CONNID' ) )

                   ( CONV adbc_name( 'FLDATE' ) ) ).

   lv_carrid = cl_abap_dyn_prg=>quote( to_upper( carrid ) ).

   TRY.

       con_ref = cl_sql_connection=>get_connection( con_name ).

       DATA(statement) = con_ref->create_statement( ).

       DATA(lv_query) = `SELECT carrid, connid, fldate ` &&

        `FROM sflight ` &&

        `WHERE mandt  = ` && `'` && sy-mandt && `' AND` &&

        `      carrid = ` &&  lv_carrid.

       DATA(result) = statement->execute_query( lv_query ).

       result->set_param_table( itab_ref = REF #( result_tab )

                                corresponding_fields = cols ).

       IF result->next_package( ) > 0.

         SORT result_tab BY carrid connid fldate.

         WRITE:/ 'Number of lines found: ', lines( result_tab ).

       ENDIF.

       con_ref->close( ).

     CATCH cx_sql_exception INTO DATA(err).

   ENDTRY.

 ENDMETHOD.

ENDCLASS.

START-OF-SELECTION.

 demo=>main( ).And now have a look at how JDBC can achieve the same.

I have replicated an ABAP table COMM_PRODUCT to my local PostgreSQL server:image.pngAnd I manually inserted two test records into it:image.pngBoth is the source code implemented in Java to perform a query against this table and display result:import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.sql.Timestamp;

public class PostgreSQLJDBC {

private Connection connection = null;

private void select() {

 try {

  int index = 0;

  Class.forName("org.postgresql.Driver");

  connection = DriverManager.getConnection(

    "jdbc:postgresql://localhost:9812/zproduct", "postgres", "XXXXXX");

  Statement stmt = connection.createStatement();

  String query = "SELECT * FROM public.comm_product;";

  ResultSet rs = stmt.executeQuery(query);

         while ( rs.next() ) {

         System.out.println("Row index: " + index++);

         String  client = rs.getString("client");

            System.out.println("Client: " + client);

            String  guid = rs.getString("product_guid");

            System.out.println("Product guid: " + guid);

            Timestamp validFrom = rs.getTimestamp("valid_from");

            System.out.println("Valid from: " + validFrom);

         }

         rs.close();

         stmt.close();

         connection.close();

 } catch (Exception e) {

  e.printStackTrace();

 }  

}

public static void main(String args[]) {

 PostgreSQLJDBC jdbcTest = new PostgreSQLJDBC();

 jdbcTest.select();

}

}Output in console:image.pngAnd I mark the corresponding part in both language which has the same semantic meaning with same color ( although grammar is different ).


Through this comparison we can know that both connectivity technology follow the same idea.


image.pngFurther reading

I have written a series of blogs which compare the language feature among ABAP, JavaScript and Java. You can find a list of them below:


Lazy Loading, Singleton and Bridge design pattern in JavaScript and in ABAP

Functional programming – Simulate Curry in ABAP

Functional Programming – Try Reduce in JavaScript and in ABAP

Simulate Mockito in ABAP

A simulation of Java Spring dependency injection annotation @Inject in ABAP

Singleton bypass – ABAP and Java

Weak reference in ABAP and Java

Fibonacci Sequence in ES5, ES6 and ABAP

Java byte code and ABAP Load

How to write a correct program rejected by compiler: Exception handling in Java and in ABAP

An small example to learn Garbage collection in Java and in ABAP

String Template in ABAP, ES6, Angular and React

Try to access static private attribute via ABAP RTTI and Java Reflection

Local class in ABAP, Java and JavaScript

Integer in ABAP, Java and JavaScript

Covariance in Java and simulation in ABAP

Various Proxy Design Pattern implementation variants in Java and ABAP

Tag(Marker) Interface in ABAP and Java

Bitwise operation ( OR, AND, XOR ) on ABAP Integer

ABAP ICF handler and Java Servlet

ADBC and JDBC

CL_ABAP_CORRESPONDING, CL_JAVA_CORRESPONDING and CL_JS_CORRESPONDING

Build an Cross Site Scripting example in Java and ABAP

Play around with JSONP in nodeJS server and ABAP server


相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
6月前
|
存储 Java BI
如何使用 Java 程序通过 SAP Java Connector 调用 ABAP 系统的函数试读版
如何使用 Java 程序通过 SAP Java Connector 调用 ABAP 系统的函数试读版
50 0
如何使用 Java 程序通过 SAP Java Connector 调用 ABAP 系统的函数试读版
如何使用 Java 程序通过 SAP Java Connector 调用 ABAP 系统的函数试读版
189 0
|
JavaScript 前端开发 Java
介绍一种在ABAP内核态进行内表高效拷贝的方法,和对应的Java和JavaScript版本的伪实现
介绍一种在ABAP内核态进行内表高效拷贝的方法,和对应的Java和JavaScript版本的伪实现
153 0
介绍一种在ABAP内核态进行内表高效拷贝的方法,和对应的Java和JavaScript版本的伪实现
|
XML JSON JavaScript
ABAP,Java和JavaScript的序列化,反序列化
ABAP,Java和JavaScript的序列化,反序列化
134 0
ABAP和Java的destination和JNDI
ABAP和Java的destination和JNDI
194 0
ABAP和Java的destination和JNDI
使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数
使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数
122 0
使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数
使用Java connector消费ABAP系统的函数
使用Java connector消费ABAP系统的函数
107 0
使用Java connector消费ABAP系统的函数
|
JavaScript Java Go
ABAP,Java, nodejs和go语言的web server编程
ABAP,Java, nodejs和go语言的web server编程
ABAP,Java, nodejs和go语言的web server编程
|
Java 测试技术
如何计算并测量ABAP及Java代码的环复杂度Cyclomatic complexity
如何计算并测量ABAP及Java代码的环复杂度Cyclomatic complexity
112 0
如何计算并测量ABAP及Java代码的环复杂度Cyclomatic complexity
|
JavaScript 前端开发 Java
Java和ABAP的垃圾回收机制(Garbage Collection)比较
Java和ABAP的垃圾回收机制(Garbage Collection)比较
126 0
Java和ABAP的垃圾回收机制(Garbage Collection)比较