【问题标题】:SQLiteException: near "occured": syntax error (code 1)SQLiteException:接近“发生”:语法错误(代码 1)
【发布时间】:2018-05-06 16:01:18
【问题描述】:

我试图在我的数据库中的表中插入一行,但我卡住了。插入函数返回 -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,预测严重性,过去的严重性) VALUES (?,?,?,?,?,?,?,?,?)

这是合约类:

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);

【问题讨论】:

    标签: android android-sqlite android-sql


    【解决方案1】:

    SQL 列名中不应包含空格。 将 COLUMN_LAST_OCCURED 从 last occured 更改为 last_occured 看看它是否适合您。

    COLUMN_VOTES_FOR_PAST、COLUMN_PAST_SEVERITY 和 COLUMN_PREDICTION_VOTES 相同。

    【讨论】:

    • 是同一个错误还是略有不同?您是否在代码中的其他任何地方都“最后出现”了空格?
    • 现在,这是一个不同的错误:表灾难没有名为 lastoccured 的列
    • 我通过重新安装应用程序修复了它
    猜你喜欢
    • 1970-01-01
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 2018-08-02
    • 2016-06-29
    • 2013-03-13
    • 1970-01-01
    相关资源
    最近更新 更多