日期之间的Android SQLite查询不起作用

日期之间的Android SQLite查询不起作用,android,sqlite,Android,Sqlite,我必须从表中获取所有记录计数。我的做法如下: public int getTasksByStatusIDBetweenDates(int statusID, String startDate, String endDate) { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery( "select * from Task" +

我必须从表中获取所有记录计数。我的做法如下:

  public int getTasksByStatusIDBetweenDates(int statusID, String startDate, String endDate) {

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(
            "select * from Task" +
                    " where StatusID=" + statusID + " and AssignDate between '" + startDate + "' and '" + endDate + "'", null);

    int total = 0;
    if (cursor.moveToFirst())
        total = cursor.getInt(0);

    cursor.close();
    return total;
}  
目前它正在返回我0。我的日期格式是“yyyy-MM-dd HH:MM:ss”


请告诉我哪里做错了。谢谢

我认为您应该使用COUNT(*)而不是*

试试这个

public int getTasksByStatusIDBetweenDates(int statusID, String startDate, String endDate) {

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(
            "select count(*) from Task" +
                    " where StatusID=" + statusID + " and AssignDate between '" + startDate + "' and '" + endDate + "'", null);

    int total = 0;
    if (cursor.moveToFirst())
        total = cursor.getInt(0);

    cursor.close();
    return total;
}  

我认为你应该使用COUNT(*)而不是*

试试这个

public int getTasksByStatusIDBetweenDates(int statusID, String startDate, String endDate) {

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery(
            "select count(*) from Task" +
                    " where StatusID=" + statusID + " and AssignDate between '" + startDate + "' and '" + endDate + "'", null);

    int total = 0;
    if (cursor.moveToFirst())
        total = cursor.getInt(0);

    cursor.close();
    return total;
}  

使用
SELECT*
的查询返回表中所有行的所有列

cursor.getInt(0)
返回光标当前行第一列的值

要计算行数,可以使用带有
选择count(*)…
的查询,并读取该查询返回的值。或者,使用一个有用的工具为您构造查询:

public int-gettasksbystatusidbetween-dates(int-statusID、String-startDate、String-endDate){
SQLiteDatabase db=this.getReadableDatabase();
返回DatabaseUtils.queryNumEntries(
db,“任务”,
“StatusID=“+StatusID+”并在?和?之间分配日期,
新字符串[]{startDate,endDate});
}  

使用
SELECT*
的查询返回表中所有行的所有列

cursor.getInt(0)
返回光标当前行第一列的值

要计算行数,可以使用带有
选择count(*)…
的查询,并读取该查询返回的值。或者,使用一个有用的工具为您构造查询:

public int-gettasksbystatusidbetween-dates(int-statusID、String-startDate、String-endDate){
SQLiteDatabase db=this.getReadableDatabase();
返回DatabaseUtils.queryNumEntries(
db,“任务”,
“StatusID=“+StatusID+”并在?和?之间分配日期,
新字符串[]{startDate,endDate});
}  

或对现有代码只需调用
cursor.getCount()

total=cursor.getCount()

Cursor.getCount()
返回光标中的行数

更新
查询以获取带两个日期的记录

查询是

从mytab中选择*,其中my_日期介于'2016-03-01 00:00:00'和'2016-03-19 00:00:00:00'之间。

或调用现有代码即可
cursor.getCount()

total=cursor.getCount()

Cursor.getCount()
返回光标中的行数

更新
查询以获取带两个日期的记录

查询是


从mytab中选择*,我的日期在'2016-03-01 00:00:00'和'2016-03-19 00:00:00'之间。

你在哪里调用这个方法?你能发布我提到的代码吗?@noman hamid:数据库中存储的日期格式与你的辩论开始日期和结束日期的日期格式相同吗?@Antónioparo我刚刚从中得到了数字函数转换为“我的活动”中的整数变量。但是我从这个查询中得到的计数是0。
cursor.getInt(0)
,你要得到表的第一列值吗?我想你应该用
datetime()包装时间字符串变量
function您在哪里调用此方法?您能发布我提到的代码吗?@noman hamid:数据库中存储的日期格式是否与您的参数startDate和endDate的日期格式相同?@Antóniopulo我正在将该函数的计数转换为我的活动中的整数变量。但是我从这个查询中得到的计数是0。
cursor.getInt(0)
,你要得到表的第一列值吗?我想你应该用
datetime()函数包装时间字符串变量。
。。不工作。。我的表格中指定的日期是文本。尝试了。。不工作。。我的表格中指定的日期是文本。是的,我试过了。告诉我一件事,我正在使用AssigneDate数据类型作为表中的文本。。可以吗,或者我必须使用DATETIME数据类型?对我来说,文本类型工作正常。。不过,也可以尝试DateTime。酷。。你能分享你的全部功能吗?谢谢我会试试的。。我必须在网格视图中显示。。。记录是所有月份的,因此我必须相应地应用过滤器。。这就是我在查询中传递日期的原因。让我们来看看。是的,我试过了。告诉我一件事,我正在使用AssigneDate数据类型作为表中的文本。。可以吗,或者我必须使用DATETIME数据类型?对我来说,文本类型工作正常。。不过,也可以尝试DateTime。酷。。你能分享你的全部功能吗?谢谢我会试试的。。我必须在网格视图中显示。。。记录是所有月份的,因此我必须相应地应用过滤器。。这就是我在查询中传递日期的原因。让我们。