Когда я выполняю SQL в своем приложении, я получаю следующую ошибку:

android.database.sqlite.SQLiteException: near "(": syntax error (code 1): , while compiling: CREATE TABLE IF NOT EXISTS data (id int auto_increment primary key, data_type int default 0, data float not null, time timestamp default now());

Код, вызывающий ошибку:

@Override
public void onCreate(SQLiteDatabase db){
    db.execSQL("CREATE TABLE IF NOT EXISTS " + DATA_TABLE + " (id int auto_increment primary key, data_type int default 0, data float not null, time timestamp default now());");
}

LogCat

12-11 00:13:55.431  22335-22335/com.shockdoc.ama.shockdoc E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.shockdoc.ama.shockdoc, PID: 22335
    android.database.sqlite.SQLiteException: near "(": syntax error (code 1): , while compiling: CREATE TABLE IF NOT EXISTS data (_id int auto_increment primary key, data_type int default 0, data float not null, time timestamp default now());
            at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
            at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1113)
            at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:690)
            at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
            at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
            at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
            at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1788)
            at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1719)
            at com.shockdoc.ama.shockdoc.DB.onCreate(DB.java:57)
            at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
            at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
            at com.shockdoc.ama.shockdoc.DB.saveStat(DB.java:31)
            at com.shockdoc.ama.shockdoc.MainActivity.onSensorChanged(MainActivity.java:99)
            at android.hardware.SystemSensorManager$SensorEventQueue.dispatchSensorEvent(SystemSensorManager.java:474)
            at android.os.MessageQueue.nativePollOnce(Native Method)
            at android.os.MessageQueue.next(MessageQueue.java:138)
            at android.os.Looper.loop(Looper.java:123)
            at android.app.ActivityThread.main(ActivityThread.java:5356)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
            at dalvik.system.NativeStart.main(Native Method)

Я пропустил саму строку через средство проверки синтаксических ошибок, и, похоже, все в порядке.

0
terpak 11 Дек 2014 в 08:15
Добавьте код, в котором вы получаете сообщение об ошибке (создайте часть таблицы) и полный логарифм.
 – 
Mohammed Ali
11 Дек 2014 в 08:16

2 ответа

Лучший ответ

Ошибка связана с default now()

Попробуйте использовать это:

CREATE TABLE IF NOT EXISTS data (id int auto_increment primary key, data_type int default 0, data float not null, time timestamp default current_timestamp);

Проверьте это: SQLite - поле даты и времени по умолчанию соответствует текущему времени (сейчас )

Надеюсь, это поможет.

3
MysticMagicϡ 11 Дек 2014 в 08:21

Это должно быть имя вашего стола. "данные" - одно из многих ключевых слов, которые широко используются в различных языках программирования, языках запросов ...

Так что вам следует попробовать другое имя. В любом случае, «данные» не кажутся осмысленными именами, программист должен выработать хорошую привычку именовать переменные ...

-1
marc_s 20 Дек 2014 в 17:43