API, который я собираюсь вызвать, это: https://restapi.amap.com/v3/geocode/geo?{parameters} (https://lbs.amap.com/api/webservice/guide/api/georegeo). Скорость вызова ограничена поставщиком до 200 раз в минуту.
Что мне нужно, так эточитать строки из SQL Server и вызывать их API одним столбцом из строки, чтобы получить результаты, и вставлять результаты в другую таблицу в строке SQL Server строка за строкой.
Я знаю, как использовать JDBC, какчтобы получить значение, возвращаемое API, но я не знаю, как организовать их элегантно.
DriverManager.registerDriver(new SQLServerDriver());
try (
SQLServerConnection conn = (SQLServerConnection) DriverManager.getConnection(dbURL, userName, userPwd);
Statement stmt = conn.createStatement();
ResultSet resultSet = stmt.executeQuery(
the sql to get rows);
PreparedStatement pstmt = conn.prepareStatement(
"insert into TARGET_TABLE INFO values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")
) {
conn.setUseBulkCopyForBatchInsert(true);
int i = 0;
// put 10 rows together and then call the API
StringJoiner addr = new StringJoiner("|");
List<String> personInfoKeyList = new ArrayList<>();
long start = System.currentTimeMillis();
while (resultSet.next()) {
i++;
fullAddress; // this is the original column
personInfoKeyList.add(fullAddress);
addr.add(fullAddress); // put 10 rows together and send to API
if (i % 10 == 0) {
String addresses = addr.toString();
Map<String, Object> map = callApi(addresses);
for (int j = 0; j < personInfoKeyList.size(); j++) {
// traverse the map the API returned to get value1, value2, value3, etc...
...
// then prepare to insert to my table
pstmt.setString(1, value1);
pstmt.setString(2, value2);
pstmt.addBatch();
....
}
pstmt.executeBatch();
personInfoKeyList.clear();
addr = new StringJoiner("|");
}
}
} catch (Exception e) {
e.printStackTrace();
}
Первая проблема - в этом коде слишком много стандартного кода. Как его улучшить?
Вторая проблема заключается в том, что скорость вставки не идеальна. Выполнение executeBatch () с 10 строками может быть не очень хорошей идеей.
Как улучшить код?