sqlite 未创建表

9wbgstp7  于 2022-11-15  发布在  SQLite
关注(0)|答案(1)|浏览(150)

我在想为什么我不能在这里创建表格,Android Studio从来没有显示过语法错误

class SQLiteHelper (context: Context) :
    SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION){
    
    companion object{

        private const val DATABASE_VERSION = 1
        private const val DATABASE_NAME = "student.db"
        private const val TBL_STUDENT = "tbl_student1"
        private const val ID = "id"
        private const val NAME = "name"
        private const val EMAIL = "email"

    }

    override fun onCreate(db: SQLiteDatabase?) {
        val createTBlStudent = ("CREATE TABLE " + TBL_STUDENT + " ("
                + ID + " INTEGER PRIMARY KEY, " + NAME + " TEXT, "
                + EMAIL + " TEXT " + ")")  
        db?.execSQL(createTBlStudent)   
    }
}
dkqlctbz

dkqlctbz1#

最有可能的问题是您尚未访问该数据库,因此该数据库将不存在。
另一个问题可能是您已经运行了代码,表创建失败,并且您没有删除空数据库。如果是这样的话,只需卸载应用并重新运行

  • 即如果已经调用了onCreate已经创建了数据库,即使onCreate失败,onCreate也不会再次运行,除非删除数据库(卸载是最简单的方式)。

如果只使用SQLiteHelper示例化,则不会创建数据库。在调用onCreate方法之前,您必须尝试对数据库执行一些操作。
下面显示了这一点(假设您已经包含了onUpgrade方法的覆盖(它不需要在正文中执行任何操作))。此代码使用与您的代码完全相同的副本(但覆盖了onUpgrade)。
在活动中:-

class MainActivity : AppCompatActivity() {
    lateinit var helper: SQLiteHelper
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main) 

        helper= SQLiteHelper(this)
        Log.d("DBSTATUS_BEFORE","Database ${this.getDatabasePath(helper.databaseName)} EXISTS ${File(this.getDatabasePath(helper.databaseName).path).exists()}")
        helper.writableDatabase //* force access the database i.e force an Open*//
        Log.d("DBSTATUS_AFTER","Database ${this.getDatabasePath(helper.databaseName)} EXISTS ${File(this.getDatabasePath(helper.databaseName).path).exists()}")
    }
}

作为全新安装运行时(即,当不存在数据库时),日志包括:

2022-09-14 15:03:14.588 D/DBSTATUS_BEFORE: Database /data/user/0/a.a.so73657002kotlinsqlite/databases/student.db EXISTS false
2022-09-14 15:03:14.634 D/DBSTATUS_AFTER: Database /data/user/0/a.a.so73657002kotlinsqlite/databases/student.db EXISTS true

如可以看到的,直到访问数据库并且获得可写(或很可能是可写的)数据库时,该数据库实际上才被创建。
当然,除非卸载数据库的应用程序存在,否则在数据库的整个生命周期内,这是onCreate方法唯一一次被自动调用。
使用应用程序检查,您可以看到:-

  • 数据库中没有数据,但数据库存在。
  • 忽略另一个数据库,它的存在是因为我使用了现有的代码来提供这个答案。
    当然,正如您所看到的,您的代码很好并且工作正常(与前面提到的onUpgrade方法不同)

相关问题