получение кода ошибки 1 (ошибка или отсутствует база данных) при попытке вставить в базу данных - PullRequest
2 голосов
/ 08 июля 2019

У меня проблема с созданием таблицы, поскольку попытка вставить в нее дает следующий результат:

 Error Code : 1 (SQLITE_ERROR)
    Caused By : SQL(query) error or missing database.
        (near "VALUES": syntax error (code 1): , while compiling: INSERT INTO PointTable (longitudeValue, latitudeValue, date, isLeaving, isArrinving, engineRpm, engineLoad, manAbsPressure, batteryLvl, airTemperature, airFlowRate, speed) VALUES)

Таблица уже существовала и работала раньше, возникла проблема, когда я попытался добавить значения, которые идут после «isArrinving».

Я создаю свою таблицу, как показано в следующем коде:

   private static final String CREATE_POINT_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_POINT + "("
        + KEY_ID_POINT + " INTEGER PRIMARY KEY, " + KEY_LONGITUDE + " TEXT, " + KEY_LATITUDE + " TEXT, "
        + KEY_DATE + " DATE, " + KEY_LEAVING + " INTEGER DEFAULT 0, " + KEY_ARRIVAL + " INTEGER DEFAULT 0, " +
        KEY_ENGINE_RPM + " TEXT, " + KEY_ENGINE_LOAD + " TEXT, " + KEY_ABS_PRESSURE + " TEXT, " + KEY_BATTERY_LEVEL + " TEXT, " + KEY_AIR_TEMPERATURE + " TEXT, " + KEY_AIRFLOW_RATE
        + " TEXT, "  + KEY_SPEED + " TEXT " + ");";

И я пытаюсь вставить в него, как показано в следующем коде:

   public void addFirstPoint(JSONObject point) {
        String request = "INSERT INTO " + TABLE_POINT + " (" + KEY_LONGITUDE + ", " + KEY_LATITUDE + ", " + KEY_DATE + ", " + KEY_LEAVING + ", " + KEY_ARRIVAL + ", "
                + KEY_ENGINE_RPM + ", " + KEY_ENGINE_LOAD + ", " + KEY_ABS_PRESSURE + ", " + KEY_BATTERY_LEVEL + ", " + KEY_AIR_TEMPERATURE+ ", " + KEY_AIRFLOW_RATE+ ", " + KEY_SPEED + ") VALUES  ";
        SQLiteDatabase db = this.getWritableDatabase();
        try {
            request = request.concat(" ('" + point.getString("Longitude") + "', '" + point.getString("Latitude") + "', '" + point.getString("Date") + "', '"
                    + point.getBoolean("Begin") + "', '" + point.getBoolean("End") + "', '" + point.getString("engineRPM") + "', '" + point.getString("engineLoad")
                    + "', '" + point.getString("manAbsPressure") + "', '" + point.getString("batteryLvl") + "', '" + point.getString("airTemperature") + "', '"
                    + point.getString("airFlowRate") + "', '" + point.getString("speed") + "')");
        } catch (JSONException e) {
            e.printStackTrace();
        }

            db.execSQL(request);

        db.close();
    }

Я просматривал эти форумы для поиска решений, но, к сожалению, не смог найти ничего полезного.

Спасибо за любую помощь.

1 Ответ

3 голосов
/ 08 июля 2019

Поскольку вы перехватываете любое исключение при извлечении значений из объекта JSON и продолжении каких-либо пропущенных значений (в том числе неправильно набранных или пропущенных), вы, скорее всего, получите ошибку SQL, которая, по-видимому, является проблемой как SQL в ошибкесообщение неполное (указывает на то, что исключение, скорее всего, с самым первым значением).

Таким образом, ваша проблема, скорее всего, связана с JSON.

Я бы предложил использовать: -

public void addFirstPoint(JSONObject point) {
    // Must be 12 
    if (point.length() != 12) {
        Log.d("ADDFIRSTPOINT","Unable to add, the JSON object does not have 12 values.");
        return;
    }
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues cv = new ContentValues();
    try {
        cv.put(KEY_LONGITUDE,point.getString("Longitude"));
        cv.put(KEY_LATITUDE,point.getString("Latitude"));
        cv.put(KEY_DATE,point.getString("Date"));
        cv.put(KEY_LEAVING,point.getBoolean("Begin"));
        cv.put(KEY_ARRIVAL,point.getBoolean("End"));
        cv.put(KEY_ENGINE_RPM,point.getString("engineRPM"));
        cv.put(KEY_ENGINE_LOAD,point.getString("engineLoad"));
        cv.put(KEY_ABS_PRESSURE,point.getString("manAbsPressure"));
        cv.put(KEY_BATTERY_LEVEL,point.getString("batteryLvl"));
        cv.put(KEY_AIR_TEMPERATURE,point.getString("airTemperature"));
        cv.put(KEY_AIRFLOW_RATE,point.getString("airFlowRate"));
        cv.put(KEY_SPEED,point.getString("speed"));
    } catch (JSONException e) {
        e.printStackTrace();
        return;
    }
    db.insert(TABLE_POINT,null,cv);
    db.close();
}

Это будет: -

  • первый тест на наличие 12 значений
  • построение SQL на основе исключительно значений
    • приложенные значения
    • предложения сгенерированы правильно и упорядочены
  • не пытаться выполнить, если пропущены какие-либо значения

Примечание Выше не будетИсправив основную проблему, вы, вероятно, увидите, Невозможно добавить, объект JSON не имеет 12 значений. в журнале.

Исправление состоит в том, чтобы исправить проблемы с объектом JSON.

PS Создание таблицы выглядит хорошим (т.е. работает при тестировании).

...