尝试插入数据库时​​收到错误代码1(错误或缺少数据库)

时间:2019-07-08 15:33:40

标签: android sqlite android-sqlite

我在创建表时遇到问题,因为尝试将其插入到表中会得到以下结果:

 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 个答案:

答案 0 :(得分:3)

当您从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对象的问题。

P.S。表格的创建看起来不错(即在测试时可以正常工作)。