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 中具有重要意义的词。 SELECT
、DELETE
或 BIGINT
等某些关键字是 保留的 并且需要特殊处理才能用作标识符,例如 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
我遇到了这个错误
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 中具有重要意义的词。 SELECT
、DELETE
或 BIGINT
等某些关键字是 保留的 并且需要特殊处理才能用作标识符,例如 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