SQLite JDB C 3.30.1 (последняя версия) не поддерживает java .time - PullRequest
0 голосов
/ 22 марта 2020

SQLite JDB C 3.30.1 (последняя версия) не поддерживает java .time. например,

создать таблицу Foo (id TEXT, time1 NUMERI C, time2 NUMERI C);

PreparedStatement stmt = connection.prepareStatement("insert into Foo(id, time1, time2) values (1, ?, ?)");
stmt.setParameter(1, LocalDate.now());
stmt.setParameter(2, LocalTime.now());
stmt.executeUpdate();

Success. Теперь попробуйте получить строку:

PreparedStatement stmt = connection.prepareStatement("select id, time1, time2 from Foo");
ResultSet resultSet = stmt.executeQuery();

resultSet.getObject(2, java.time.LocalDate.class)
resultSet.getObject(2, java.time.LocalTime.class)

throw

java.sql.SQLFeatureNotSupportedException

Кто-нибудь сталкивается с той же проблемой и имеет решение?

1 Ответ

2 голосов
/ 23 марта 2020

Как ни удивительно, resultSet.getObject(2, java.time.LocalDate.class) действительно выбрасывает SQLFeatureNotSupportedException. Однако вы можете использовать .getString для получения строкового представления, а затем использовать .parse для последующего преобразования:

stmt = conn.prepareStatement("select id, time1, time2 from Foo");
ResultSet resultSet = stmt.executeQuery();

String ldString = resultSet.getString(2);
LocalDate ld = LocalDate.parse(ldString);
String ltString = resultSet.getString(3);
LocalTime lt = LocalTime.parse(ltString);

System.out.println(ld);  // 2020-03-22
System.out.println(lt);  // 15:53:49.284
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...