Как исправить Android SQLITE_ERROR, код ошибки 1 - PullRequest
0 голосов
/ 13 февраля 2019

пытается получить таблицу, которая будет содержать даты с соответствующими примечаниями.Я отправляю запрос на выбор таблицы и данных с датой = что бы я ни решил.

Я получаю следующую ошибку:

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)

DB-MANAGER:

 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 + " = " + strCalDate,
            null, null, null, null);

    if (cursor != null) {
        cursor.moveToFirst();
    }//if

    return cursor;
}//displayRecordTable1

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":

final Cursor cursor = dbManager.fetchDayRecords(dateClicked.toString());
    dbNumItems = cursor.getCount();

dateCLicked - это строковое значение, которое выглядит следующим образом (например): вт 12 февраля 00:00:00 EST 2019

Почему я получаю сообщение об ошибке ???там написано, что моя ошибка близка к "февралю" ???

Это потому, что таблица пуста?Я сомневаюсь, я проверяю, есть ли записи ...

Любая помощь будет полезна!

Заранее спасибо!

Тони

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Ваша проблема в том, что дата в предложении WHERE (т.е. 12 февраля 00:00:00 EST 2019) не заключена в кавычки.

Если вы используете 4-й параметр метода запроса, т.е.укажите аргументы выбора (string []) и включите заполнитель (?) в предложении WHERE (3-й параметр), затем, кроме литералов, правильно заключенных в кавычки, вы также защищаете от внедрения SQL.

например, вы можете использовать

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
  • Обратите внимание, что курсор, возвращаемый методом запроса, никогда не будет нулевым, поэтому if (cursor !- null) не имеет никакого эффекта и был удален.
0 голосов
/ 13 февраля 2019

просто поставьте кавычки

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"

Ваш запрос должен быть таким

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...