in spanner/jdbc/src/main/java/com/example/spanner/jdbc/LoadCsvExample.java [223:279]
static void writeToSpanner(Iterable<CSVRecord> records, String tableName)
throws SQLException {
System.out.println("Writing data into table...");
List<Mutation> mutations = new ArrayList<>();
for (CSVRecord record : records) {
int index = 0;
WriteBuilder builder = Mutation.newInsertOrUpdateBuilder(tableName);
for (String columnName : tableColumns.keySet()) {
// Iterates through columns in order. Assumes in order columns when no headers provided.
TypeCode columnType = tableColumns.get(columnName);
String recordValue = null;
if (validHeaderField(record, columnName)) {
recordValue = record.get(columnName).trim();
} else if (validNonHeaderField(record, index)) {
recordValue = record.get(index).trim();
index++;
}
if (recordValue != null) {
switch (columnType) {
case STRING:
builder.set(columnName).to(recordValue);
break;
case BYTES:
builder.set(columnName).to(Byte.parseByte(recordValue));
break;
case INT64:
builder.set(columnName).to(Integer.parseInt(recordValue));
break;
case FLOAT64:
builder.set(columnName).to(Float.parseFloat(recordValue));
break;
case BOOL:
builder.set(columnName).to(Boolean.parseBoolean(recordValue));
break;
case NUMERIC:
builder.set(columnName).to(Value.numeric(BigDecimal.valueOf(
Double.parseDouble(recordValue))));
break;
case DATE:
builder.set(columnName).to(com.google.cloud.Date.parseDate(recordValue));
break;
case TIMESTAMP:
builder.set(columnName).to(com.google.cloud.Timestamp.parseTimestamp(recordValue));
break;
default:
System.out.print("Invalid Type. This type is not supported.");
}
}
}
mutations.add(builder.build());
}
CloudSpannerJdbcConnection spannerConnection = connection
.unwrap(CloudSpannerJdbcConnection.class);
spannerConnection.write(mutations);
spannerConnection.close();
System.out.println("Data successfully written into table.");
}