我在创建表时遇到问题,因为尝试将其插入到表中会得到以下结果:
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();
}
我仔细阅读了这些论坛中的解决方案,但不幸的是,找不到任何有用的东西。
感谢您的帮助。
答案 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();
}
这将:-
注意上面的内容无法解决根本的问题,您可能会看到无法添加,JSON对象没有12个值。。
解决方法是更正JSON对象的问题。
P.S。表格的创建看起来不错(即在测试时可以正常工作)。