FlightSqlDriver 更新一条数据报错,我用的最高权限的root, 只能查询不能更新,更新报错 AdbcException NAUTHENTICATED

Viewed 7

String USER = "root";
String PASS = "123456";
// 1. new driver
final BufferAllocator allocator = new RootAllocator();
FlightSqlDriver driver = new FlightSqlDriver(allocator);
Map<String, Object> parameters = new HashMap<>();
AdbcDriver.PARAM_URI.set(parameters, Location.forGrpcInsecure("xxxxxx", 8070).getUri().toString());
AdbcDriver.PARAM_USERNAME.set(parameters, USER);
AdbcDriver.PARAM_PASSWORD.set(parameters, PASS);
AdbcDatabase adbcDatabase = driver.open(parameters);

// 2. new connection
AdbcConnection connection = adbcDatabase.connect();
updateSingleRecord(connection);
// AdbcStatement stmt = connection.createStatement();
//// 3. execute query
// stmt.setSqlQuery("select * from gantec.table_hash2");
// AdbcStatement.QueryResult queryResult = stmt.executeQuery();
// ArrowReader reader = queryResult.getReader();
//
//// 4. load result
// // 假设你查询的表有 "id", "name", "salary" 三列
// List<Map<String, Object>> rowList = new ArrayList<>();
// while (reader.loadNextBatch()) {
// VectorSchemaRoot root = reader.getVectorSchemaRoot();
//
// // 获取所有列向量
// List vectors = root.getFieldVectors();
//
// for (int rowIdx = 0; rowIdx < root.getRowCount(); rowIdx++) {
// Map<String, Object> row = new HashMap<>();
// printRow(root, rowIdx, rowList);
// }
// }
//
//// 现在你有一个完整的List可以方便地使用
// System.out.println("Total rows: " + rowList.size());
// for (Map<String, Object> row : rowList) {
// System.out.println(row);
// }
//
//// 5. close
// reader.close();
// queryResult.close();
// stmt.close();
// connection.close();
}

public static void printRow(VectorSchemaRoot root, int rowIndex, List<Map<String, Object>> rowList) {
    if (root == null || rowIndex < 0 || rowIndex >= root.getRowCount()) {
        System.out.println("Invalid row index: " + rowIndex);
        return;
    }

    System.out.print("> ");
    for (Field field : root.getSchema().getFields()) {
        ValueVector vector = root.getVector(field.getName());
        if (vector != null) {
            if (vector instanceof org.apache.arrow.vector.DateDayVector) {
                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
                int dayOffset = ((org.apache.arrow.vector.DateDayVector) vector).get(rowIndex);
                LocalDate date = LocalDate.ofEpochDay(dayOffset);
                System.out.print(date.format(formatter));
            } else if (vector instanceof org.apache.arrow.vector.TimeStampSecTZVector) {
                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
                long epochSec = ((org.apache.arrow.vector.TimeStampSecTZVector) vector).get(rowIndex);
                Instant instant = Instant.ofEpochSecond(epochSec);
                LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
                System.out.print(localDateTime.format(formatter));
            } else if (vector instanceof org.apache.arrow.vector.TimeStampMilliTZVector) {
                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
                long epochMillis = ((org.apache.arrow.vector.TimeStampMilliTZVector) vector).get(rowIndex);
                LocalDateTime localDateTime
                        = org.apache.arrow.vector.util.DateUtility.getLocalDateTimeFromEpochMilli(epochMillis,
                        "UTC");
                System.out.print(localDateTime.format(formatter));
            } else if (vector instanceof org.apache.arrow.vector.TimeStampMicroTZVector) {
                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS");
                long epochMicros = ((org.apache.arrow.vector.TimeStampMicroTZVector) vector).get(rowIndex);
                LocalDateTime localDateTime
                        = org.apache.arrow.vector.util.DateUtility.getLocalDateTimeFromEpochMicro(epochMicros,
                        "UTC");
                System.out.print(localDateTime.format(formatter));
            } else if (vector instanceof org.apache.arrow.vector.BitVector) {
                System.out.print(((org.apache.arrow.vector.BitVector) vector).get(rowIndex) == 1);
            } else {
                // other types field
                System.out.print(vector.getObject(rowIndex).toString());
            }
            System.out.print(", ");
        }
    }
    System.out.println();
}
1 Answers

可以发下具体的版本和报错信息