java - 如何将信息添加到 sqlite 数据库,然后使用 javafx 显示信息?

标签 java database sqlite jdbc javafx

public static void addToQueueTable(Patient p) {

    try {

        // open connection to database
        conn = ConnectionFactory.getConnection();

        // create statement
        stmt = conn.createStatement();

        String sql = "insert into queueTime values('" + p.getNhsNumber()
                + "', CURRENT_TIMESTAMP)";

        // execute update
        stmt.executeUpdate(sql);

    } catch (Exception e) {
        e.printStackTrace();
        System.out.println("Error on Building Data");
    } finally {
        // close all open resources in the database
        DbUtil.close(stmt);
        DbUtil.close(conn);
    }

}

以上是我将详细信息(NhsNumber 和当前时间戳)添加到我的数据库的代码 - 只是想知道我如何使用 javafx 显示它?

患者类如下:

    public Patient(String nhsNumber, String firstName,
            String lastName, String postCode) {
        super(nhsNumber,firstName, lastName
                , postCode);

    }

使用 javafx 我可以显示某些详细信息(见下文),但我不确定如何从数据库中取回时间戳?任何帮助将不胜感激!

    public class QueueTabPageController implements Initializable {

    @FXML
    private TableView<Patient> tableView;

    @FXML
    private TableColumn<Patient, String> firstNameColumn;

    @FXML
    private TableColumn<Patient, String> lastNameColumn;

    @FXML
    private TableColumn<Patient, String> postCodeColumn;

    @FXML
    private QueueTabPageController queueTabPageController;

    private ObservableList<Patient> tableData;

    // public static LinkedList<Patient> displayQueue;

    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {

        assert tableView != null : "fx:id=\"tableView\" was not injected: check your FXML file 'FXMLQueueTabPage.fxml'";

        firstNameColumn.setCellValueFactory(new PropertyValueFactory<Patient, String>("firstName"));
        lastNameColumn.setCellValueFactory(new PropertyValueFactory<Patient, String>("lastName"));
        postCodeColumn.setCellValueFactory(new PropertyValueFactory<Patient, String>("postCode"));

    }

    @FXML
    private void btnRefreshQueueClick(ActionEvent event) throws IOException{
        displayQueue(Queue.queue);
    }

    public void displayQueue(LinkedList<Patient> queue) {
        tableData = FXCollections.observableArrayList(queue);
        tableView.setItems(tableData);
    }

}


    // open connection to database
        conn = ConnectionFactory.getConnection();

        // create statement
        stmt = conn.createStatement();

        // result set to pull information from database
        ResultSet rs = stmt
                .executeQuery("select * from queueTime where NHSNumber = '"
                        + p.getNhsNumber() + "'");

        while (rs.next()) {

            // convert timestamp to String
            String ts = rs.getString("Timestamp");


            // print result set
            System.out.print(ts + "\t");

最佳答案

如果将时间戳存储为 DATETIME(数字数据库字段),这可能是最简单的。这将被转换为 INT*8 bytes = long

http://www.tutorialspoint.com/sqlite/sqlite_data_types.htm

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Date;
import javafx.application.Application;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.stage.Stage;

public class SQLite extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        ObservableList<Person> data = FXCollections.observableArrayList();
        TableView<Person> tv = new TableView<>(data);
        stage.setScene(new Scene(tv,500,200));
        stage.show();
        TableColumn<Person, Integer> id = new TableColumn<>("id");
        id.setCellValueFactory((p) -> p.getValue().id.asObject());

        TableColumn<Person, String> name = new TableColumn<>("name");
        name.setCellValueFactory((p) -> p.getValue().name);

        TableColumn<Person, Number> epoch = new TableColumn<>("epoch");
        epoch.setCellValueFactory((p) -> p.getValue().epoch);

        TableColumn<Person, String> tstamp = new TableColumn<>("tstamp");
        tstamp.setCellValueFactory((p) -> new ReadOnlyStringWrapper(
                new Date(p.getValue().epoch.get().longValue()).toString()));

        tv.getColumns().addAll(id,name,epoch,tstamp);

        try (Connection con = DriverManager.getConnection("jdbc:sqlite:testtime.db");
                Statement stmt = con.createStatement();) {
            stmt.executeUpdate("DROP TABLE IF EXISTS TEST ");
            stmt.executeUpdate("CREATE TABLE TEST "
                    + "(ID     NUMBER PRIMARY KEY NOT NULL,"
                    + " NAME   TEXT, "
                    + " EPOCH  DATETIME)");
            stmt.executeUpdate("INSERT INTO TEST VALUES"
                    + "(1,'my name', " + System.currentTimeMillis() + ")");
            ResultSet rs = stmt.executeQuery("SELECT * FROM TEST");
            while (rs.next()) {
                data.add(new Person(rs.getInt("ID"), 
                                    rs.getString("NAME"), 
                                    rs.getLong("EPOCH")));
            }
            rs.close();

        } catch (Exception ex) {
            ex.printStackTrace();
            System.exit(0);
        }

    }

    class Person{
        SimpleIntegerProperty id;
        SimpleStringProperty name;
        ObjectProperty<Number> epoch;

        public Person(int id, String name, long epoch) {
            this.id = new SimpleIntegerProperty(id);
            this.name = new SimpleStringProperty(name);
            this.epoch = new SimpleObjectProperty<>(epoch);
        }

    }
}

关于java - 如何将信息添加到 sqlite 数据库,然后使用 javafx 显示信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29802043/

相关文章:

java - 通用反序列化

sql - 在 SQLite UPDATE 中模拟 ORDER BY 来处理唯一性约束

java - 如何将现有 SQLite 数据库连接到 ExpandableListView?

java - 我的 try catch 循环陷入无限循环,每次都应该提示用户输入

Java boolean 表达式行为

java - Spring MVC 应用程序,尝试在 tomcat 上运行

Android SQLite 通过 utf8 整理/排序

c# - 在数据库表中插入 DataGridVIew 单元格值

java - 在 SELECT 查询中从 JOIN 复制 BLOB 值是否会显着影响性能?

sql - Oracle SQL 多表插入语句