Основная проблема, с которой вы столкнулись, заключается в том, что вы пропустили пробелы между именами столбцов и типами столбцов.Это будет работать, но приведет к тому, что имена столбцов будут объединены с указанным именем столбца с типом.Поэтому, когда вы запустите приложение, у вас будет таблица с именем Tablice_table , которая имеет имя из двух столбцов _idINT и TablicaTEXT .
Когда кнопкащелкнув, запись не будет вставлена, поскольку столбцы _id и Tablica не существуют.
Если вы заглянули в журнал, вы увидите что-то похожее на ( Обратите внимание, что это не приводит к сбою приложения ): -
06-03 20:29:56.109 1143-1143/soanswers.soanswers E/SQLiteLog: (1) table Tablice_table has no column named _id
06-03 20:29:56.109 1143-1143/soanswers.soanswers E/SQLiteDatabase: Error inserting _id=1 Tablica=Test
android.database.sqlite.SQLiteException: table Tablice_table has no column named _id (code 1): , while compiling: INSERT INTO Tablice_table(_id,Tablica) VALUES (?,?)
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
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:1467)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)
at soanswers.soanswers.TabliceBaza.addHandler(TabliceBaza.java:56)
at soanswers.soanswers.MainActivity$1.onClick(MainActivity.java:529)
at android.view.View.performClick(View.java:4084)
at android.view.View$PerformClick.run(View.java:16966)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Исправление этой проблемы заключается в том, чтобы изменить код, включив в него пробелы при создании таблицы, например: -
db.execSQL("CREATE TABLE " + TABLE_NAME + "(" + COL1 + " INT PRIMARY KEY," + COL2 + " TEXT)");
, а затем либо удалить данные приложения, либо удалить приложение.
После удаления данных приложения или повторного запуска приложения предоставленный код (после добавления пробелов в операторе создания таблицы) работает.
Однако, если вы нажметекнопку во второй раз, тогда вы увидите сообщение в журнале ( Опять же это не приводит к краху приложения ) по направлениям: -
06-03 20:38:24.451 1256-1256/soanswers.soanswers E/SQLiteDatabase: Error inserting _id=1 Tablica=Test
android.database.sqlite.SQLiteConstraintException: column _id is not unique (code 19)
at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:775)
at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)
at soanswers.soanswers.TabliceBaza.addHandler(TabliceBaza.java:54)
at soanswers.soanswers.MainActivity$1.onClick(MainActivity.java:529)
at android.view.View.performClick(View.java:4084)
at android.view.View$PerformClick.run(View.java:16966)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Это связано с тем, что _id является первичным ключом и должен быть незаполненным, поэтому попытка добавить строку с _id как 1 снова не удастся.