Android App SQLite数据库操作详解
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数据库操作流程。
2013-05-03 上传
2023-04-19 上传
2023-05-27 上传
2023-06-28 上传
2023-04-11 上传
2023-06-06 上传
2023-08-22 上传
weixin_38711333
- 粉丝: 4
- 资源: 976
最新资源
- csci4622:机器学习课程
- jdk-8u291-windows-x64
- mr:利用VagrantPuppetFedora堆栈进行虚拟机置备的环境复制开发工具
- 51系列单片机竞赛设计485全双工通信.rar
- rtc-signaller-testrun:一套测试,用于测试自定义信号器对 rtc-quickconnect 和 rtc-tools 要求的支持程度
- maki:TO POI图标集
- 51单片机Proteus仿真实例 pwmbo
- 模块3
- shilengae_web
- ComingNext:ComingNext是Symbian智能手机的日历主屏幕小部件-开源
- dotfiles:https的镜像
- redis-blazor-experiments:使用Redis和Blazor组件进行实验
- 卡姆
- prog1:这是不来梅哈芬应用科技大学提供的所有编程1练习的地方!
- Assigment4
- PearOS-arch:PearOS但基于Arch