安卓开发中导入数据库的方式主要分为本地数据库和远程数据库两类,以下是常见的实现方案:
SQLite 是安卓内置的轻量级数据库,无需额外依赖,适合存储本地数据。
步骤:
创建 SQLiteOpenHelper
子类:
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) { // 创建表 db.execSQL("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 更新表逻辑 } }
使用 SQLiteDatabase
进行 CRUD 操作:
DatabaseHelper dbHelper = new DatabaseHelper(context); SQLiteDatabase db = dbHelper.getWritableDatabase(); // 插入数据 ContentValues values = new ContentValues(); values.put("name", "John"); db.insert("users", null, values); // 查询数据 Cursor cursor = db.query("users", null, null, null, null, null, null);
Room 是谷歌提供的抽象层,简化了 SQLite 的操作,支持编译时验证。
步骤:
添加依赖:
implementation "androidx.room:room-runtime:2.5.1" annotationProcessor "androidx.room:room-compiler:2.5.1"
定义实体类:
@Entity(tableName = "users") public class User { @PrimaryKey(autoGenerate = true) public int id; @ColumnInfo(name = "name") public String name; }
定义 DAO 接口:
@Dao public interface UserDao { @Insert void insert(User user); @Query("SELECT FROM users") List<User> getAllUsers(); }
创建数据库类:
@Database(entities = {User.class}, version = 1) public abstract class AppDatabase extends RoomDatabase { public abstract UserDao userDao(); }
使用数据库:
AppDatabase db = Room.databaseBuilder(context, AppDatabase.class, "app_data.db").build(); UserDao userDao = db.userDao(); userDao.insert(new User());
适用于需要跨设备同步数据的场景。
Firebase 示例:
添加依赖:
implementation 'com.google.firebase:firebase-database:20.1.0'
初始化 Firebase:
FirebaseDatabase database = FirebaseDatabase.getInstance(); DatabaseReference myRef = database.getReference("users"); // 写入数据 myRef.setValue(new User("John")); // 读取数据 myRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { User user = dataSnapshot.getValue(User.class); } @Override public void onCancelled(DatabaseError error) {} });
方案 | 优点 | 缺点 |
---|---|---|
SQLite | 轻量级,无需网络依赖 | 需手写 SQL,操作繁琐 |
Room | 编译时验证,减少错误 | 学习成本稍高 |
Firebase | 实时同步,快速集成 | 需网络,数据存储受限 |
MySQL + API | 灵活定制,适合复杂业务 | 需自建服务端,开发成本高 |
onUpgrade
逻辑。解答:
解答: