1

我正在制作一个应用程序来存储书名、添加日期和需要归还书的日期。下面,我展示了where获取从今天到两天之间归还的所有书籍的语句,以列表视图的形式返回。但是,它不起作用,我不确定我哪里出错了:

    public Cursor fetchAllDue() {

    //get todays date
    Calendar cal=Calendar.getInstance();
    int currentDay=cal.get(Calendar.DAY_OF_MONTH);

    //Add days on to todays date
    cal.set(Calendar.DAY_OF_MONTH, currentDay+2);
    cal.getTime(); //Result

    //format back to string
    String formattedDate = new SimpleDateFormat("dd-MM-yyyy HH:mm").format(cal.getTime());


  //get todays date
    Calendar cal1=Calendar.getInstance();
    int currentDay1=cal1.get(Calendar.DAY_OF_MONTH);

    //Atodays date
    cal1.set(Calendar.DAY_OF_MONTH, currentDay1);
    cal1.getTime(); //Result

    //format back to string
    String formattedDate1 = new SimpleDateFormat("dd-MM-yyyy HH:mm").format(cal1.getTime());


    //body = date added, needs to be changed
    return mDb.query(DATABASE_TABLE, new String[] { KEY_ROWID, KEY_TITLE,
            KEY_BODY, KEY_EXTRA, KEY_DUE }, KEY_DUE + " BETWEEN 'formattedDate1' and 'formattedDate2'", null, null, null, null);
}

这是为“到期日”输入日期时的代码:

                //convert string to int.
            int myNum = Integer.parseInt(editbox3.getText().toString());

            //get todays date
            Calendar cal=Calendar.getInstance();
            int currentDay=cal.get(Calendar.DAY_OF_MONTH);

            //Add days on to todays date
            cal.set(Calendar.DAY_OF_MONTH, currentDay+myNum);
            cal.getTime(); //Result

            //formate back to string
            String formattedDate = new SimpleDateFormat("dd-MM-yyyy HH:mm").format(cal.getTime());


            bundle.putString(NotesDbAdapter.KEY_DUE,formattedDate
                    .toString());

日期都是字符串。任何人都可以帮忙吗?

4

3 回答 3

2

你的查询是错误的。您使用formattedDate1andformattedDate2但您的代码正在设置formattedDateand formattedDate1,更不用说非常重要的事实,即这些不会影响您的查询,因为您没有传递它。它应该是这样的:

String where = KEY_DUE + " BETWEEN ? AND ?";
String[] args = { String.valueOf(formattedDate1), String.valueOf(formattedDate2) };
return mDb.query(DATABASE_TABLE, where, args, null, null, null, null);
于 2013-04-08T21:19:13.917 回答
1

我认为WebnetMobile的答案是正确的!

在 Android 上使用 SQLite,我总是使用INTEGER包含日期的 UNIX 时间戳的字段。因此,我可以更快地执行查询,并且没有WHERE字符串日期转换问题。

Date date;
...
long timeStamp = date.getTime();

您还可以尝试使用日期作为查询的参数:

Date from, to;
long timeStampFrom = from.getTime();
long timeStampTo = to.getTime();

String[] params = new String[] { String.valueOf(from), String.valueOf(to) };
c = db.rawQuery("SELECT * FROM " + getTableName() + " WHERE DateTime BETWEEN ? AND ?", params);

或者如果你想使用 UNIX 时间戳:

String[] params = new String[] { String.valueOf(timeStampFrom ), String.valueOf(timeStampTo )) };
c = db.rawQuery("SELECT * FROM " + getTableName() + " WHERE DateTime BETWEEN ? AND ?", params);
于 2013-04-08T21:16:43.510 回答
0

很确定这会奏效,伙计。

基本上是其他两个答案的混合。

     String[] params = new String[] { String.valueOf(formattedDate1), String.valueOf(formattedDate2) };

     return mDb.rawQuery("SELECT * FROM " + DATABASE_TABLE + " WHERE duedate BETWEEN ? AND ?", params);

让我知道这是否有帮助。

于 2013-04-08T21:58:50.300 回答