使用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數據庫