本文介紹通過JDBC向時序引擎中寫入數據的方法。
基于JDBC開發高效數據寫入的應用
對于使用JDBC進行應用開發的場景,為了達到高效數據寫入的目的,推薦使用JDBC中的PreparedStatement
實現INSERT語句的批量寫入。具體步驟如下:
使用JDBC創建
Connection
對象。通過JDBC建立連接的方法,詳細可參見通過JDBC Driver連接使用(推薦)。
創建
PreparedStatement
對象并指定帶參數的INSERT語句。以"如何為時序數據建表"章節中介紹的示例為基礎,創建
PreparedStatement
的方法如下所示:StringBuilder builder = new StringBuilder(); builder.append("INSERT INTO aqm (city, district, id, time, pm2_5, pm10, so2, no2) "); builder.append("VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); PreparedStatement preparedStmt = connection.prepareStatement(builder.toString());
對
PreparedStatement
對象進行批量的輸入參數綁定,并實際執行寫入。對于上一步的INSERT語句,綁參的示例代碼如下:
for (int i = 0; i < batchSize; i++) { // 按INSERT語句中的列參數指定順序依次綁參 // 下述代碼中的 city, district, id, ts, pm25等都是用于綁參的局部變量 preparedStmt.setString(1, city); preparedStmt.setString(2, district); preparedStmt.setString(3, id); preparedStmt.setTimestamp(4, ts); preparedStmt.setDouble(5, pm25); preparedStmt.setDouble(6, pm10); preparedStmt.setDouble(7, so2); preparedStmt.setDouble(8, no2); // 加入批次 preparedStmt.addBatch(); } // 執行一個批次的寫入 int[] results = preparedStmt.executeBatch(); // 從results中查詢實際寫入的數據記錄數。以下略 }
說明
時序引擎的JDBC中的
PreparedStatement
只支持無命名參數(即通過占位符“?”指定參數),因此在實際調用PreparedStatement
的綁參API時,需要確保setXXX()
方法中指定的參數index所對應的參數值與INSERT語句中占位符所對應列一致。PreparedStatement
在執行executeBatch()
前綁定的參數批次并不是越多越好,其性能表現往往與表定義相關。根據實際測試的結果,如果表定義中僅有1個Field,并且TAG列的個數不超過5個時,PreparedStatement
執行的一個批次的個數為5000(即上述代碼示例中的batchSize
變量大小)性能最優。
文檔內容是否對您有幫助?