Android App SQLite数据库操作详解
42 浏览量
更新于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 上传
2021-01-04 上传
2021-07-07 上传
2021-01-05 上传
2013-10-28 上传
2021-01-31 上传
2019-07-17 上传
weixin_38711333
- 粉丝: 4
- 资源: 976
最新资源
- 高清艺术文字图标资源,PNG和ICO格式免费下载
- mui框架HTML5应用界面组件使用示例教程
- Vue.js开发利器:chrome-vue-devtools插件解析
- 掌握ElectronBrowserJS:打造跨平台电子应用
- 前端导师教程:构建与部署社交证明页面
- Java多线程与线程安全在断点续传中的实现
- 免Root一键卸载安卓预装应用教程
- 易语言实现高级表格滚动条完美控制技巧
- 超声波测距尺的源码实现
- 数据可视化与交互:构建易用的数据界面
- 实现Discourse外聘回复自动标记的简易插件
- 链表的头插法与尾插法实现及长度计算
- Playwright与Typescript及Mocha集成:自动化UI测试实践指南
- 128x128像素线性工具图标下载集合
- 易语言安装包程序增强版:智能导入与重复库过滤
- 利用AJAX与Spotify API在Google地图中探索世界音乐排行榜