试图通过Java连接InfluxDB。请检查以下代码:
public InfluxConnect() {
this.influxDB = InfluxDBFactory.connect("http://localhost:8086", "avinflux", "Stallions@7891");
this.influxDB.setLogLevel(InfluxDB.LogLevel.BASIC);
Pong response = this.influxDB.ping();
if (response.getVersion().equalsIgnoreCase("unknown")) {
System.out.println("unknown");
}
else System.out.println("response is : "+response.toString());
try {
@SuppressWarnings("deprecation")
String databaseName = "NOAA_water_database";
this.influxDB.query(new Query("CREATE DATABASE " + databaseName));
this.influxDB.setDatabase(databaseName);
}
catch(Exception e)
{
System.out.println("In Catch");
e.printStackTrace();
}
}
**我正在犯的错误**
Jul 27, 2021 3:40:57 PM okhttp3.internal.platform.Platform log
INFO: <-- 401 Unauthorized http://192.168.105.191:8086/query?q=CREATE+DATABASE+NOAA_water_database (0ms, 48-byte body)
In Catch
org.influxdb.InfluxDBException: {"code":"unauthorized","message":"Unauthorized"}
at org.influxdb.InfluxDBException.buildExceptionForErrorState(InfluxDBException.java:175)
当我在web浏览器上点击http://localhost:8086/之后使用相同的凭证,并且它运行良好,但是当我试图通过java代码连接时,它不工作,并且抛出以上的异常。
找不到问题到底在哪里。
有人能建议/找出这个问题吗?
发布于 2021-12-09 18:44:05
当我试图用进水数据库编写数据时,我也面临着同样的问题。但是我已经通过更新图书馆来解决这个问题。我相信您使用的是进水数据库2.x版本,而不是1.x。在这种情况下,请使用以下依赖项。
而不是
<dependency>
<groupId>org.influxdb</groupId>
<artifactId>influxdb-java</artifactId>
<version>${influxdb.version}</version>
</dependency>
使用这个
<dependency>
<groupId>com.influxdb</groupId>
<artifactId>influxdb-client-java</artifactId>
<version>4.0.0</version>
</dependency>
使用这个库,您可以执行如下所示的写入和查询操作。如果你观察到下面的代码,你可以清楚地看到你需要提供网址,令牌,org和桶,而不是用户名和密码。
package com.influx.writer;
import java.time.Instant;
import java.util.List;
import com.influxdb.annotations.Column;
import com.influxdb.annotations.Measurement;
import com.influxdb.client.InfluxDBClient;
import com.influxdb.client.InfluxDBClientFactory;
import com.influxdb.client.QueryApi;
import com.influxdb.client.WriteApiBlocking;
import com.influxdb.client.domain.WritePrecision;
import com.influxdb.client.write.Point;
import com.influxdb.query.FluxRecord;
import com.influxdb.query.FluxTable;
public class InfluxDB2Example {
private static char[] token = "my-token".toCharArray();
private static String org = "my-org";
private static String bucket = "my-bucket";
public static void main(final String[] args) {
InfluxDBClient influxDBClient = InfluxDBClientFactory.create("http://localhost:8086", token, org, bucket);
//
// Write data
//
WriteApiBlocking writeApi = influxDBClient.getWriteApiBlocking();
//
// Write by Data Point
//
Point point = Point.measurement("temperature")
.addTag("location", "west")
.addField("value", 55D)
.time(Instant.now().toEpochMilli(), WritePrecision.MS);
writeApi.writePoint(point);
//
// Write by LineProtocol
//
writeApi.writeRecord(WritePrecision.NS, "temperature,location=north value=60.0");
//
// Write by POJO
//
Temperature temperature = new Temperature();
temperature.location = "south";
temperature.value = 62D;
temperature.time = Instant.now();
writeApi.writeMeasurement( WritePrecision.NS, temperature);
//
// Query data
//
String flux = "from(bucket:\"my-bucket\") |> range(start: 0)";
QueryApi queryApi = influxDBClient.getQueryApi();
List<FluxTable> tables = queryApi.query(flux);
for (FluxTable fluxTable : tables) {
List<FluxRecord> records = fluxTable.getRecords();
for (FluxRecord fluxRecord : records) {
System.out.println(fluxRecord.getTime() + ": " + fluxRecord.getValueByKey("_value"));
}
}
influxDBClient.close();
}
@Measurement(name = "temperature")
private static class Temperature {
@Column(tag = true)
String location;
@Column
Double value;
@Column(timestamp = true)
Instant time;
}
}
https://stackoverflow.com/questions/68543181
复制相似问题