Java讀取InfluxDB數(shù)據(jù)庫的方法詳解
首先,創(chuàng)建一個(gè)Java項(xiàng)目,用于撰寫代碼。
接下來,配置所需要的依賴;這里我們就選擇可用于與InfluxDB數(shù)據(jù)庫進(jìn)行交互的、官方支持的Java客戶端庫influxdb-java
。因?yàn)槲沂腔?strong>Maven來配置依賴的,所以就在項(xiàng)目的pom.xml
文件中,添加如下的內(nèi)容。
<dependencies> <dependency> <groupId>org.influxdb</groupId> <artifactId>influxdb-java</artifactId> <version>2.8</version> </dependency> </dependencies>
添加上述代碼后,如下圖所示。
剛剛增添完畢上述代碼時(shí),pom.xml
文件中influxdb-java
依賴會(huì)飄紅,我們就刷新一下Maven,讓他下載對(duì)應(yīng)的依賴;如下圖所示。
隨后,可以在Dependencies中看到已經(jīng)配置好了所需的influxdb-java
依賴,如下圖所示。
接下來,即可開始撰寫代碼。這里的這個(gè)代碼僅僅是一個(gè)非常簡單的示例,只是我當(dāng)初學(xué)習(xí)用Java語言讀取InfluxDB數(shù)據(jù)庫用的;大家可以在這個(gè)基礎(chǔ)上,按照自己的需求進(jìn)一步豐富代碼邏輯。完整代碼如下所示。
import org.influxdb.InfluxDB; import org.influxdb.InfluxDBFactory; import org.influxdb.dto.Query; import org.influxdb.dto.QueryResult; import org.jetbrains.annotations.NotNull; import java.util.List; import java.util.Scanner; public class Main { private static final String url = "http://127.0.0.1:8086"; private static final String username = "root"; private static final String password = ""; public static void main(String[] args) { InfluxDB influxDB = InfluxDBFactory.connect(url, username, password); showDatabases(influxDB); showMeasurements(influxDB); showData(influxDB); } // Show database(s) private static void showDatabases(InfluxDB influxDB) { QueryResult queryResult = influxDB.query(new Query("SHOW DATABASES")); QueryResult.Series series = queryResult.getResults().get(0).getSeries().get(0); List<List<Object>> databaseList = series.getValues(); System.out.println("Database(s) is(are):"); for (List<Object> innerList: databaseList) { for (Object object: innerList) { System.out.println(object); } } System.out.println(); } // Show measurement(s) private static void showMeasurements(InfluxDB influxDB) { Scanner scanner = new Scanner(System.in); System.out.print("Please enter the database name: "); String databaseName = scanner.nextLine(); try { List<List<Object>> measurementsList = influxDB.query(new Query("SHOW MEASUREMENTS ON " + databaseName)).getResults().get(0).getSeries().get(0).getValues(); System.out.println("Measurement(s) for " + databaseName + " is(are):"); for (List<Object> innerList: measurementsList) { for (Object object: innerList) { System.out.println(object); } } System.out.println(); showTagKeys(influxDB, databaseName); showTagValues(influxDB, databaseName); showFieldKeys(influxDB, databaseName); } catch (Exception e) { System.out.println("Measurement(s) for " + databaseName + " is empty!"); return; } } // Show tag keys private static void showTagKeys(InfluxDB influxDB, String databaseName) { List<List<Object>> tagKeysList = influxDB.query(new Query("SHOW TAG KEYS ON " + databaseName)).getResults().get(0).getSeries().get(0).getValues(); System.out.println("Tag Key(s) for " + databaseName + " is(are):"); for (List<Object> innerList: tagKeysList) { for (Object object: innerList) { System.out.println(object); } } System.out.println(); } // Show tag values private static void showTagValues(InfluxDB influxDB, String databaseName) { Scanner scanner = new Scanner(System.in); System.out.print("Please enter the tag key name: "); String TagKey = scanner.nextLine(); List<List<Object>> tagValuesList = influxDB.query(new Query("SHOW TAG VALUES ON " + databaseName + " WITH KEY = " + TagKey)).getResults().get(0).getSeries().get(0).getValues(); System.out.println("Tag Value(s) is(are):"); for (List<Object> innerList: tagValuesList) { System.out.println(innerList.get(0) + ": " + innerList.get(1)); } System.out.println(); } // Show field keys private static void showFieldKeys(InfluxDB influxDB, String databaseName) { List<List<Object>> fieldKeysList = influxDB.query(new Query("SHOW FIELD KEYS ON " + databaseName)).getResults().get(0).getSeries().get(0).getValues(); System.out.println("Field Key(s) and Type(s) are:"); for (List<Object> innerList: fieldKeysList) { System.out.println(innerList.get(0) + ": " + innerList.get(1)); } System.out.println(); } // Show data private static void showData(@NotNull InfluxDB influxDB) { Scanner scanner = new Scanner(System.in); System.out.print("Please enter the database name: "); String databaseName = scanner.nextLine(); System.out.print("Please enter the measurements name: "); String measurementName = scanner.nextLine(); influxDB.setDatabase(databaseName); QueryResult dataResult = influxDB.query(new Query("SELECT * FROM " + measurementName)); System.out.println(dataResult); } }
代碼整體思路也很簡單,這里再簡單介紹一下代碼的流程。
首先,需要連接到InfluxDB數(shù)據(jù)庫。在這一部分,通過InfluxDBFactory.connect創(chuàng)建了一個(gè)本地運(yùn)行的InfluxDB實(shí)例的連接,使用默認(rèn)的URL (也就是http://127.0.0.1:8086),并配置用戶名和密碼。
隨后,showDatabases方法執(zhí)行了SHOW DATABASES,用以查詢并打印出InfluxDB實(shí)例所有數(shù)據(jù)庫的名字。從這一部分的代碼開始,后續(xù)所有代碼在操作數(shù)據(jù)庫方面的邏輯都是很類似的——通過模擬并執(zhí)行InfluxDB的數(shù)據(jù)庫語句,來實(shí)現(xiàn)各項(xiàng)操作。
接下來,showMeasurements方法可以讓我們輸入一個(gè)數(shù)據(jù)庫名,然后執(zhí)行SHOW MEASUREMENTS查詢來獲取該數(shù)據(jù)庫中所有measurement的名稱,并打印出來。如果measurement為空,則會(huì)輸出相應(yīng)的提示信息。
其次,showTagKeys方法用于列出指定數(shù)據(jù)庫的所有tag key,其后的showTagValues方法則可以讓我們輸入一個(gè)tag key名,隨后查詢并打印出該tag key對(duì)應(yīng)的所有tag value。
緊接著,showFieldKeys方法用于列出指定數(shù)據(jù)庫中所有的field key。
最后,showData方法讓我們輸入一個(gè)數(shù)據(jù)庫和measurement的名稱,隨后查詢、獲取該measurement下的所有數(shù)據(jù),并將結(jié)果直接打印出來。當(dāng)然,我這里當(dāng)初只是為了驗(yàn)證是否讀取到了measurement,所以是直接打印的;在實(shí)際應(yīng)用中,大家可以修改一下代碼,更優(yōu)雅地格式化輸出。
至此,大功告成。
以上就是Java讀取InfluxDB數(shù)據(jù)庫的方法詳解的詳細(xì)內(nèi)容,更多關(guān)于Java讀取InfluxDB的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java常用類庫Apache Commons工具類說明及使用實(shí)例詳解
這篇文章主要介紹了Java常用類庫Apache Commons工具類說明及使用實(shí)例詳解,需要的朋友可以參考下2020-02-02Android設(shè)備如何保證數(shù)據(jù)同步寫入磁盤的實(shí)現(xiàn)
這篇文章主要介紹了Android設(shè)備如何保證數(shù)據(jù)同步寫入磁盤的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09SpringMVC+MyBatis實(shí)現(xiàn)多數(shù)據(jù)源切換
在企業(yè)級(jí)應(yīng)用開發(fā)中,經(jīng)常需要處理來自不同數(shù)據(jù)庫的數(shù)據(jù),為了滿足這一需求,我們可以通過配置多個(gè)數(shù)據(jù)源來實(shí)現(xiàn)對(duì)不同數(shù)據(jù)庫的訪問,下面我們來看看具體實(shí)現(xiàn)吧2025-01-01JAVA maven項(xiàng)目使用釘釘SDK獲取token、用戶
這篇文章主要介紹了JAVA maven項(xiàng)目使用釘釘SDK獲取token、用戶,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06SpringBoot整合dataworks的實(shí)現(xiàn)過程
這篇文章主要介紹了SpringBoot整合dataworks的實(shí)現(xiàn)過程,實(shí)現(xiàn)主要是編寫工具類,如果需要?jiǎng)t可以配置成SpringBean,注入容器即可使用,需要的朋友可以參考下2022-08-08idea啟動(dòng)報(bào)錯(cuò):Command line is too long問題
在使用IDEA時(shí),若遇到"Commandlineistoolong"錯(cuò)誤,通常是因?yàn)槊钚虚L度超限,這是因?yàn)镮DEA通過命令行或文件將classpath傳遞至JVM,操作系統(tǒng)對(duì)命令行長度有限制,解決方法是切換至動(dòng)態(tài)類路徑,通過修改項(xiàng)目的workspace.xml文件2024-09-09淺談Java設(shè)計(jì)模式之七大設(shè)計(jì)原則
在此之前,我已經(jīng)寫過很多篇關(guān)于設(shè)計(jì)模式的文章.但都比較草草的理解和簡單的實(shí)現(xiàn),并未深入理解.為了更加深入感受Java設(shè)計(jì)的魅力,編程的藝術(shù),今天進(jìn)行了七大設(shè)計(jì)原則的學(xué)習(xí)理解,后續(xù)進(jìn)行23種設(shè)計(jì)模式的深入學(xué)習(xí)探究,需要的朋友可以參考下2021-05-05