· 6 years ago · Jun 17, 2019, 05:36 AM
1E/AndroidRuntime: FATAL EXCEPTION: main
2Process: com.listochek.chem.calc, PID: 3941
3java.lang.RuntimeException: Unable to start activity ComponentInfo{com.listochek.chem.calc/com.listochek.chem.calc.MainActivity}: android.database.sqlite.SQLiteException: near "AUTOINCREMENT": syntax error (code 1 SQLITE_ERROR): , while compiling: CREATE TABLE IF NOT EXISTS `Elements`(id INTEGER PRIMARY KEY UNIQUE AUTOINCREMENT, Химический элемент TEXT, Символ TEXT, Атомная масса REAL);
4 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2946)
5 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081)
6 at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
7 at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
8 at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
9 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
10 at android.os.Handler.dispatchMessage(Handler.java:106)
11 at android.os.Looper.loop(Looper.java:201)
12 at android.app.ActivityThread.main(ActivityThread.java:6810)
13 at java.lang.reflect.Method.invoke(Native Method)
14 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
15 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
16 Caused by: android.database.sqlite.SQLiteException: near "AUTOINCREMENT": syntax error (code 1 SQLITE_ERROR): , while compiling: CREATE TABLE IF NOT EXISTS `Elements`(id INTEGER PRIMARY KEY UNIQUE AUTOINCREMENT, Химический элемент TEXT, Символ TEXT, Атомная масса REAL);
17 at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
18 at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:903)
19 at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:514)
20 at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
21 at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
22 at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
23 at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1770)
24 at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1698)
25 at org.jetbrains.anko.db.DatabaseKt.createTable(Database.kt:80)
26 at com.listochek.chem.calc.Data.DBHelper.onCreate(DBHelper.kt:20)
27 at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:393)
28 at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:298)
29 at org.jetbrains.anko.db.ManagedSQLiteOpenHelper.openDatabase(Database.kt:186)
30 at org.jetbrains.anko.db.ManagedSQLiteOpenHelper.use(Database.kt:177)
31 at com.listochek.chem.calc.MainActivity.onCreate(MainActivity.kt:20)
32 at android.app.Activity.performCreate(Activity.java:7224)
33 at android.app.Activity.performCreate(Activity.java:7213)
34 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)
35 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2926)
36 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081)
37 at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
38 at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
39 at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
40 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
41 at android.os.Handler.dispatchMessage(Handler.java:106)
42 at android.os.Looper.loop(Looper.java:201)
43 at android.app.ActivityThread.main(ActivityThread.java:6810)
44 at java.lang.reflect.Method.invoke(Native Method)
45 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
46 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
47
48class MainActivity : AppCompatActivity() {
49
50override fun onCreate(savedInstanceState: Bundle?) {
51 super.onCreate(savedInstanceState)
52 setContentView(R.layout.activity_main)
53 database.use {
54 insert(Elements.TABLE_NAME,
55 Elements.COLUMN_ID to 1,
56 Elements.COLUMN_ELEMENT to "Водород",
57 Elements.COLUMN_SYMBOL to "H",
58 Elements.COLUMN_MASS to 1.00794)
59 insert(Elements.TABLE_NAME,
60 Elements.COLUMN_ID to 2,
61 Elements.COLUMN_ELEMENT to "Гелий",
62 Elements.COLUMN_SYMBOL to "He",
63 Elements.COLUMN_MASS to 4.00260)
64 }
65 val test = database.use {
66 select(Elements.TABLE_NAME).exec { parseList<Any>(classParser()) }
67 }
68 ListView.adapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, test)
69}
70
71data class Elements(var id : Int, var Element : String, var Symbol : String, var Mass : Double) {
72companion object {
73 const val TABLE_NAME = "Elements"
74 const val COLUMN_ID = "id"
75 const val COLUMN_ELEMENT = "Element"
76 const val COLUMN_SYMBOL = "Symbol"
77 const val COLUMN_MASS = ""
78}
79
80class DBHelper(ctx: Context) : ManagedSQLiteOpenHelper(ctx, "Elements", null, 1) {
81companion object {
82 private var instance: DBHelper? = null
83 @Synchronized
84 fun getInstance(ctx: Context): DBHelper {
85 if (instance == null) {
86 instance = DBHelper(ctx.getApplicationContext())
87 }
88 return instance!!
89 }
90}
91
92override fun onCreate(db: SQLiteDatabase) {
93 db.createTable("Elements", true,
94 "id" to INTEGER + PRIMARY_KEY + UNIQUE + AUTOINCREMENT,
95 "Химический элемент" to TEXT,
96 "Символ" to TEXT,
97 "Атомная масса" to REAL
98 )
99}
100
101override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
102 db.dropTable("Elements", true)
103}