Мы используем драйвер JDB C для подключения к Snowflake и выполнения вставок. Таблица может иметь несколько столбцов временных меток, это означает, что один запрос вставки может иметь дело как с timestamp_ntz, так и с timestamp_ltz.
Он отлично работает, когда мы указываем тип в запросе при привязке значений, как показано ниже
INSERT INTO <TABLENAME> VALUES(?::TIMESTAMP_NTZ, ?::TIMETAMP_LTZ)
Однако, когда мы пробуем то же самое с addBatch () и executeBatch (), он терпит неудачу с «Bind variable? Not set»
Пример программы -
try (Connection con = getConnection()) {
con.createStatement().execute("create or replace table Test_TSNTZ(t1 TIMESTAMPNTZ)");
try (PreparedStatement ps = con.prepareStatement("insert into Test_TSNTZ values (? ::TIMESTAMP_NTZ)")) {
java.sql.Timestamp t = java.sql.Timestamp.valueOf("2019-09-23 10:10:10.0");
for (int i = 0; i < 22; i++) {
ps.setTimestamp(1, t);
ps.addBatch();
}
ps.executeBatch();
try (Statement statement = con.createStatement()) {
try (ResultSet resultSet = statement.executeQuery("select * from Test_TSNTZ ")) {
while (resultSet.next()) {
System.out.println(resultSet.getTimestamp(1));
}
}
}
}
}