使用 Java preparedStatement 將 JSON 物件插入 PostgreSQL
一、簡介
在現代軟體開發中,由於 JSON 資料的輕量級和多功能性,處理 JSON 資料已經變得無所不在。 PostgreSQL 憑藉對 JSON 的強大支持,為儲存和查詢 JSON 資料提供了一個優秀的平台。 Java作為一種流行的程式語言,經常使用JDBC與資料庫進行互動。本文示範如何使用Java的PreparedStatement
將JSON物件插入PostgreSQL資料庫。
2. 依賴關係
在深入研究程式碼之前,我們需要設定環境。除了安裝和執行 PostgreSQL 之外,我們還需要在專案的依賴項中包含 PostgreSQL JDBC 驅動程式和org.json
程式庫。
2.1.安裝並執行 PostgreSQL
如果沒有安裝PostgreSQL,我們可以從PostgreSQL官方網站下載並安裝。考慮到 PostgreSQL 已經支援 JSON 相當長的時間了,我們可以選擇從 PostgreSQL 9 開始的任何版本。憑證運行和存取。
2.2.包括 PostgreSQL JDBC 驅動程式
將 PostgreSQL JDBC 驅動程式新增到我們專案的依賴項。對於 Maven 項目,我們需要在pom.xml
中指定依賴項:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.3</version>
</dependency>
2.3.包括 JSON 庫依賴項
為了在 Java 程式碼中使用 JSON 數據,我們還需要包含一個 JSON 函式庫作為依賴項。有幾個可用於 Java 的流行 JSON 庫,例如Jackson
、 Gson
和org.json
。在本文中,我們將使用org.json
庫,它提供了一個簡單且輕量級的 JSON 處理解決方案。要在我們的專案中包含org.json
庫,我們可以將以下依賴項新增到 Maven 專案的 pom.xml 檔案中:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20240303</version>
</dependency>
現在我們已經具備了必要的依賴項,接下來我們將繼續建立表格並編寫 Java 程式碼來插入 JSON 資料。
3. JSONB 與 JSON 類型
PostgreSQL 提供了兩種主要類型來儲存 JSON 資料: JSONB
和JSON
。雖然這兩種類型都用於儲存和操作 JSON 數據,但它們有一些區別。
JSONB
類型提供高效率的二進位儲存和索引功能,從而加快查詢執行速度。它在插入期間執行 JSON 資料的驗證和轉換,保留 JSON 物件中鍵的順序。 PostgreSQL 可以自動將其他資料類型的值轉換為JSON
。
另一方面, JSON
類型將 JSON 資料儲存為純文本,沒有二進位表示或專門的索引。它在插入期間執行驗證,但缺乏JSONB
的最佳化和鍵順序保存。使用JSONB
類型時,需要明確轉換或轉換才能將值轉換為 JSON。
在本文中,我們將利用JSONB
類型在 PostgreSQL 中儲存和查詢 JSON 資料。
4. 建立帶有 JSON 欄位的 PostgreSQL 表
首先,我們需要建立一個包含 JSON 欄位的 PostgreSQL 表。連接到我們之前設定的 PostgreSQL 實例並執行以下 SQL 命令:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
info JSONB
);
該表具有三個欄位: id
、 name
和info
。 info
列的類型為JSONB
,以二進位格式儲存 JSON 數據,提供高效率的儲存和查詢能力。
5. 編寫Java程式碼插入JSON數據
現在,讓我們轉向 Java 部分。我們將編寫一個 Java 程序,使用PreparedStatement
將 JSON 資料插入users
表中。
5.1.建立資料庫連接
首先,我們需要建立與 PostgreSQL 資料庫的 JDBC 連線。這是獲取資料庫連線的方法:
public class InsertJsonData {
private static final String URL = "jdbc:postgresql://localhost:5432/database_name";
private static final String USER = "username";
private static final String PASSWORD = "password";
public Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USER, PASSWORD);
}
}
請注意, database_name
、 username
和password
需要替換為實際的PostgreSQL資料庫名稱、使用者名稱和密碼。
5.2.插入 JSON 數據
接下來,我們需要寫一個方法將 JSON 物件插入users
表中:
public class InsertJsonData {
public static void insertUser(String name, JSONObject info) {
String sql = "INSERT INTO users (name, info) VALUES (?, ?::jsonb)";
Connection conn = DatabaseConnection.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, name);
pstmt.setString(2, info.toString());
pstmt.executeUpdate();
System.out.println("Data inserted successfully.");
}
public static void main(String[] args) {
JSONObject jsonInfo = new JSONObject();
jsonInfo.put("email", "[email protected]");
jsonInfo.put("age", 30);
jsonInfo.put("active", true);
insertUser("John Doe", jsonInfo);
}
}
5.3.代碼分解
讓我們分解程式碼並探索它的一些組件:
- 資料庫連線:
getConnection()
方法建立與 PostgreSQL 資料庫的連線。 - SQL 查詢:
INSERT INTO users (name, info) VALUES (?, ?::jsonb)
查詢將一筆記錄插入到users
表中。?::jsonb
語法是用於型別轉換的 PostgreSQL 特定語法。雙冒號運算子::是PostgreSQL中CAST
關鍵字的同義詞,表示類型轉換操作。透過使用?::jsonb
,我們指示 PostgreSQL 將第二個參數(即 JSON 字串)轉換為jsonb
資料類型,然後再將其插入info
列。這允許在 PostgreSQL 中正確處理和儲存 JSON 資料。 - PreparedStatement:
PreparedStatement
設定參數並執行SQL查詢。pstmt.setString(1, name)
設定name
,pstmt.setString(2, info.toString())
設定 JSON 資料。 - JSON 處理:org.json 庫中的
JSONObject
類別建立並處理 JSON 資料。
六,結論
使用Java 的PreparedStatement
將JSON 物件插入PostgreSQL 中既簡單又有效率。這種方法利用了 PostgreSQL 強大的 JSON 功能和 Java 強大的 JDBC API。按照本文概述的步驟,我們可以將 JSON 資料無縫地儲存在 PostgreSQL 資料庫中,並利用其豐富的查詢功能。
在某些情況下,如果資料庫操作首選 Java Persistence API (JPA),那麼探索使用 Spring Boot 和 JPA 儲存 PostgreSQL JSONB 資料可能會有所幫助。這種方法提供了另一種將 JSON 資料插入 PostgreSQL 資料庫的便捷方法。
與往常一樣,原始碼可以在 GitHub 上取得。