【问题标题】:SQLite Error Code near "IS"“IS”附近的 SQLite 错误代码
【发布时间】:2014-08-14 04:30:25
【问题描述】:

我在创建 SQLite 数据库表时违反了规则,我不确定如何解决此问题。

public void onCreate(SQLiteDatabase db) {
        String CREATE_ALARMS_TABLE = "CREATE TABLE " + TABLE_ALARMS + "(" + KEY_ID + " INTEGER PRIMARY KEY," + KEY_BLOCKED_NUMBER + " TEXT," + KEY_FREQUENCY_GPS + " INTEGER FREQUENCY," + KEY_CLTTL + " INTEGER FREQUENCY, "
                + KEY_ICON + " ICON KEY, " + KEY_RINGTONE + " RINGTONE KEY," + KEY_ALARM_SENSITIVITY + " INTEGER SENSITIVITY," + KEY_SMSTTL + " STRING SMSTTL," + KEY_PASSWORD + " TEXT," + KEY_EMAIL + " TEXT," + KEY_ARMED + "IS ARMED,"
                + KEY_GPS + " IS GPS," + KEY_NETWORK + " IS NETWORK," + KEY_SMSOPENED + " IS OPENED," + KEY_INVALIDUNLOCK + " IS UNLOCKED," + KEY_DATA + " IS DATA" + ").";

        db.execSQL(CREATE_ALARMS_TABLE);
        Log.i(TAG, CREATE_ALARMS_TABLE);
    }

LogCat:

Caused by: android.database.sqlite.SQLiteException: near "IS": syntax error (code 1): , while compiling: CREATE TABLE alarms(id INTEGER PRIMARY KEY,blocked_number TEXT,frequency_gps INTEGER FREQUENCY,clttl INTEGER FREQUENCY, icon ICON KEY, ringtone RINGTONE KEY,alarm_sensitivity INTEGER SENSITIVITY,smsttl STRING SMSTTL,password TEXT,email TEXT,armedIS ARMED,gps IS GPS,network IS NETWORK,sms_opened IS OPENED,invalid_unlockIS UNLOCKED,data IS DATA,).

【问题讨论】:

  • 列名不能有空格
  • @ScaryWombat 除非您使用 `` 转义列名。

标签: java android mysql sqlite


【解决方案1】:

KEY_ARMED 后面有一个空格。

但实际问题是IS是keyword,所以无论出现在哪里都必须引用:

String CREATE_ALARMS_TABLE = "..." + KEY_ARMED + " \"IS\" ARMED,"
        + KEY_GPS + " \"IS\" GPS," + ...;

虽然允许在列类型中包含多个随机单词,但最好不要使用IS。

【讨论】:

    【解决方案2】:

    IS 是 SQL 中的关键字,它在 CREATE TABLE 语句中的语法无效。

    考虑以下几点:

    【讨论】:

      猜你喜欢
      • 2014-08-02
      • 2021-06-09
      • 2016-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-12
      • 2016-03-12
      相关资源
      最近更新 更多