有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

将日期时间从SQLite解析为java时出错。SQL。时间戳

我正在使用java 11和SQLite 3.30.1制作一个桌面windows pc应用程序。在我的sql表“Alarms”中有一个日期(DATETIME)列,我尝试使用jdbc resultset检索它。getTimestamp()。但我得到了以下错误:“java.sql.SQLException:错误解析时间戳”。 由于这是一个闹钟管理器,我想存储日期+时间。我还希望能够从另一个日期中减去两个日期。 这是我的闹钟:

CREATE TABLE "alarms" (
"id"    INTEGER NOT NULL,
"date"  DATETIME NOT NULL,
"name"  TEXT,
"text"  TEXT NOT NULL,
PRIMARY KEY("id")
);

这是我的java类:

import java.io.Serializable;
import java.sql.Timestamp;

public class Alarms implements Serializable {

private int id;

private Timestamp date;

private String name;

private String text;

public Alarms() {
}

public Alarms(int id, Timestamp date, String name, String text) {
    this.id = id;
    this.date = date;
    this.name = name;
    this.text = text;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public Timestamp getDate() {
    return date;
}

public void setDate(Timestamp date) {
    this.date = date;
}

public String getText() {
    return text;
}

public void setText(String text) {
    this.text = text;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

@Override
public String toString() {
    return name;
}
}

这是我的java jdbc方法:

    public ObservableList<Alarms> getAlarms() {

    alarmsList.clear();
    try {
            s = "SELECT * FROM alarms";

        statement = connection.createStatement();
        resultSet = statement.executeQuery(s);
        while (resultSet.next()) {

            Alarms al = new Alarms();
            al.setId(resultSet.getInt(1));
            al.setDate(resultSet.getTimestamp(2)); 
            al.setName(resultSet.getString(3));
            al.setText(resultSet.getString(4));

            alarmsList.add(al);

        }
        return alarmsList;

    } catch (SQLException throwables) {
        throwables.printStackTrace();
    }
    return null;
}

所以问题是,如何使用jdbc在SQLite中存储、插入和检索日期+时间?我做错了什么


共 (1) 个答案

  1. # 1 楼答案

    根据spec,SQLite中没有DATETIME类型

    它将被转换为NUMERIC。您可以在请求中使用各种函数来获取所需内容:date & time functions