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();
}