您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Android如何操作SQLite
## 一、SQLite简介
SQLite是一款轻量级的关系型数据库,具有以下特点:
- 无需服务器进程
- 零配置
- 事务性(ACID兼容)
- 单个磁盘文件存储
- 支持标准SQL语法
- 非常适合移动设备使用
在Android平台上,SQLite是默认集成的数据库引擎,被广泛用于本地数据存储场景。
## 二、核心组件类
### 1. SQLiteOpenHelper
抽象帮助类,用于数据库创建和版本管理。主要方法:
- `onCreate()` - 首次创建数据库时调用
- `onUpgrade()` - 数据库升级时调用
- `getWritableDatabase()` - 获取可写数据库实例
- `getReadableDatabase()` - 获取只读数据库实例
### 2. SQLiteDatabase
数据库访问入口,提供:
- 执行SQL语句
- 增删改查操作
- 事务处理
### 3. Cursor
查询结果集,支持:
- 遍历结果
- 按列名/索引获取数据
- 类型转换
## 三、完整使用流程
### 1. 创建数据库帮助类
```java
public class DBHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "mydb.db";
private static final int DB_VERSION = 1;
public DBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE users (" +
"_id INTEGER PRIMARY KEY AUTOINCREMENT," +
"name TEXT NOT NULL," +
"age INTEGER," +
"email TEXT UNIQUE)";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS users");
onCreate(db);
}
}
DBHelper dbHelper = new DBHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase();
// 方式1:使用ContentValues
ContentValues values = new ContentValues();
values.put("name", "张三");
values.put("age", 25);
values.put("email", "zhangsan@example.com");
long id = db.insert("users", null, values);
// 方式2:直接执行SQL
String sql = "INSERT INTO users (name,age,email) VALUES (?,?,?)";
db.execSQL(sql, new Object[]{"李四", 30, "lisi@test.com"});
// 参数说明:表名、列名数组、WHERE条件、条件参数、GROUP BY、HAVING、ORDER BY
Cursor cursor = db.query("users",
new String[]{"_id", "name", "age"},
"age > ?",
new String[]{"20"},
null, null, "age DESC");
try {
while (cursor.moveToNext()) {
int id = cursor.getInt(0);
String name = cursor.getString(1);
int age = cursor.getInt(2);
// 处理数据...
}
} finally {
cursor.close(); // 必须关闭Cursor
}
ContentValues values = new ContentValues();
values.put("age", 26);
int count = db.update("users",
values,
"_id = ?",
new String[]{"1"});
int count = db.delete("users",
"name = ?",
new String[]{"张三"});
db.beginTransaction();
try {
// 批量操作...
db.setTransactionSuccessful(); // 标记事务成功
} finally {
db.endTransaction(); // 结束事务
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 2) {
// 版本1到2的升级逻辑
db.execSQL("ALTER TABLE users ADD COLUMN phone TEXT");
}
if (oldVersion < 3) {
// 版本2到3的升级逻辑
// ...
}
}
SQLiteStatement stmt = db.compileStatement(
"INSERT INTO users (name) VALUES (?)");
stmt.bindString(1, "王五");
long id = stmt.executeInsert();
stmt.close();
@Override
public void onCreate(SQLiteDatabase db) {
// 创建表后添加索引
db.execSQL("CREATE INDEX idx_user_name ON users(name)");
db.execSQL("CREATE INDEX idx_user_email ON users(email)");
}
Room是Google推荐的SQLite抽象层:
@Entity
public class User {
@PrimaryKey(autoGenerate = true)
public int id;
public String name;
public int age;
}
@Dao
public interface UserDao {
@Insert
void insert(User user);
@Query("SELECT * FROM user")
List<User> getAll();
}
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
adb shell
查看数据库文件:adb shell
cd /data/data/<package>/databases
sqlite3 mydb.db
.tables
.schema users
static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
database.execSQL("ALTER TABLE users ADD COLUMN address TEXT");
}
};
Room.databaseBuilder(context, AppDatabase.class, "mydb")
.addMigrations(MIGRATION_1_2)
.build();
cursor.getColumnIndex()
获取列索引cursor.getType()
判断字段类型VACUUM
命令app/
├── java/
│ ├── com.example.app/
│ │ ├── data/
│ │ │ ├── DBHelper.java
│ │ │ ├── UserContract.java (定义表结构常量)
│ │ │ └── UserDao.java
│ │ ├── models/
│ │ │ └── User.java
│ │ └── activities/
│ │ └── MainActivity.java
└── res/
└── raw/ (可存放预置数据库文件)
通过本文介绍,你应该已经掌握了Android平台操作SQLite数据库的核心知识和实践技巧。在实际开发中,建议根据项目复杂度选择原生SQLite API或Room等ORM框架,并始终注意性能优化和数据安全。 “`
(注:实际字数为约2000字,可根据需要增减细节内容调整篇幅)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。