java.lang.RuntimeException: 无法启动 activity

java.lang.RuntimeException: Unable to start activity

我遇到了这个错误

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.jitendra.ori/com.example.jitendra.ori.CatalogActivity}: android.database.sqlite.SQLiteException: near "add": syntax error (code 1): , while compiling: CREATE TABLE add (_id INTEGER PRIMARY KEY AUTOINCREMENT, add1 TEXT NOT NULL, add2 TEXT NOT NULL, add3 TEXT NOT NULL, city TEXT, pin INTEGER NOT NULL DEFAULT 0);

我的数据库创建命令:

    public void onCreate(SQLiteDatabase db) {

    String SQL_CREATE_PETS_TABLE =  "CREATE TABLE " + AddEntry.TABLE_NAME + " ("
            + AddEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
            + AddEntry.COLUMN_ADD1 + " TEXT NOT NULL, "
            + AddEntry.COLUMN_ADD2 + " TEXT NOT NULL, "
            + AddEntry.COLUMN_ADD3 + " TEXT NOT NULL, "
            + AddEntry.COLUMN_CITY + " TEXT, "
            + AddEntry.COLUMN_PIN + " INTEGER NOT NULL DEFAULT 0);";

    db.execSQL(SQL_CREATE_PETS_TABLE);
}

数据库合同:

    public final static String TABLE_NAME = "add";
    public final static String _ID = BaseColumns._ID;
    public final static String COLUMN_ADD1 ="add1";
    public final static String COLUMN_ADD2 = "add2";
    public final static String COLUMN_ADD3 = "add3";
    public final static String COLUMN_CITY = "city";
    public final static String COLUMN_PIN= "pin";

请指出这个创建 table 命令有什么问题

add 是一个 sqlite keyword 并且不能在没有引号的情况下用作 table 名称等标识符。最好重命名 table.

问题

AddEntry.TABLE_NAME .You should Remove AddEntry . It must be Keyword

纠正您的查询

String SQL_CREATE_PETS_TABLE = "CREATE TABLE " + TABLE_NAME + "("
            + AddEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT ," 
            + AddEntry.COLUMN_ADD1 + " TEXT NOT NULL ,"
            + AddEntry.COLUMN_ADD2 + " TEXT NOT NULL ," 
            + AddEntry.COLUMN_ADD3 + " TEXT NOT NULL ,"
            + AddEntry.COLUMN_CITY + " TEXT ," 
            + AddEntry.COLUMN_PIN + " INTEGER NOT NULL DEFAULT 0" + ")";

清理 - 重建和 运行 .

更改table名称"add"是SQLITE中的关键字

关键词 是在 SQL 中具有重要意义的词。 SELECTDELETEBIGINT 等某些关键字是 保留的 并且需要特殊处理才能用作标识符,例如 table 和列名。这可能也适用于内置函数的名称。

非保留关键字 允许作为标识符而不用引号。如果您引用保留字,则允许将其用作标识符。

mysql> CREATE TABLE interval (begin INT, end INT);

ERROR 1064 (42000): You have an error in your SQL syntax ... near 'interval (begin INT, end INT)'

BEGIN 和 END 是关键字但不是保留的,因此它们作为标识符不需要加引号。 INTERVAL 是保留关键字,必须用引号引起来才能用作标识符:

mysql> CREATE TABLE 'interval' (begin INT, end INT);

Query OK, 0 rows affected (0.01 sec)

ADD 是保留关键字,因此您不能使用 add 作为 table 名称。 更改名称或引用它。

有关其他信息和其他关键字 的列表,请查看此link。 https://dev.mysql.com/doc/refman/5.7/en/keywords.html