public static final String MYDATABASE_NAME = "MY_DATABASE";
public static final String MYDATABASE_TABLE = "MY_TABLE";
public static final String MYDATABASE_TABLE2 = "MY_TABLE2";
public static final int MYDATABASE_VERSION = 1;
public static final String KEY_ID = "_id";
public static final String KEY_ID2 = "_id2";
public static final String KEY_CONTENT1 = "Content1";
public static final String KEY_CONTENT2 = "Content2";
public static final String KEY_CONTENT3 = "Content3";
//create table MY_DATABASE (ID integer primary key, Content text not null);
private static final String SCRIPT_CREATE_DATABASE = "create table " + MYDATABASE_TABLE + " ("
+KEY_ID + " integer primary key autoincrement, "
+ KEY_CONTENT1 + " text not null);";
private static final String SCRIPT_CREATE_DATABASE2 = "create table " + MYDATABASE_TABLE2 + " ("
+ KEY_ID2 + " integer autoincrement, "
+ KEY_CONTENT2 + " text not null, "
+ KEY_CONTENT3 + " text not null, "
+ " FOREIGN KEY ("+KEY_ID2+") REFERENCES "+MYDATABASE_TABLE+" ("+KEY_ID+"));";
我无法找出导致以下错误的内容,请帮助我谢谢。
09-29 13:41:19.760:ERROR / Database(334):失败1(近 准备'创建时,在0x218df0上的“自动增量”:语法错误) 表MY_TABLE2(_id2整数自动增量,Content2文本不为空, Content3 text not null,FOREIGN KEY(_id2)REFERENCES MY_TABLE (_id));”
09-29 13:41:19.770:DEBUG / AndroidRuntime(334):关闭虚拟机
09-29 13:41:19.770:WARN / dalvikvm(334):threadid = 1:线程退出 未捕获的异常(组= 0x4001d800)
09-29 13:41:19.791:ERROR / AndroidRuntime(334):致命异常:主
09-29 13:41:19.791:ERROR / AndroidRuntime(334): java.lang.RuntimeException:无法启动活动 ComponentInfo {} sep.com/sep.com.SepActivity: android.database.sqlite.SQLiteException:靠近“autoincrement”:语法 错误:创建表MY_TABLE2(_id2整数自动增量,Content2 text not null,Content3 text not null,FOREIGN KEY(_id2)REFERENCES MY_TABLE(_id));
答案 0 :(得分:37)
简而言之:In SQLite a column declared INTEGER PRIMARY KEY will autoincrement.
SQLite中没有autoincrement
个关键字,这就是您收到错误的原因。
您可以在SQLite FAQ上找到更多信息。
编辑:只需撰写integer primary key
即可。 SQLite
会自动增加您的ids
。
EDIT2:您的onUpgrade()
方法应如下所示:
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (newVersion > oldVersion) {
Log.w("MyAppTag","Updating database from version " + oldVersion + " to "
+ newVersion + " .Existing data will be lost.");
db.execSQL("DROP TABLE IF EXISTS " + MY_TABLE);
db.execSQL("DROP TABLE IF EXISTS " + MY_TABLE2);
onCreate(db);
}
答案 1 :(得分:8)
此:
+ KEY_ID2 + " integer autoincrement, "
应该是这样的:
+ KEY_ID2 + " integer primary key autoincrement, "
如果您按照CREATE TABLE
的语法图表进行操作,您会发现autoincrement
应该只在primary key
之后。
如果您希望_id2
成为外键,那么您根本不希望它自动增加。
答案 2 :(得分:3)
上面的答案说'SQLite中没有自动增量关键字'。这是不正确的。有一个名为'autoincrement'的关键字,我在主键中使用它。
例如:
static final String CREATE_LOCATION_TABLE="CREATE TABLE Location"+
"( LocationID INTEGER PRIMARY KEY AUTOINCREMENT," +
" RestuarantID int not null," +
" Latitude float not null," +
" Longitude float not null)";
另外,请确保在向此表输入数据时,请在主键的位置使用关键字“null”。
像这样:
static final String INSERT_LOCATION= "Insert into Location values" +
"(null,1002,6.905369,79.851514)";
答案 3 :(得分:1)
三件事:
答案 4 :(得分:0)
sqlite> CREATE TABLE app (a INTEGER PRIMARY KEY NOT NULL, B VARCHAR);
sqlite> insert into app (b) values ('');
sqlite> insert into app (b) values ('a');
sqlite>
sqlite> insert into app (b) values ('b');
sqlite> insert into app (b) values ('c');
sqlite> insert into app (b) values ('d');
sqlite> select * from app;
1|
2|a
3|b
4|c
5|d
sqlite> exit;
注意:在SQLite中没有AUTOINCREMENT
个关键字。所以,你必须使用INTEGER PRIMARY KEY NOT NULL
。它将自动插入属性的递增值。