我正在开发一个教程项目并使用SQLite数据库。我正在尝试使用数据库中WHERE
列上的DATE
检索记录。但它什么都没检索。我的代码出了什么问题?
数据库帮助程序类
中的CREATE
语句
private static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " ("
+ COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ COLUMN_DESCRIPTION + " TEXT,"
+ COLUMN_DATE + " DATE,"
+ COLUMN_DONE + " BOOLEAN)";
这就是我检索记录
的方法String date = "04-22-2014";
ArrayList<Task> tasks = new ArrayList<Task>();
db = getReadableDatabase();
String query = "SELECT * FROM "+TABLE_NAME + " where "+ COLUMN_DATE + " = "+ date;
Cursor cursor = db.rawQuery(query,null);
if(cursor.moveToFirst())
{
do{
Task task = new Task();
task.setId(cursor.getInt(0));
task.setDescription(cursor.getString(1));
task.setDate(cursor.getString(2));
task.setDone(Boolean.valueOf(cursor.getString(3)));
tasks.add(task);
}
while(cursor.moveToFirst());
}
return tasks;
但它没有返回任何记录。
答案 0 :(得分:1)
根据Date从sqlite数据库获取数据。在插入数据和根据日期检索数据时,需要使用标准日期格式。标准日期是YYYY-MM-DD。 有关详细信息:https://www.sqlite.org/lang_datefunc.html
试试这个..
String date = "2014-04-22";
而不是
String date = "04-22-2014";
在sqlite中保存日期时,您需要格式化上述内容。
日期和时间数据类型
SQLite没有预留用于存储日期和/或时间的存储类。相反, SQLite的内置日期和时间函数能够将日期和时间存储为TEXT,REAL或INTEGER值:
TEXT 作为ISO8601字符串(&#34; YYYY-MM-DD HH:MM:SS.SSS&#34;)。
REAL 作为朱利安日数字,即公元前4714年11月24日格林威治中午以来的天数。根据公历格里高利历。
INTEGER as Unix Time,自1970-01-01 00:00:00 UTC以来的秒数。 应用程序可以选择以任何这些格式存储日期和时间,并使用内置的日期和时间函数在格式之间自由转换。
答案 1 :(得分:0)
试试这个
String query = "SELECT * FROM "+TABLE_NAME + " where "+ COLUMN_DATE + " = "+ "'"+date+"'";