#android #sqlite #android-sqlite
#Android #sqlite #android-sqlite
Вопрос:
У меня есть таблица с 2 столбцами.
- ключ — первичный ключ, автоинкремент
- временная метка — DateTime, Default -> CURRENT_TIMESTAMP
Я пытаюсь вставить значение в эту таблицу с помощью объекта SQLiteOpenHelper. Но он выдает исключение:
public void logTime() {
SQLiteDatabase db = getWritableDatabase();
db.insert(TABLE_LOG_TIME, null, new ContentValues());
}
Исключение:
E/SQLiteLog: (1) near "null": syntax error
E/SQLiteDatabase: Error inserting
android.database.sqlite.SQLiteException: near "null": syntax error (code 1): , while compiling: INSERT INTO log_time(null) VALUES (NULL)
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498)
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.insertWithOnConflict(SQLiteDatabase.java:1469)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341)
at com.livinglifetechway.mytime.db.DatabaseHelper.logScreenUnlock(DatabaseHelper.java:62)
at com.livinglifetechway.mytime.ScreenUnlockBroadcastReceiver.onReceive(ScreenUnlockBroadcastReceiver.java:25)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:2732)
at android.app.ActivityThread.access$1800(ActivityThread.java:153)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1428)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5441)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)
Вызов onCreate базы данных:
@Override
public void onCreate(SQLiteDatabase db) {
// Create Statements
String CREATE_TABLE_LOG_TIME = "CREATE TABLE " TABLE_LOG_TIME " "
"("
KEY_LOG_TIME_ID " INTEGER PRIMARY KEY AUTOINCREMENT, "
KEY_LOG_TIME_TIME " DATETIME DEFAULT CURRENT_TIMESTAMP"
")";
// Execute statements
db.execSQL(CREATE_TABLE_LOG_TIME);
}
Все значения являются значениями по умолчанию / auto_increment.
Как я могу вставить запись в эту таблицу?
Комментарии:
1. что вы делаете перед db.insert(TABLE_LOG_TIME, null, new ContentValues()); можете ли вы показать?
2. Ваш код реализации базы данных?
3. @Rahul Эти 2 строки находятся внутри простого простого метода.
4. могу ли я увидеть структуру вашей таблицы?
5. @Rahul Я отредактировал вопрос более подробно
Ответ №1:
Чтобы вставить строку со значениями по умолчанию, укажите хотя бы один столбец с нулевым значением:
ContentValues cv = new ContentValues();
cv.putNull(KEY_LOG_TIME_TIME);
db.insert(TABLE_LOG_TIME, null, cv);
Комментарии:
1. Я не знал о
putNull
Ответ №2:
замените это
db.insert(TABLE_LOG_TIME, null, new ContentValues());
с
db.insert(TABLE_LOG_TIME, null, null);