当前位置:首页 > 行业动态 > 正文

安卓如何连接获取数据库

安卓本地数据库(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 连接

步骤:

  1. 服务器端搭建 API(如 PHP/Python/Node.js)。
  2. 安卓端使用 RetrofitOkHttp 发送请求。

示例(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

  1. 在 Firebase 控制台创建项目。
  2. 下载 google-services.json 文件并放入安卓项目 app/ 目录。
  3. 添加依赖:
    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:如何保证远程数据库的安全性?

解答:

  1. 身份验证:使用 JWT 或 OAuth 对 API 请求进行认证。
  2. HTTPS:强制使用 SSL/TLS 加密通信。
  3. 权限控制:在服务器端校验用户角色(如管理员权限才能修改数据)。
  4. 参数校验:防止 SQL 注入,对输入参数进行严格过滤。

问题2:如何处理网络连接失败的情况?

解答:

  1. 重试机制:使用 Retrofit 的重试拦截器,自动重试请求。
  2. 本地缓存:将数据暂存到 SQLite,待网络恢复后同步。
  3. 用户提示:通过 ToastSnackbar 提示用户检查网络。
  4. 离线模式:设计断网时可用的功能(如查看本地缓存数据)。
0