Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复Android SQLITE_错误,错误代码1_Android_Sqlite - Fatal编程技术网

如何修复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)
    无效,已被删除
虽然它可以(与SQLite一起)工作,但最好用
引用字符串文字,而不是
,我有一种感觉,那就是问题所在!但我觉得它已经是字符串了!谢谢@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