如何使用JDBC將JSON陣列插入/儲存到資料庫中?
JSON陣列是一個有序的值集合,包含在方括號中,即以“[”開頭,以“]”結尾。陣列中的值用“,”(逗號)分隔。
JSON陣列示例
{ "books": [ Java, JavaFX, Hbase, Cassandra, WebGL, JOGL] }
json-simple是一個輕量級的庫,用於處理JSON物件。使用它,您可以使用Java程式讀取或寫入JSON文件的內容。
JSON-Simple Maven依賴
以下是JSON-simple庫的Maven依賴項:
<dependencies> <dependency> <groupId>com.googlecode.json-simple</groupId> <artifactId>json-simple</artifactId> <version>1.1.1</version> </dependency> </dependencies>
將這段程式碼貼上到pom.xml檔案的`
示例
讓我們使用CREATE語句在MySQL資料庫中建立一個名為**MyPlayers**的表,如下所示:
CREATE TABLE MyPlayers( ID INT, First_Name VARCHAR(255), Last_Name VARCHAR(255), Date_Of_Birth date, Place_Of_Birth VARCHAR(255), Country VARCHAR(255), PRIMARY KEY (ID) );
現在,我們將建立一個JSON文件 (players_data.json),其中包含一個文件陣列,陣列中的每個文件代表上面建立的MyPlayers表中的一條記錄,如下所示:
{ "players_data": [ { "ID": "1", "First_Name": "Shikhar", "Last_Name": "Dhawan", "Date_Of_Birth": "1981-12-05", "Place_Of_Birth":"Delhi", "Country": "India" }, { "ID": "2", "First_Name": "Jonathan", "Last_Name": "Trott", "Date_Of_Birth": "1981-04-22", "Place_Of_Birth":"CapeTown", "Country": "SouthAfrica" }, { "ID": "3", "First_Name": "Kumara", "Last_Name": "Sangakkara", "Date_Of_Birth": "1977-10-27", "Place_Of_Birth":"Matale", "Country": "Srilanka" }, { "ID": "4", "First_Name": "Virat", "Last_Name": "Kohli", "Date_Of_Birth": "1988-11-05", "Place_Of_Birth":"Mumbai", "Country": "India" }, { "ID": "5", "First_Name": "Rohit", "Last_Name": "Sharma", "Date_Of_Birth": "1987-04-30", "Place_Of_Birth":"Nagpur", "Country": "India" }, { "ID": "6", "First_Name": "Ravindra", "Last_Name": "Jadeja", "Date_Of_Birth": "1988-12-06", "Place_Of_Birth":"Nagpur", "Country": "India" }, { "ID": "7", "First_Name": "James", "Last_Name": "Anderson", "Date_Of_Birth": "1982-06-30", "Place_Of_Birth":"Burnely", "Country": "England" }, { "ID": "8", "First_Name": "Ryan", "Last_Name": "McLaren", "Date_Of_Birth": "1983-02-09", "Place_Of_Birth":"South Africa", "Country": "India" } ] }
要使用JDBC將**JSON**陣列的內容寫入資料庫:
獲取資料庫連線
- 使用DriverManager類的**registerDriver()**方法或名為Class的類的forName()方法註冊所需資料庫的驅動程式類。
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
- 透過將資料庫的URL、資料庫使用者的使用者名稱和密碼(以字串格式)作為引數傳遞給DriverManager類的**getConnection()**方法來建立一個連線物件。
Connection mysqlCon = DriverManager.getConnection(mysqlUrl, "root", "password");
讀取JSON檔案的內容
- 例項化json-simple庫的JSONParser類。
JSONParser jsonParser = new JSONParser();
- 使用**parse()**方法解析獲得的物件的內容。
//Parsing the contents of the JSON file JSONObject jsonObject = (JSONObject) jsonParser(new FileReader("E:/players_data.json"));
- 使用**get()**方法將json陣列檢索到JSONArray物件中。
JSONArray jsonArray = (JSONArray) jsonObject.get("contact");
將讀取的JSON內容插入MyPlayers表
- 建立一個**PreparedStatement**物件以將值插入MyPLayers表。
PreparedStatement pstmt = con.prepareStatement("INSERT INTO MyPlayers values (?, ?, ?, ?, ?, ? )");
- 對於JSON陣列中的每條記錄,使用get方法檢索鍵值對,並使用setXXX()方法將值設定到PreparedStatement的相應繫結變數。
JSONObject record = (JSONObject) object; int id = Integer.parseInt((String) record.get("ID")); String first_name = (String) record.get("First_Name"); pstmt.setInt(1, id); pstmt.setString(2, first_name);
下面的JDBC程式將players_data.json檔案的內容插入MyPlayers表。
示例
import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.sql.Connection; import java.sql.Date; import java.sql.DriverManager; import java.sql.PreparedStatement; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; public class JsonToDatabase { public static Connection ConnectToDB() throws Exception { //Registering the Driver DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //Getting the connection String mysqlUrl = "jdbc:mysql:///mydatabase"; Connection con = DriverManager.getConnection(mysqlUrl, "root", "password"); System.out.println("Connection established......"); return con; } public static void main(String args[]) { //Creating a JSONParser object JSONParser jsonParser = new JSONParser(); try { //Parsing the contents of the JSON file JSONObject jsonObject = (JSONObject) jsonParser.parse(new FileReader("E:/players_data.json")); //Retrieving the array JSONArray jsonArray = (JSONArray) jsonObject.get("players_data"); Connection con = ConnectToDB(); //Insert a row into the MyPlayers table PreparedStatement pstmt = con.prepareStatement("INSERT INTO MyPlayers values (?, ?, ?, ?, ?, ? )"); for(Object object : jsonArray) { JSONObject record = (JSONObject) object; int id = Integer.parseInt((String) record.get("ID")); String first_name = (String) record.get("First_Name"); String last_name = (String) record.get("Last_Name"); String date = (String) record.get("Date_Of_Birth"); long date_of_birth = Date.valueOf(date).getTime(); String place_of_birth = (String) record.get("Place_Of_Birth"); String country = (String) record.get("Country"); pstmt.setInt(1, id); pstmt.setString(2, first_name); pstmt.setString(3, last_name); pstmt.setDate(4, new Date(date_of_birth)); pstmt.setString(5, place_of_birth); pstmt.setString(6, country); pstmt.executeUpdate(); } System.out.println("Records inserted....."); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
輸出
Connection established...... Records inserted......
如果您使用SELECT語句驗證MyPlayers表的內容,您可以看到插入的記錄如下:
mysql> select * from MyPlayers; +----+------------+------------+---------------+----------------+-------------+ | ID | First_Name | Last_Name | Date_Of_Birth | Place_Of_Birth | Country | +----+------------+------------+---------------+----------------+-------------+ | 1 | Shikhar | Dhawan | 1981-12-05 | Delhi | India | | 2 | Jonathan | Trott | 1981-04-22 | CapeTown | SouthAfrica | | 3 | Kumara | Sangakkara | 1977-10-27 | Matale | Srilanka | | 4 | Virat | Kohli | 1988-11-05 | Mumbai | India | | 5 | Rohit | Sharma | 1987-04-30 | Nagpur | India | | 6 | Ravindra | Jadeja | 1988-12-06 | Nagpur | India | | 7 | James | Anderson | 1982-06-30 | Burnely | England | | 8 | Ryan | McLaren | 1983-02-09 | South Africa | India | +----+------------+------------+---------------+----------------+-------------+ 8 rows in set (0.00 sec
廣告