Kotlin SQLite 创建两个表



我们尝试使用 Kotlin 在数据库中创建两个表。我们已经尝试了多种不同的语法。如果我们注释掉与第二个表关联的所有代码,则会创建第一个表并保存数据。这是相关代码

class DBHelper(context: Context):SQLiteOpenHelper(context,DBHelper.DB_NAME,null,DBHelper.DB_VERSION) {
override fun onCreate(db: SQLiteDatabase?) {
val CREATE_TABLE_DEPT = "CREATE TABLE ${DEPT_TABLE} ($colidD INTEGER PRIMARY KEY, $colDept TEXT);"
val CREATE_TABLE_ITEM = "CREATE TABLE ${ITEM_TABLE} ($colidI INTEGER PRIMARY KEY, $colItem TEXT);"
db!!.execSQL(CREATE_TABLE_DEPT + CREATE_TABLE_ITEM)
//db!!.execSQL(CREATE_TABLE_ITEM)
}

override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
val DROP_TABLE_DEPT = "DROP TABLE IF EXISTS $DEPT_TABLE"
val DROP_TABLE_ITEM = "DROP TABLE IF EXISTS $ITEM_TABLE"
db!!.execSQL(DROP_TABLE_DEPT + DROP_TABLE_ITEM)
//db!!.execSQL(DROP_TABLE_ITEM)
onCreate(db)
}

伴随对象

companion object {
private val DB_VERSION = 1
private val DB_NAME = "Grocery.db"
private val DEPT_TABLE = "Deptatment"
private val colidD = "idD"
private val colDept = "Dept"
private val ITEM_TABLE = "GroceryItems"
private val colidI = "idI"
private val colItem = "Item"
}

我们希望这个问题是显而易见的!如何使用 Kotlin 在 sqlite 中创建第二个表?

无论你使用的是 Android 还是 kotlin。

您应该按如下方式定义代码。

override fun onCreate(db: SQLiteDatabase?) {
val CREATE_TABLE_DEPT = "CREATE TABLE ${DEPT_TABLE} ($colidD INTEGER PRIMARY KEY, $colDept TEXT);"
val CREATE_TABLE_ITEM = "CREATE TABLE ${ITEM_TABLE} ($colidI INTEGER PRIMARY KEY, $colItem TEXT);"
db!!.execSQL(CREATE_TABLE_DEPT)
db!!.execSQL(CREATE_TABLE_ITEM)
}

你的db!!.execSQL(CREATE_TABLE_DEPT + CREATE_TABLE_ITEM)错了。 尝试

db.execSQL(CREATE_TABLE_DEPT ); db.execSQL(CREATE_TABLE_ITEM);

不要连接 SQl 查询。而是在不同的语句中编写查询。例如;

override fun onCreate(db: SQLiteDatabase?) {
val CREATE_TABLE_DEPT = "CREATE TABLE if not exists ${DEPT_TABLE} ($colidD INTEGER PRIMARY KEY, $colDept TEXT);"
val CREATE_TABLE_ITEM = "CREATE TABLE if not exists ${ITEM_TABLE} ($colidI INTEGER PRIMARY KEY, $colItem TEXT);"
db!!.execSQL(CREATE_TABLE_DEPT )
db.execSQL(CREATE_TABLE_ITEM)
//db!!.execSQL(CREATE_TABLE_ITEM)
}

最新更新