Android App SQLite数据库操作详解

8 下载量 58 浏览量 更新于2024-08-29 1 收藏 265KB PDF 举报
本文将详细解析如何在Android应用程序中使用内置的SQLite数据库,包括其基本概念、关键类和方法,并通过实例演示了SQLite数据库的常用操作。 SQLite是Android系统内置的一种轻量级数据库,它无需单独的服务器进程,且支持大部分SQL语法,非常适合存储和管理应用程序的数据。尽管SQLite数据库功能强大,但它并不像PC端的MySQL那样全面,特别是在Android环境中,无法直接通过JDBC接口操作远程数据库。在这种情况下,通常需要借助Web服务(如PHP或Servlet)与服务器进行数据交互。 在Android开发中,主要通过`SQLiteDatabase`类来管理和操作数据库。这个类提供了多种静态方法,例如: 1. `openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags)`:打开指定路径的数据库,如果不存在则创建,参数`CursorFactory`用于定制游标对象的工厂,`flags`则是操作标志。 2. `openOrCreateDatabase(File file, SQLiteDatabase.CursorFactory factory)` 和 `openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)`:类似地,这两个方法会打开已存在的数据库或创建新的,区别在于传入的是文件对象或路径字符串。 执行SQL语句主要依赖以下方法: - `execSQL(String sql, Object[] bindArgs)`:执行一条SQL语句,可以带有绑定参数。 - `execSQL(String sql)`:执行一条不带参数的SQL语句。 - `rawQuery(String sql, String[] selectionArgs)`:执行查询操作并返回`Cursor`对象,用于处理查询结果。 数据库事务管理则涉及: - `beginTransaction()`:开始一个新的事务。 - `endTransaction()`:结束当前事务。 在处理查询结果时,`Cursor`对象扮演着重要角色,它提供了类似JDBC `ResultSet`的方法,如: - `move(int offset)`:移动到相对于当前位置的指定偏移量处。 - `moveToFirst()`:移动到第一条记录。 - `moveToLast()`:移动到最后一条记录。 - `moveToNext()`:移动到下一条记录。 - `moveToPosition(int position)`:移动到指定位置的记录。 - `moveToPrevious()`:移动到上一条记录。 下面是一个简单的使用示例,展示如何在Android应用中创建和操作SQLite数据库: ```xml <!-- main.xml --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="..."> <!-- Layout内容省略 --> </LinearLayout> ``` 对应的Java代码可能如下: ```java public class MainActivity extends AppCompatActivity { private SQLiteDatabase db; private MyOpenHelper dbHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 创建数据库帮助类实例 dbHelper = new MyOpenHelper(this, "MyDB", null, 1); // 打开数据库 db = dbHelper.getWritableDatabase(); // 开始事务 db.beginTransaction(); try { // 执行SQL创建表 db.execSQL("CREATE TABLE IF NOT EXISTS MyTable (id INTEGER PRIMARY KEY, name TEXT)"); // 插入数据 db.execSQL("INSERT INTO MyTable VALUES (1, 'John')"); // 提交事务 db.setTransactionSuccessful(); } finally { db.endTransaction(); } // 查询数据 Cursor cursor = db.rawQuery("SELECT * FROM MyTable", null); if (cursor.moveToFirst()) { do { int id = cursor.getInt(cursor.getColumnIndex("id")); String name = cursor.getString(cursor.getColumnIndex("name")); Log.d("MainActivity", "ID: " + id + ", Name: " + name); } while (cursor.moveToNext()); } cursor.close(); } } // 自定义的SQLiteOpenHelper子类 class MyOpenHelper extends SQLiteOpenHelper { public MyOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { // 在这里初始化数据库结构,比如创建表 } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 当数据库版本升级时,这里可以更新表结构 } } ``` 在这个例子中,我们首先创建了一个`SQLiteOpenHelper`的子类`MyOpenHelper`,用于处理数据库的创建和升级。然后在`MainActivity`的`onCreate`方法中,我们打开了数据库,创建了一个表,并插入了一条数据。接着,我们执行了一个查询,遍历并打印了所有记录。这样,我们就完成了一个基本的SQLite数据库操作流程。