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+"));";
I can not find out what gives the following error, please help me out thank you.
09-29 13:41:19.760: ERROR/Database(334): Failure 1 (near "autoincrement": syntax error) on 0x218df0 when preparing 'create table MY_TABLE2 (_id2 integer autoincrement, Content2 text not null, Content3 text not null, FOREIGN KEY (_id2) REFERENCES MY_TABLE (_id));'.
09-29 13:41:19.770: DEBUG/AndroidRuntime(334): Shutting down VM
09-29 13:41:19.770: WARN/dalvikvm(334): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
09-29 13:41:19.791: ERROR/AndroidRuntime(334): FATAL EXCEPTION: main
09-29 13:41:19.791: ERROR/AndroidRuntime(334): java.lang.RuntimeException: Unable to start activity ComponentInfo{sep.com/sep.com.SepActivity}: android.database.sqlite.SQLiteException: near "autoincrement": syntax error: create table MY_TABLE2 (_id2 integer autoincrement, Content2 text not null, Content3 text not null, FOREIGN KEY (_id2) REFERENCES MY_TABLE (_id));
An above answer says that 'There is no autoincrement keyword in SQLite.' This is incorrect. There is a keyword called 'autoincrement' and I used it in the primary key.
For example:
Also make sure when you enter data to this table use the keyword 'null' in the place of the primary key.
Like this:
NOTE: IN SQLite there in no
AUTOINCREMENT
keyword. So, you have to just useINTEGER PRIMARY KEY NOT NULL
. It will automatically insert the incremented value for the attribute.This:
should be this:
If you follow the syntax diagrams for
CREATE TABLE
you'll see thatautoincrement
should only come afterprimary key
.If you want
_id2
to be a foreign key then you don't want it to be auto increment at all though.In short:
In SQLite a column declared INTEGER PRIMARY KEY will autoincrement.
There is noautoincrement
keyword in SQLite, that is why you are getting an error.You can find out more on SQLite FAQ.
EDIT: just writing
integer primary key
it is enough.SQLite
will automatically increment yourids
.EDIT2: Your
onUpgrade()
method should look like this :Three things: