SQLite 是安卓内置的轻量级数据库,适合存储本地数据。
创建数据库和表
// 创建数据库帮助类 public class DBHelper extends SQLiteOpenHelper { public DBHelper(Context context) { super(context, "mydb.db", null, 1); // 数据库名称和版本号 } @Override public void onCreate(SQLiteDatabase db) { // 创建表 db.execSQL("CREATE TABLE user (id INTEGER PRIMARY KEY, name TEXT)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 数据库升级逻辑 } }
增删改查操作
// 插入数据 SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("INSERT INTO user (name) VALUES (?)", new String[]{"Alice"}); // 查询数据 Cursor cursor = db.rawQuery("SELECT FROM user", null); while (cursor.moveToNext()) { int id = cursor.getInt(0); String name = cursor.getString(1); } cursor.close();
推荐使用 Room 库
Room 是谷歌提供的 SQLite 抽象层,简化开发流程。
// 定义实体 @Entity public class User { @PrimaryKey(autoGenerate = true) public int id; public String name; } // 定义 DAO @Dao public interface UserDao { @Insert void insert(User user); @Query("SELECT FROM user") List<User> getAll(); } // 使用 Room 数据库 AppDatabase db = Room.databaseBuilder(context, AppDatabase.class, "app-db").build(); UserDao userDao = db.userDao();
通过 JDBC 或 HTTP API 连接远程数据库,需处理网络线程和安全认证。
使用 JDBC 直连(不推荐生产环境)
// 添加依赖(需手动添加 JDBC 驱动) implementation 'mysql:mysql-connector-java:8.0.23' // 连接数据库 Class.forName("com.mysql.cj.jdbc.Driver"); Connection conn = DriverManager.getConnection( "jdbc:mysql://服务器地址:3306/数据库名?useSSL=false", "用户名", "密码" ); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT FROM user");
推荐通过 Web API 间接操作
// Retrofit + Web API 示例 public interface ApiService { @GET("users") Call<List<User>> getUsers(); } Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://yourserver.com/api/") .addConverterFactory(GsonConverterFactory.create()) .build(); ApiService api = retrofit.create(ApiService.class); api.getUsers().enqueue(new Callback<>() { ... });
无需自建服务器,适合快速集成。
配置 Firebase
google-services.json
文件并放入 app/
目录build.gradle
: implementation 'com.google.firebase:firebase-database:20.0.5' apply plugin: 'com.google.gms.google-services'
读写数据
// 初始化 FirebaseDatabase database = FirebaseDatabase.getInstance(); DatabaseReference ref = database.getReference("users"); // 写入数据 User user = new User("Bob", 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 | 本地数据存储 | 轻量、无需网络 | 不适合多设备同步 |
远程数据库(JDBC) | 需要直接操作数据库 | 灵活控制 | 需处理线程、安全性差 |
远程数据库(API) | 前后端分离架构 | 安全、可扩展 | 需搭建后端服务 |
Firebase | 快速原型、实时同步 | 集成简单、实时更新 | 受限于 Firebase 规则 |
解答:
解答:
AsyncTask
、RxJava
或 Coroutine
避免阻塞主线程。 OkHttpClient
)。