1. 程式人生 > >使用JDBC操作SAP雲平臺上的HANA數據庫

使用JDBC操作SAP雲平臺上的HANA數據庫

生成 發送 服務器 服務 平臺 接下來 嘗試 約定 數據

本文假設您對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上的應用如何訪問Corporate 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應用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數據庫