使用JDBC操作SAP云平台上的HANA数据库
本文假设您对JDBC(Java Database Connectivity)有最基本的了解。您也可以将其同ADBC(ABAP Database Connectivity)做对比,细节请参考我的博客ADBC and JDBC
这篇文章分为两部分,第一部分内容:
- 介绍如何在SAP Cloud Platform(云平台)上创建一个HANA数据库实例
- 开发一个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上的应用如何访问Corporate Network内的On-Premise系统上的服务,而本文将要介绍的场景则反其道而行之:部署在On-Premise上的Java应用访问Internet Network上的SAP云平台的HANA数据库。
本文介绍的Java应用的全部源代码在我的github上:
创建SAP云平台上的HANA数据库实例
- 登陆SAP云平台Cockpit,创建一个新的HANA数据库实例:

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

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

至此这个位于SAP云平台上的HANA数据库实例已经可用了。下一步就是开发Java程序通过JDBC访问它。
使用JDBC访问HANA数据库
将我github上的Java应用import到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 bingdings页面创建:

绑定成功后,即可通过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 Channels:

将新建的数据库实例jerrydemo分配到这个新建的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。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云平台数据库的尝试成功。

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


使用JDBC操作SAP云平台上的HANA数据库的更多相关文章
- 使用Eclipse连接SAP云平台上的HANA数据库实例
SAP云平台(Cloud Platform)上的HANA数据库实例有两种方式访问: 1. 通过SAP云平台的基于网页版的Development Tool:SAP HANA Web-Based Deve ...
- 让SAP云平台上的Web应用使用destination服务
首先在SAP云平台里创建一个destination,维护service的end point: 然后打开SAP云平台的WebIDE,创建一个新的文件夹和新的HTML5 Application Descr ...
- SAP云平台上的SSO Principal Propagation设置
我今天试图使用SAP云平台的SAP WebIDE Fullstack时,发现打不开, 遇到如下错误信息: You are not authorized to work with SAP Web IDE ...
- SAP云平台上的ABAP编程环境里如何消费第三方服务
在ABAP On-Premises环境下,使用ABAP编程消费第三方服务,相信很多ABAP顾问都已经非常熟悉了,无非就是使用CL_HTTP_CLIENT或者CL_REST_HTTP_CLIENT来发送 ...
- 最简单的SAP云平台开发教程 - 如何开发UI5应用并运行在SAP云平台上
选择Services Catalog,根据关键字搜索到WebIDE服务,点击超链接打开WebIDE: 进入workspace,选择Git->Clone Repository: 从我的github ...
- 一步步用ABAP Development Tools连接SAP云平台上的ABAP编程环境
使用ABAP Development Tools的项目创建向导: New->ABAP Cloud Project: Service Instance Connection,选择SAP Cloud ...
- JDBC + SAP云平台 = 运行在云端的数据库应用
在前一篇文章JPA + EclipseLink + SAP云平台 = 运行在云端的数据库应用我介绍了如何通过JPA和EclipseLink操作部署在SAP云平台上的HANA数据库实例. 在这篇文章里, ...
- JPA + EclipseLink + SAP云平台 = 运行在云端的数据库应用
JPA(Java Persistence API)的实现Provider有Hibernate,OpenJPA和EclipseLink等等. 本文介绍如何通过JPA + Eclipse连接SAP云平台上 ...
- SAP云平台对Kubernetes的支持
截至本文发稿(2019-2-10, 农历大年初六)时为止,访问SAP云平台的官方网站:https://cloudplatform.sap.com/enterprise-paas/kubernetes. ...
随机推荐
- LVM使用
LVM框架 LVM实验环境准备 创建一个128MB的文件模拟磁盘 [centos@centos lvm]$ dd if=/dev/zero of=./disk.img count=128 bs=1MB ...
- nginx 安装遇到的问题
今天想学学 nginx,于是先把它安装起来.按照 http://nginx.org/en/linux_packages.html 上面的方法,在我的 ubuntu 虚拟机上很容易地就安装好了.可是要运 ...
- nodejs + webpack4 + babel6 结合写Chrome浏览器插件记录
最近任务不忙,有时间了看一下Chrome插件相关的东西,于是想用nodejs + webpack写一个能直出插件的小工具. 1.nodejs + babel6 + webpack4 在写之前,是有把它 ...
- 系统:Centos 7.2 内核3.10.0-327.el7.x86_64 # 内核需要高于2.6.32
系统:Centos 7.2 内核3.10.0-327.el7.x86_64 # 内核需要高于2.6.32 Drbd : 192.168.8.111:node1/dev/drdb0 /mydeta 19 ...
- java socket 网络通信 指定端口的监听 多线程 乱码
Java Socket编程 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首 ...
- JOS环境搭建
想写一个OS很久了,今天开始正式动工了!! 大家都知道操作系统是计算机科学中十分重要的一门基础学科.但是以前在学习这门课时,仅仅只是把目光停留在课本上一些关于操作系统概念上的叙述,并不能对操作系统有着 ...
- BZOJ1816(二分)
反思 由于受我第一次遇到的构造最多三角形的题的影响,这种几个分成一组最多多少组的题我老是往贪心上想. 事实上一般贪心也能贪,但这道题,还有突然想起的前些天做的cf140C,都是用二分可以更简单地解决, ...
- IE8浏览器总是无响应或卡死崩溃怎么办
IE8浏览器总是无响应或卡死崩溃怎么办 2016-05-11 11:22:31 来源:百度经验 作者:qq675495787 编辑:Jimmy51 我要投稿 IE在打开某些网页的时候经常崩溃或无响应, ...
- 设计模式——抽象工厂(Abstract Factory)
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类. ——DP UML类图 模式说明 抽象工厂与工厂方法在定义上最明显的区别是“创建一系列相关或相互依赖对象的接口”,由此可以看出抽象工 ...
- LeetCode 101 Symmetric Tree 判断一颗二叉树是否是镜像二叉树
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).For ex ...