上一篇
安卓如何连接获取数据库
- 行业动态
- 2025-04-21
- 3
安卓本地数据库(SQLite)操作
SQLite 是安卓内置的轻量级数据库,无需网络即可使用,适合存储应用本地数据。
创建与升级数据库
public class DatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "app_data.db"; private static final int DATABASE_VERSION = 1; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { // 创建表 String createTable = "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)"; db.execSQL(createTable); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 升级表逻辑(如新增字段) db.execSQL("ALTER TABLE users ADD COLUMN email TEXT"); } }
增删改查操作
// 插入数据 ContentValues values = new ContentValues(); values.put("name", "张三"); values.put("age", 25); database.insert("users", null, values); // 查询数据 Cursor cursor = database.query("users", null, "age > ?", new String[]{"20"}, null, null, null); if (cursor.moveToFirst()) { do { int id = cursor.getInt(cursor.getColumnIndex("id")); String name = cursor.getString(cursor.getColumnIndex("name")); // 处理数据 } while (cursor.moveToNext()); } cursor.close(); // 更新数据 ContentValues updateValues = new ContentValues(); updateValues.put("age", 26); database.update("users", updateValues, "name = ?", new String[]{"张三"}); // 删除数据 database.delete("users", "id = ?", new String[]{"1"});
连接远程数据库(如 MySQL)
安卓无法直接连接远程数据库,需通过 中间层服务(如 REST API 或 WebSocket)间接操作。
通过 REST API 连接
步骤:
- 服务器端搭建 API(如 PHP/Python/Node.js)。
- 安卓端使用
Retrofit
或OkHttp
发送请求。
示例(Retrofit):
// 定义API接口 public interface ApiService { @GET("users") Call<List<User>> getUsers(); } // 初始化Retrofit Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://example.com/api/") .addConverterFactory(GsonConverterFactory.create()) .build(); ApiService apiService = retrofit.create(ApiService.class); // 发送请求 Call<List<User>> call = apiService.getUsers(); call.enqueue(new Callback<List<User>>() { @Override public void onResponse(Call<List<User>> call, Response<List<User>> response) { if (response.isSuccessful()) { List<User> users = response.body(); // 处理数据 } } @Override public void onFailure(Call<List<User>> call, Throwable t) { // 处理错误 } });
使用 Firebase Realtime Database
Firebase 提供实时同步的云数据库,适合快速开发。
配置 Firebase
- 在 Firebase 控制台创建项目。
- 下载
google-services.json
文件并放入安卓项目app/
目录。 - 添加依赖:
implementation 'com.google.firebase:firebase-database:21.1.0'
读写数据
// 初始化Firebase FirebaseDatabase database = FirebaseDatabase.getInstance(); DatabaseReference ref = database.getReference("users"); // 写入数据 User user = new User("张三", 25); ref.push().setValue(user); // 生成唯一ID // 读取数据 ref.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot snapshot : dataSnapshot.getChildren()) { User user = snapshot.getValue(User.class); // 处理数据 } } @Override public void onCancelled(DatabaseError error) { // 处理错误 } });
方案对比
方案 | 优势 | 劣势 |
---|---|---|
SQLite(本地) | 轻量、无需网络、高性能 | 仅支持单机数据,无同步功能 |
REST API(远程) | 可跨平台、灵活定制 | 需维护服务器,存在网络延迟 |
Firebase | 实时同步、集成方便 | 依赖第三方服务,数据存储费用较高 |
相关问题与解答
问题1:如何保证远程数据库的安全性?
解答:
- 身份验证:使用 JWT 或 OAuth 对 API 请求进行认证。
- HTTPS:强制使用 SSL/TLS 加密通信。
- 权限控制:在服务器端校验用户角色(如管理员权限才能修改数据)。
- 参数校验:防止 SQL 注入,对输入参数进行严格过滤。
问题2:如何处理网络连接失败的情况?
解答:
- 重试机制:使用
Retrofit
的重试拦截器,自动重试请求。 - 本地缓存:将数据暂存到 SQLite,待网络恢复后同步。
- 用户提示:通过
Toast
或Snackbar
提示用户检查网络。 - 离线模式:设计断网时可用的功能(如查看本地缓存数据)。