Reputation: 45
Here's my code:
String CREATE_DATABASE = "CREATE TABLE " + TABLE_NAME + "(" +
KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
"title TEXT, "+
"author TEXT, "+
"state TEXT);";
db.execSQL(CREATE_DATABASE);
The LogCat says : 12-11 23:43:50.553: E/AndroidRuntime(3706): android.database.sqlite.SQLiteException: near "CREATE TABLE": syntax error (code 1): , while compiling: CREATE TABLE PapersTable(_id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, author TEXT, state TEXT);
Upvotes: 3
Views: 15245
Reputation: 309
Mine was missing the closing )
after the table body.
CREATE TABLE IF NOT EXIST user_table (
id integer NOT NULL PRIMARY KEY AUTOINCREMENT,
title TEXT,
author TEXT,
state TEXT
); -- this closing ')' was missing
Upvotes: 0
Reputation: 4499
Try this code in your onCreate method.
Code To Replace: String CREATE_DATABASE = "CREATE TABLE "+TABLE_NAME+ " ( "+KEY_ID+" INTEGER PRIMARY KEY, "+KEY_TITLE+"TEXT, "+KEY_AUTHOR+"TEXT, "+KEY_STATE+"TEXT )"; db.execSQL(CREATE_DATABASE);
Upvotes: 0
Reputation: 152797
The CREATE TABLE
syntax is all right as you've posted it.
I suspect there's a non-breaking space (ASCII 0xA0) between CREATE
and TABLE
. Replace it with the regular space (ASCII 0x20). That would explain the syntax error you posted: parser is treating CREATE TABLE
as a single unknown token and not as two separate known tokens CREATE
and TABLE
.
What is definitely wrong is that you call db.close()
on the SQLiteDatabase db
passed in as a parameter to your function. You should only close databases you opened yourself and closing it this way will lead to an exception, albeit a different one.
Upvotes: 4
Reputation: 3653
In SQLite, a column declared integer primary key will auto increment, so try removing that:
String CREATE_DATABASE = "CREATE TABLE " + TABLE_NAME + "(" +
KEY_ID + " INTEGER PRIMARY KEY, " +
"title TEXT, "+
"author TEXT, "+
"state TEXT);";
See this answer for reference.
Upvotes: -1