我正在尝试使用sqlite为我的数据库创建一个新表:
String CREATE_ARCHIVE_TABLE =
"CREATE TABLE {0} ({1} INTEGER PRIMARY KEY AUTOINCREMENT," +
" {2} TEXT NOT NULL, {3} TEXT NOT NULL, {4} TEXT NOT NULL, {5} INTEGER);";
db.execSQL(MessageFormat.format(CREATE_ARCHIVE_TABLE,AItext.TABLE_NAME,AItext._ID,
AItext.TITLE,AItext.MESSAGE,AItext.DATE,AItext.TYPE));
与界面:
public interface AItext extends BaseColumns {
String TABLE_NAME = "table_name";
String TITLE = "title";
String MESSAGE = "message";
String DATE = "date";
String TYPE = "type";
String[] COLUMNS = new String[]
{ _ID, TITLE, MESSAGE, DATE, TYPE };
}
但我有以下异常,看不到错误
android.database.sqlite.SQLiteException: near "INTEGER": syntax error: ,
while compiling: CREATE TABLE archive_contacts_name (_id INTEGER PRIMARY KEY
AUTOINCREMENT, message INTEGER, name TEXT NOT NULL, phone TEXT NOT NULL,
check INTEGER, note TEXT NOT NULL);
正如@aim所说,CHECK实际上是一个SQLite关键字,不能用作列名。
CHECK约束可以附加到列定义或指定为表约束。实际上,这没有什么区别。每次将新行插入表中或更新现有行时,都会评估与每个CHECK约束关联的表达式,并将其转换为NUMERIC值,方法与CAST表达式相同。如果结果为零(整数值0或实数值0.0),则发生约束冲突。如果CHECK表达式的计算结果为NULL或任何其他非零值,则不是约束冲突。CHECK约束的表达式可能不包含子查询。
从3.3.0版开始,已经支持CHECK约束。在3.3.0版之前,CHECK约束已解析但未强制执行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句