SQLite JDBC rs.getDate () getTimestamp () и т. д. все возвращают неправильные значения

При использовании JDBC для SQLite по какой-то причине значения даты и отметки времени правильно хранятся в БД, отображаются правильно при использовании инструмента командной строки sqlite3, но при использовании функций ResultSet для получения этих значений он не работает. Ниже представлен небольшой тестовый класс, демонстрирующий, что я имею в виду.

import java.sql.*;

public class Test {
  public static void main(String[] args) throws Exception {
    Class.forName("org.sqlite.JDBC");
    Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db");
    Statement stat = conn.createStatement();
    stat.executeUpdate("drop table if exists people;");
    stat.executeUpdate("create table people (name, occupation, date date);");
stat.executeUpdate("insert into people values ('Turing', 'Computers', date('now'));");

    ResultSet rs = stat.executeQuery("select * from people;");
    while (rs.next()) {
      System.out.println("name = " + rs.getString("name"));
      System.out.println("job = " + rs.getString("occupation"));
      System.out.println("date = " + rs.getDate("date"));
      System.out.println("dateAsString = " + rs.getString("date"));
    }
    rs.close();
    conn.close();
  }
}

Я получаю следующий результат:

name = Turing
все возвращают неправильные значения При использовании JDBC для SQLite по какой-то причине значения даты и отметки времени правильно хранятся в БД, отображаются правильно при использовании инструмента sqlite3 командной строки, но при использовании ResultSet ...

Когда использование JDBC для SQLite по какой-то причине значения даты и отметки времени правильно хранятся в БД, правильно отображаются при использовании инструмента sqlite3 командной строки, но при использовании функций ResultSet для получения этих значений он не работает. Ниже представлен небольшой тестовый класс, демонстрирующий, что я имею в виду.

import java.sql.*;

public class Test {
  public static void main(String[] args) throws Exception {
    Class.forName("org.sqlite.JDBC");
    Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db");
    Statement stat = conn.createStatement();
    stat.executeUpdate("drop table if exists people;");
    stat.executeUpdate("create table people (name, occupation, date date);");
stat.executeUpdate("insert into people values ('Turing', 'Computers', date('now'));");

    ResultSet rs = stat.executeQuery("select * from people;");
    while (rs.next()) {
      System.out.println("name = " + rs.getString("name"));
      System.out.println("job = " + rs.getString("occupation"));
      System.out.println("date = " + rs.getDate("date"));
      System.out.println("dateAsString = " + rs.getString("date"));
    }
    rs.close();
    conn.close();
  }
}

Я получаю следующий результат:

name = Turing
все возвращают неправильные значения При использовании JDBC для SQLite по какой-то причине значения даты и отметки времени правильно хранятся в БД, отображаются правильно при использовании инструмента sqlite3 командной строки, но при использовании ResultSet ...

Когда использование JDBC для SQLite по какой-то причине значения даты и отметки времени правильно хранятся в БД, правильно отображаются при использовании инструмента sqlite3 командной строки, но при использовании функций ResultSet для получения этих значений он не работает. Ниже представлен небольшой тестовый класс, демонстрирующий, что я имею в виду.

import java.sql.*;

public class Test {
  public static void main(String[] args) throws Exception {
    Class.forName("org.sqlite.JDBC");
    Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db");
    Statement stat = conn.createStatement();
    stat.executeUpdate("drop table if exists people;");
    stat.executeUpdate("create table people (name, occupation, date date);");
stat.executeUpdate("insert into people values ('Turing', 'Computers', date('now'));");

    ResultSet rs = stat.executeQuery("select * from people;");
    while (rs.next()) {
      System.out.println("name = " + rs.getString("name"));
      System.out.println("job = " + rs.getString("occupation"));
      System.out.println("date = " + rs.getDate("date"));
      System.out.println("dateAsString = " + rs.getString("date"));
    }
    rs.close();
    conn.close();
  }
}

Я получаю следующий результат:

name = Turing
отображаются правильно при использовании инструмента sqlite3 командной строки, но при использовании функций ResultSet для получения этих значений он не работает. Ниже представлен небольшой тестовый класс, демонстрирующий, что я имею в виду.

import java.sql.*;

public class Test {
  public static void main(String[] args) throws Exception {
    Class.forName("org.sqlite.JDBC");
    Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db");
    Statement stat = conn.createStatement();
    stat.executeUpdate("drop table if exists people;");
    stat.executeUpdate("create table people (name, occupation, date date);");
stat.executeUpdate("insert into people values ('Turing', 'Computers', date('now'));");

    ResultSet rs = stat.executeQuery("select * from people;");
    while (rs.next()) {
      System.out.println("name = " + rs.getString("name"));
      System.out.println("job = " + rs.getString("occupation"));
      System.out.println("date = " + rs.getDate("date"));
      System.out.println("dateAsString = " + rs.getString("date"));
    }
    rs.close();
    conn.close();
  }
}

Я получаю следующий результат:

name = Turing
отображаются правильно при использовании инструмента sqlite3 командной строки, но при использовании функций ResultSet для получения этих значений он не работает. Ниже представлен небольшой тестовый класс, демонстрирующий, что я имею в виду.

import java.sql.*;

public class Test {
  public static void main(String[] args) throws Exception {
    Class.forName("org.sqlite.JDBC");
    Connection conn = DriverManager.getConnection("jdbc:sqlite:test.db");
    Statement stat = conn.createStatement();
    stat.executeUpdate("drop table if exists people;");
    stat.executeUpdate("create table people (name, occupation, date date);");
stat.executeUpdate("insert into people values ('Turing', 'Computers', date('now'));");

    ResultSet rs = stat.executeQuery("select * from people;");
    while (rs.next()) {
      System.out.println("name = " + rs.getString("name"));
      System.out.println("job = " + rs.getString("occupation"));
      System.out.println("date = " + rs.getDate("date"));
      System.out.println("dateAsString = " + rs.getString("date"));
    }
    rs.close();
    conn.close();
  }
}

Я получаю следующий результат:

name = Turing
job = Компьютеры
дата = 01.01.1970
dateAsString = 2011-03-24

6
задан Omar Kohl 24 March 2011 в 21:09
поделиться