Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
JerryWang
Advisor
Advisor
0 Kudos

本文假设您对JDBC(Java Database Connectivity)有最基本的了解。您也可以将其同ADBC(ABAP Database Connectivity)做对比,细节请参考我的博客: ADBC and JDBC

这篇文章分为两部分,第一部分内容:

1. 介绍如何在SAP Cloud Platform(云平台)上创建一个HANA数据库实例
2. 开发一个Java应用,部署到SAP云平台上。该Java应用使用JDBC操作同样处于SAP云平台上的HANA数据库。

第二部分内容:

开发一个Java应用,部署在位于Corporate Network的On-Premise系统里。该Java应用通过Cloud Connector访问位于SAP云平台上的HANA实例。我的前一篇公众号文章 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数 介绍了部署在Internet Network上的应用如何访问On-Premise系统上的服务,而本文将要介绍的场景则反其道而行之:部署在On-Premise系统上的Java应用访问Internet Network上的SAP云平台HANA数据库。

本文介绍的Java应用的全部源代码在我的github上。

创建SAP云平台上的HANA数据库实例


1. 登陆SAP云平台Cockpit,创建一个新的HANA数据库实例:



设置数据库ID和System User密码。这里我设置的数据库实例ID为hana01, 后面会使用到。



创建成功后,数据库实例状态变为STARTED,可以把其Development Tools的链接加到收藏夹里,后面也会用到。



至此这个位于SAP云平台上的HANA数据库实例已经可用了。下一步就是开发Java程序通过JDBC访问它。

使用JDBC访问HANA数据库


将我github上的Java应用导入到Eclipse,如下图所示。



应用主要分三个文件:

● Person.java
定义了Person模型,包含id,firstName和lastName三个成员,以及对应的getter和setter方法。该类即所谓的POJO(Plain Old Java Object)。POJO这个名字用来强调它是一个普通Java对象,没有遵从任何特定的Java约定或框架(如EJB)。

● PersonDAO.java

顾名思义: DAO - Data Access Object。通过JDBC连接HANA数据库实例,创建名为T_PERSONS的数据库表,以及往表里插入数据的逻辑都写在这个DAO类里。

● PersistenceWithJDBCServlet.java

通过该Servlet实现了一个最简单的UI,用于接受用户输入并调用PersonDAO将输入发送到HANA数据库实例。

JDBC数据库DataSource实例的获取通过JNDI完成,该实例作为输入参数传入到DAO构造函数,所有接下来的JDBC操作均通过该DataSource进行。



这个DefaultDB的配置位于web.xml:



将该应用部署到SAP云平台,应用名为jerryjdbc。



此时仅仅通过上图web.xml的配置,该Java应用还无法知道在SAP云平台上到底要操作哪个数据库实例。
为此我们需要将jerryjdbc这个应用同第一步创建的HANA数据库实例hana01绑定起来。该绑定通过下图的Data Source bindings页面创建:



绑定成功后,即可通过Servlet UI提供的简易界面,向HANA数据库实例里插入一个Person记录 Jerry Wang。



在手机上访问该数据库实例,能看到刚刚插入的Jerry Wang。


On-Premise系统应用连接Internet Network上的数据库实例


前文介绍的Java应用和HANA数据库实例均位于SAP云平台。我的前一篇公众号文章 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数 介绍了部署在Internet Network上的应用如何访问Corporate Network上的服务,现在我们试着把访问方向翻转:现在我把Java应用部署在Corporate Network里,比如SAP成都研究院机房的一台服务器上,让该Java应用去连接SAP云平台上的HANA数据库实例。

同样的,这里再次需要使用到Cloud Connector。


配置Cloud Connector完成从On-Premise系统到Cloud的连接


在SAP云平台创建另一个HANA数据库实例,取名为jerrydemo。然后登录Cloud Connector,点击标签On-Premise to Cloud,创建一个新的Service Channel:



将新建的数据库实例jerrydemo分配到这个新建的Channel去:



Channel创建成功后,如下图所示。注意生成的端口号32215,后续会使用。


修改On-Premise系统上Java Server配置,让其指向SAP云平台的数据库实例


Java应用的代码无需做任何调整,仅需更改Server配置。修改Servers文件夹下的文件connection.properties, 明细如下:



目的就是将该Server的数据库连接指向Cloud Connector上刚刚配置好的Service Channel,通过Cloud Connector作为桥梁连接到SAP云平台上的HANA数据库。

● javax.persistence.jdbc.url
指向的localhost:32215即Cloud Connector上配置的Service Channel,我给该Channel分配的HANA数据库实例ID为jerrydemo。该url片段currentschema=SYSTEM意为接下来通过JDBC创建的数据库表会分配到SYSTEM schema下。

● javax.persistenc.jdbc.user / password
填入jerrydemo这个数据库实例的访问用户名和密码。

至此所有配置完成。
启动On-Premise系统上的localhost服务器,插入两条数据:



打开SAP云平台上的HANA Development Tool(其链接的获得方式前文已经介绍过),从SYSTEM这个Schema下能观察到通过刚才运行在On-Premise系统上的Web应用插入的两条记录,说明从On-Premise系统写入SAP云平台数据库的尝试成功。