SQLiteException: около "произошло": синтаксическая ошибка (код 1) - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь вставить строку в таблицу в моей базе данных, но я застрял. Функция вставки возвращает -1, а Logcat показывает следующую ошибку:

05-06 20: 58: 45.446 13631-13631 / com.example.android.disasterreporter E / SQLiteLog: (1) почти «произошло»: синтаксическая ошибка

05-06 20: 58: 45.447 13631-13631 / com.example.android.disasterreporter E / SQLiteDatabase: Ошибка при вставке стихийного бедствия = 3 в последний раз = 5 местоположение = loc прогнозируемое время = 2 прогноза голосов = 1 голос за прошлое = 7 _id = 2 прогнозируемая серьезность = 1 прошедшая серьезность = 1

android.database.sqlite.SQLiteException: около «произошло»: синтаксическая ошибка (код 1): при компиляции: INSERT INTO бедствия (авария, последнее происшествие, местоположение, прогнозируемое время, прогнозные голоса, голоса за прошлое, _id, прогнозируемый уровень опасности) , прошедшая степень тяжести) ЗНАЧЕНИЯ (?,?,?,?,?,?,?,?,?)

Это класс контракта:

public final class DisasterContract {

private DisasterContract() {}

public static final class DisasterEntry implements BaseColumns {

    public final static String TABLE_NAME = "disasters";

    public final static String _ID = BaseColumns._ID;
    public final static String COLUMN_DISASTER = "disaster";
    public final static String COLUMN_PAST_SEVERITY = "past severity";
    public final static String COLUMN_LOCATION = "location";
    public final static String COLUMN_LAST_OCCURED = "last occured";
    public final static String COLUMN_VOTES_FOR_PAST = "votes for past";
    public final static String COLUMN_PREDICTION_TIME = "predictedtime";
    public final static String COLUMN_PREDICTION_SEVERITY = "predictedseverity";
    public final static String COLUMN_PREDICTION_VOTES = "prediction votes";

    public static final int LOW = 0;
    public static final int MEDIUM = 1;
    public static final int HIGH = 2;
    public static final int EARTHQUAKE = 0;
    public static final int FLOOD = 1;
    public static final int LANDSLIDE = 2;
    public static final int TERROR_ATTACK = 3;

}}

Это мой вспомогательный класс:

public class DisasterDBHelper extends SQLiteOpenHelper {

private static final String DATABASE_NAME = "disasterreporter.db";
private static final int DATABASE_VERSION = 1;

public DisasterDBHelper (Context context) {
    super(context,DATABASE_NAME, null, DATABASE_VERSION);

}

@Override
public void onCreate(SQLiteDatabase db) {
    String SQL_CREATE_TABLE = "CREATE TABLE " + DisasterEntry.TABLE_NAME
            + " ( " + DisasterEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
            + DisasterEntry.COLUMN_DISASTER + " INTEGER NOT NULL, "
            + DisasterEntry.COLUMN_LOCATION + " TEXT NOT NULL, "
            + DisasterEntry.COLUMN_LAST_OCCURED + " INTEGER NOT NULL, "
            + DisasterEntry.COLUMN_PAST_SEVERITY + " INTEGER NOT NULL DEFAULT 1, "
            + DisasterEntry.COLUMN_VOTES_FOR_PAST + " INTEGER NOT NULL DEFAULT 1,"
            + DisasterEntry.COLUMN_PREDICTION_SEVERITY
            + " INTEGER NOT NULL DEFAULT 1,"
            + DisasterEntry.COLUMN_PREDICTION_TIME
            + " INTEGER NOT NULL DEFAULT 1,"
            + DisasterEntry.COLUMN_PREDICTION_VOTES
            + " INTEGER NOT NULL DEFAULT 1 );";
    db.execSQL(SQL_CREATE_TABLE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}

Это оператор SQL, который показывает ошибку:

ContentValues values = new ContentValues();

                                        values.put(DisasterContract.DisasterEntry._ID,2);
                values.put(DisasterContract.DisasterEntry.COLUMN_DISASTER, DisasterContract.DisasterEntry.TERROR_ATTACK);
    values.put(DisasterContract.DisasterEntry.COLUMN_LOCATION,"loc");
    values.put(DisasterContract.DisasterEntry.COLUMN_LAST_OCCURED, 5);
    values.put(DisasterContract.DisasterEntry.COLUMN_PAST_SEVERITY, DisasterContract.DisasterEntry.MEDIUM);
    values.put(DisasterContract.DisasterEntry.COLUMN_VOTES_FOR_PAST, 7);
    values.put(DisasterContract.DisasterEntry.COLUMN_PREDICTION_SEVERITY,1);
    values.put(DisasterContract.DisasterEntry.COLUMN_PREDICTION_TIME,2);
    values.put(DisasterContract.DisasterEntry.COLUMN_PREDICTION_VOTES,1);
          long newRowId = db.insert(DisasterContract.DisasterEntry.TABLE_NAME, null, values);
          Log.d("Row ID",""+newRowId);

1 Ответ

0 голосов
/ 06 мая 2018

В именах столбцов SQL не должно быть пробелов. Измените COLUMN_LAST_OCCURED с last occured на last_occured и посмотрите, работает ли он для вас.

То же самое для COLUMN_VOTES_FOR_PAST, COLUMN_PAST_SEVERITY и COLUMN_PREDICTION_VOTES.

...