Как получить строку данных по дате, где я передаю дату выбора даты и сохраняю данные как дату в длинном формате - PullRequest
0 голосов
/ 28 апреля 2018

Когда я вызываю getAllInvoice (Date date), чтобы получить список наблюдаемых счетов-фактур, передавая дату из средства выбора даты, но он возвращает пустой список, пожалуйста, помогите, как получить счет-фактуру наблюдаемого списка, передающий дату выбора даты, где я сохраняю дату как длинный формат в базе данных в этом примере я предоставил ниже.

public VBox getBody() {
    DatePicker datePicker = new DatePicker();
    datePicker.setPrefWidth(width);
    datePicker.setValue(LocalDate.now());

    Calendar calendar = Calendar.getInstance();
    calendar.set(datePicker.getValue().getYear(),datePicker.getValue().getMonthValue(),datePicker.getValue().getDayOfMonth());


    ListView<String> invoiceListView = new ListView<>();
    invoiceListView.setPrefWidth(width);
    invoiceListView.setPrefHeight(550);

    ObservableList<Invoice> invoiceObservableList = connection.getAllInvoice(Date.valueOf(datePicker.getValue()));

    datePicker.valueProperty().addListener((observable, oldValue, newValue) -> {
        invoiceObservableList.clear();
        invoiceObservableList.addAll(connection.getAllInvoice(Date.valueOf(datePicker.getValue())));
    });

    ListChangeListener<Invoice> listener = new ListChangeListener<Invoice>() {
        @Override
        public void onChanged(Change<? extends Invoice> c) {
            ObservableList<String> invoiceList = FXCollections.observableArrayList();
            for (Invoice invoice : invoiceObservableList) {
                Customer customer = connection.getCustomerById(invoice.getCustomerId());
                invoiceList.add("#" + invoice.getId() + " - " + customer.getName() + " (" + customer.getNumber() + ")");
            }
            invoiceListView.setItems(invoiceList);
        }
    };

    invoiceObservableList.addListener(listener);

    ObservableList<String> invoiceList = FXCollections.observableArrayList();
    for (Invoice invoice : invoiceObservableList) {
        Customer customer = connection.getCustomerById(invoice.getCustomerId());
        invoiceList.add("#" + invoice.getId() + " - " + customer.getName() + " (" + customer.getNumber() + ")");
    }
    invoiceListView.setItems(invoiceList);

    VBox invoicePreview = new VBox();//addMe
    invoicePreview.setPrefWidth(360);
    invoicePreview.setPrefHeight(560);
    invoicePreview.setAlignment(Pos.CENTER);
    //invoicePreview.setStyle("-fx-background-color: green");
    //invoicePreview.setPadding(new Insets(15));

    invoiceListView.setOnMouseClicked(event -> {
        if (event.getClickCount() == 2) {
            invoicePreview.getChildren().clear();
            invoicePreview.setAlignment(Pos.TOP_CENTER);
            Invoice invoice = invoiceObservableList.get(invoiceListView.getSelectionModel().getSelectedIndex());
            InvoicePreview preview = new InvoicePreview(invoice,sizer.getValue(100));
            invoicePreview.getChildren().add(preview.printPreview());
        }
    });

    Label massage = new Label("Please select invoice first.");
    massage.setFont(new Font(invoiceWidth*5/100));
    invoicePreview.getChildren().add(massage);

    VBox leftVBox = new VBox(datePicker, invoiceListView);
    leftVBox.setSpacing(5);

    HBox mainBody = new HBox(leftVBox,invoicePreview);
    mainBody.setSpacing(5);


    VBox root = new VBox(mainBody);
    root.setId("body");
    return root;
}

и это метод getAllInvoice (Date date) класса Connection, который возвращает наблюдаемый список счетов,

public ObservableList<Invoice> getAllInvoice(Date date) {
    long longDate = date.getTime();
    ObservableList<Invoice> list = FXCollections.observableArrayList();

    String query = "SELECT * FROM " + TABLE_INVOICE + " WHERE " + INVOICE_DATE + " LIKE \'"+longDate+"\'";
    System.out.println(query);
    try {
        connection = DriverManager.getConnection("jdbc:sqlite:" + DATA_BASE);

        Statement state = connection.createStatement();
        ResultSet resultSet = state.executeQuery(query);

        while (resultSet.next()) {
            list.add(new Invoice(resultSet.getInt(INVOICE_ID), resultSet.getInt(INVOICE_USER_ID), resultSet.getInt(INVOICE_CUSTOMER_ID), resultSet.getLong(INVOICE_DATE)));
        }

    } catch (SQLException e) {
        e.printStackTrace();
    } finally {

    }
    return list;
}

файл базы данных, например:

"id" "uId" "cusId" "date"
-------------------------------
"3" "1" "4" "1524636334412"
"4" "1" "4" "1524636355419"
"5" "1" "3" "1524636411858"
"6" "1" "3" "1524637462701"
"7" "1" "4" "1524638110920"

как я могу получить данные, передающие Date в качестве аргумента?

1 Ответ

0 голосов
/ 29 апреля 2018

Если вы хотите, чтобы записи имели ту же дату (день месяца года), что и прошедшую (длинную) дату, вы можете использовать: -

SELECT *
FROM invoice 
WHERE date / 86400000  = <your_date> / 86400000
  • <your_date> дата, пройденная

Это удаление миллисекунд (т.е. деление на 1000), затем удаление секунд (то есть деление еще на 60), затем удаление минут (то есть деление еще на 60) и затем удаление часов (деление на 24)

т.е.. 1000 * 60 * 60 * 24 = 86400000

По данным вашего примера (где 1524636334412 - дата и время первой строки): -

SELECT *
FROM invoice 
WHERE date / 86400000  = 1524636334412 / 86400000

Результат: -

enter image description here

Таким образом, вы можете изменить: -

    String query = "SELECT * FROM " + TABLE_INVOICE + " WHERE " + INVOICE_DATE + " LIKE \'"+longDate+"\'";

будет

    String query = "SELECT * FROM " + TABLE_INVOICE + " WHERE " + INVOICE_DATE + " / 86400000 = " + longDate + " / 86400000";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...