如何修复Android SQLITE_错误,错误代码1
正在尝试获取将包含日期和关联注释的表。我正在发送一个请求,以获取日期为的表和数据 我得到以下错误:如何修复Android SQLITE_错误,错误代码1,android,sqlite,Android,Sqlite,正在尝试获取将包含日期和关联注释的表。我正在发送一个请求,以获取日期为的表和数据 我得到以下错误: E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.ar.calendar13, PID: 22214 android.database.sqlite.SQLiteException: near "Feb": syntax error (code 1): , while compiling: SELECT CAL_EVENT_I
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.ar.calendar13, PID: 22214
android.database.sqlite.SQLiteException: near "Feb": syntax error (code 1): , while compiling: SELECT CAL_EVENT_ID, CAL_EVENT_TTTLE, CAL_EVENT_NOTES, CAL_REMINDER_DATE, CAL_EVENT_REPEAT FROM CAL_EVENT_TABLE WHERE CAL_REMINDER_DATE = Tue Feb 12 00:00:00 EST 2019
#################################################################
Error Code : 1 (SQLITE_ERROR)
Caused By : SQL(query) error or missing database.
(near "Feb": syntax error (code 1): , while compiling: SELECT CAL_EVENT_ID, CAL_EVENT_TTTLE, CAL_EVENT_NOTES, CAL_REMINDER_DATE, CAL_EVENT_REPEAT FROM CAL_EVENT_TABLE WHERE CAL_REMINDER_DATE = Tue Feb 12 00:00:00 EST 2019)
#################################################################
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1096)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:661)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1746)
at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1593)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1464)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1632)
at com.example.ar.calendar13.Cal_DBManager.fetchDayRecords(Cal_DBManager.java:85)
DBHELPER:
private static final String CREATE_TABLE1 = "create table " + TABLE_NAME1 + "(" + CAL_EVENT_ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + CAL_EVENT_TTTLE + " TEXT NOT NULL, " +
CAL_EVENT_NOTES + " TEXT NOT NULL, " + CAL_REMINDER_DATE + " TEXT NOT NULL, " +
CAL_EVENT_REPEAT + " INTEGER);";
调用“FETCHDAYRECORDS”的代码:
dateCLicked是如下所示的字符串值(例如):
美国东部时间2019年2月12日星期二00:00:00
为什么我会出错???上面说我的错误接近“二月”
是因为桌子空了吗?我怀疑,我正在检查是否有任何记录
任何帮助都会有帮助
提前谢谢你
托尼只要用引号就行了
Cursor cursor = database.query(Cal_DBHelper.TABLE_NAME1, columns,
Cal_DBHelper.CAL_REMINDER_DATE + " = "+" " " + strCalDate +" " ",
null, null, null, null);
SELECT
CAL_EVENT_ID,
CAL_EVENT_TTTLE,
CAL_EVENT_NOTES,
CAL_REMINDER_DATE,
CAL_EVENT_REPEAT
FROM
CAL_EVENT_TABLE
WHERE
CAL_REMINDER_DATE = "Tue Feb 12 00 :00 :00 EST 2019"
您的查询应该是这样的您的问题是WHERE条款中的日期(即2019年2月12日星期二00:00:00 EST)没有用引号括起来 如果使用查询方法的第4个参数,即指定选择参数(字符串[]),并在WHERE子句(第3个参数)中包含占位符(?),那么除了将文字正确地括在引号中之外,还可以防止SQL注入 e、 你可以用
public Cursor fetchDayRecords(String strCalDate) {
String[] columns = new String[]{
Cal_DBHelper.CAL_EVENT_ID, Cal_DBHelper.CAL_EVENT_TTTLE,
Cal_DBHelper.CAL_EVENT_NOTES, Cal_DBHelper.CAL_REMINDER_DATE,
Cal_DBHelper.CAL_EVENT_REPEAT
};
Cursor cursor = database.query(Cal_DBHelper.TABLE_NAME1, columns,
Cal_DBHelper.CAL_REMINDER_DATE + " =?", new String[]{strCalDate},
null, null, null);
cursor.moveToFirst();
return cursor;
}//displayRecordTable1
- 注意:从查询方法返回的游标永远不会为null,因此
无效,已被删除李>if(Cursor!-null)
“
引用字符串文字,而不是”
,我有一种感觉,那就是问题所在!但我觉得它已经是字符串了!谢谢@MikeT的帮助!
Cursor cursor = database.query(Cal_DBHelper.TABLE_NAME1, columns,
Cal_DBHelper.CAL_REMINDER_DATE + " = "+" " " + strCalDate +" " ",
null, null, null, null);
SELECT
CAL_EVENT_ID,
CAL_EVENT_TTTLE,
CAL_EVENT_NOTES,
CAL_REMINDER_DATE,
CAL_EVENT_REPEAT
FROM
CAL_EVENT_TABLE
WHERE
CAL_REMINDER_DATE = "Tue Feb 12 00 :00 :00 EST 2019"
public Cursor fetchDayRecords(String strCalDate) {
String[] columns = new String[]{
Cal_DBHelper.CAL_EVENT_ID, Cal_DBHelper.CAL_EVENT_TTTLE,
Cal_DBHelper.CAL_EVENT_NOTES, Cal_DBHelper.CAL_REMINDER_DATE,
Cal_DBHelper.CAL_EVENT_REPEAT
};
Cursor cursor = database.query(Cal_DBHelper.TABLE_NAME1, columns,
Cal_DBHelper.CAL_REMINDER_DATE + " =?", new String[]{strCalDate},
null, null, null);
cursor.moveToFirst();
return cursor;
}//displayRecordTable1