Sqlite 并在日期之间设置它,格式正确但仍然无法正常工作

Sqlite and setting it between dates, Format Correct but still not working

所以我试图让一个基本的 sql 字符串发挥作用,它将根据日期之间的时间获取 sqlite 数据库中的记录。但是,由于某种原因,它不起作用。我只是不明白为什么。

private void viewTransactionsBetweenDatesTable(){
    //Sets the table to view transactions between certain dates

    try{
        //Get's the dates from startDateChooserTransactions1 and endDateChooserTransactions1
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        DateFormat df2 = new SimpleDateFormat("MMM dd, yyyy");
        Date sdct = startDateChooserTransactions1.getDate();
        Date edct = endDateChooserTransactions1.getDate();
        String sdcts = df.format(sdct);
        String edcts = df.format(edct);
        String sdctlabel = df2.format(sdct);
        String edctlabel = df2.format(edct);

        //Child's ID
        String cid = childIDCheck1.getText();

        //Grab's the specified data and places that as the table
        String sql = "SELECT * FROM ChildrenPayment WHERE ChildID='"+cid+"' AND strftime('%Y-%m-%d', 'Report Transaction Date') BETWEEN '"+sdcts+"' AND '"+edcts+"' ";
        pst = conn.prepareStatement(sql);
        rs = pst.executeQuery();

        //Sets up the table
        Info1.setModel(DbUtils.resultSetToTableModel(rs));    
        TableColumnModel tcm = Info1.getColumnModel();
        //tcm.removeColumn(tcm.getColumn(3));
       // tcm.removeColumn(tcm.getColumn(3));
       // tcm.removeColumn(tcm.getColumn(10));
       // tcm.moveColumn(11, 10);
       // tcm.removeColum(tcm.getColumn(13));

        //Changes modLabel1
        modLabel1.setText(firstNameEditClass1.getText() + " " + lastNameEditClass1.getText() + " Between " + sdctlabel + " - " + edctlabel);

    }catch(Exception e){
        JOptionPane.showMessageDialog(null, e);
    }finally{
        try{
            pst.close();
            rs.close();
        }catch(Exception e){
            JOptionPane.showMessageDialog(null, e);
        }
    }
}

我正在使用 jdatechooser,因此与更好的 DateTimeFormatter 相比,我有点被迫使用 SimpleDateFormat。无论如何,我正在根据 sqlite 喜欢的 YYYY-MM-DD 对其进行格式化,但是当我 运行 函数时,table 不显示任何内容。我将日期设置得很宽(2018 年 2 月 1 日到 2018 年 2 月 14 日),我数据库中的日期是 2018 年 2 月 7 日。我在数据库中有一些记录可以提取。但是,它只是不这样做。而且没有弹出错误,所以我不知道为什么它不起作用。

Image of the records that I'm trying to place into my jtable

Edit1: 在我忘记之前,我也尝试了以下 SQL string

String sql = "SELECT * FROM ChildrenPayment WHERE ChildID='"+cid+"' AND 'Report Transaction Date' BETWEEN '"+sdcts+"' AND '"+edcts+"' ";

这行不通:

strftime('%Y-%m-%d', 'Report Transaction Date')

因为您提供的格式说明符要求您提供三个值,年月日各一个。

如果数据库中的日期存储为完整的 SQLite 日期时间字符串,您将不得不使用

"... date([Report Transaction Date]) BETWEEN '"+sdcts+"' AND '"+edcts+"' ";

注意列名两边的方括号(不是单引号)。这与需要 date/time 值无关,这是因为列名中有空格。任何带有空格的列名都必须用双引号或方括号括起来。这就是为什么最好不要在列名中使用空格。

如果它们实际上存储为 'YYYY-MM-DD' 字符串,那么您的替代方案不起作用的原因是因为您用单引号引用了列名 'Report Transaction Date',这导致比较日期值的文字字符串。