Android SQLiteOpenHelper 使用教程

版权申诉
0 下载量 146 浏览量 更新于2024-08-19 收藏 17KB DOCX 举报
"本文档主要介绍了Android中SQLiteOpenHelper类的应用实例,包括如何创建数据库、插入数据以及查询数据。SQLiteOpenHelper是Android系统提供的一种用于管理SQLite数据库的辅助类,它简化了数据库版本管理和创建、升级数据库的过程。" 在Android开发中,SQLiteOpenHelper是一个关键类,它帮助我们初始化数据库并提供创建和操作SQLite数据库的方法。以下是对SQLiteOpenHelper类及其在创建数据库、插入数据和查询数据中的应用的详细说明: 1、创建数据库: 当应用首次运行时,SQLiteOpenHelper的子类需要重写`onCreate()`方法来定义如何创建数据库。在这个例子中,`MyDBHelper`类继承了SQLiteOpenHelper,并在`onCreate()`方法中编写创建数据库表的SQL语句。例如,通过`db.execSQL("CREATE TABLE IF NOT EXISTS table_name (column1, column2, ...);")`来创建表。在MainActivity中,通过实例化`MyDBHelper`并调用`getWritableDatabase()`或`getReadableDatabase()`方法,会触发`onCreate()`方法的执行,从而创建数据库。 2、插入数据: SQLiteOpenHelper提供了多种插入数据的方法。方法1是直接使用SQL语句,如`db.execSQL("INSERT INTO student (id, name, age) VALUES (1, 'AA', 20);")`。方法2是在SQL语句中拼接变量,但需要注意防止SQL注入问题。方法3是使用参数化的SQL语句,如`db.execSQL(luru2, new Object[]{id, name, age})`,这种方式更安全,可以避免SQL注入风险。 3、查询数据: 查询数据通常也通过执行SQL语句完成,例如`SELECT * FROM student WHERE condition;`。在Android中,可以使用`db.rawQuery(query, null)`或`db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy)`方法来执行查询。查询结果将返回一个`Cursor`对象,你可以遍历这个游标获取每一行数据。 除了这些基本操作,SQLiteOpenHelper还有其他功能,比如在数据库升级时自动调用`onUpgrade()`方法,使得开发者可以方便地管理数据库版本。`onUpgrade()`方法中通常包含更新表结构或迁移数据的逻辑。此外,`onOpen()`方法会在每次打开数据库时被调用,可用于设置数据库的一些初始状态。 总结来说,SQLiteOpenHelper在Android应用中起到了关键作用,它简化了与SQLite数据库的交互,使开发者能更专注于业务逻辑而不是底层数据库操作。通过实例化SQLiteOpenHelper的子类并利用其提供的API,我们可以轻松地创建数据库、插入、更新、删除和查询数据,从而实现应用的数据存储需求。

E/AndroidRuntime: FATAL EXCEPTION: Thread-2 Process: com.example.cameradiary, PID: 21990 java.lang.IllegalStateException: Room cannot verify the data integrity. Looks like you've changed schema but forgot to update the version number. You can simply fix this by increasing the version number. Expected identity hash: d0562aadd9063ca2a0141765861a8b25, found: 903c8b01c1005d9d530310defd042e19 at androidx.room.RoomOpenHelper.checkIdentity(RoomOpenHelper.kt:147) at androidx.room.RoomOpenHelper.onOpen(RoomOpenHelper.kt:128) at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.onOpen(FrameworkSQLiteOpenHelper.kt:287) at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:428) at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:317) at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getWritableOrReadableDatabase(FrameworkSQLiteOpenHelper.kt:232) at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.innerGetDatabase(FrameworkSQLiteOpenHelper.kt:190) at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getSupportDatabase(FrameworkSQLiteOpenHelper.kt:151) at androidx.sqlite.db.framework.FrameworkSQLiteOpenHelper.getWritableDatabase(FrameworkSQLiteOpenHelper.kt:104) at androidx.room.RoomDatabase.inTransaction(RoomDatabase.kt:638) at androidx.room.RoomDatabase.assertNotSuspendingTransaction(RoomDatabase.kt:457) at com.example.cameradiary.userDAO_Impl.getALLUsers(userDAO_Impl.java:70) at com.example.cameradiary.SecondActivity$1.run(SecondActivity.java:60)

2023-05-25 上传