上一篇
安卓开发软件数据库连接
- 行业动态
- 2025-04-22
- 4
安卓本地数据库连接(SQLite)
使用SQLiteOpenHelper创建数据库
public class DBHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "app.db"; private static final int VERSION = 1; public DBHelper(Context context) { super(context, DATABASE_NAME, null, VERSION); } @Override public void onCreate(SQLiteDatabase db) { // 创建用户表 db.execSQL("CREATE TABLE user(id INTEGER PRIMARY KEY, name TEXT, age INTEGER)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 数据库升级处理 db.execSQL("ALTER TABLE user ADD COLUMN address TEXT"); } }
增删改查操作示例
操作类型 | 实现方式 | 代码示例 |
---|---|---|
插入 | insert() |
db.insert("user", null, contentValues) |
查询 | query() |
db.query("user", columns, "age > ?", new String[]{"30"}, null, null, null) |
更新 | update() |
db.update("user", contentValues, "id = ?", new String[]{"1"}) |
删除 | delete() |
db.delete("user", "age < ?", new String[]{"25"}) |
使用ContentProvider优化访问
<provider android:name=".UserProvider" android:exported="false"/>
public class UserProvider extends ContentProvider { @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { // 实现数据查询 } }
安卓远程数据库连接
主流连接方式对比
技术方案 | 适用场景 | 核心优势 | 典型框架 |
---|---|---|---|
REST API | Web服务交互 | 跨平台兼容 | Retrofit+OkHttp |
WebSocket | 实时通信 | 低延迟双向通信 | OkHttp WebSocket |
JDBC直连 | 企业级系统 | 复杂事务处理 | MySQL Connector/J |
云数据库SDK | 快速集成 | 免运维部署 | Firebase Realtime DB |
Retrofit+OkHttp实现REST API连接
// 1. 定义接口 public interface ApiService { @GET("/users") Call<List<User>> getUsers(); } // 2. 创建Retrofit实例 Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.example.com") .addConverterFactory(GsonConverterFactory.create()) .build(); // 3. 发起网络请求 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) { // 处理响应结果 } });
数据库连接注意事项
- 线程安全:数据库操作需在子线程执行,建议使用
AsyncTask
或ExecutorService
- 权限配置:访问网络数据库需在
AndroidManifest.xml
添加<uses-permission android:name="android.permission.INTERNET"/>
- 数据加密:敏感数据应使用AES加密存储,远程传输建议使用HTTPS
- 版本控制:数据库结构变更时需实现
onUpgrade()
逻辑,Room持久库可自动处理版本迁移
问题与解答
Q1:如何将SQLite数据库迁移到Room持久库?
A:
- 添加依赖:
implementation "androidx.room:room-runtime:2.5.1"
- 定义实体类:
@Entity(tableName = "user") public class User {...}
- 创建DAO接口:
@Dao public interface UserDao {...}
- 构建数据库:
@Database(entities = {User.class}) public abstract class AppDatabase extends RoomDatabase {...}
- 在Application中初始化:
AppDatabase db = Room.databaseBuilder(...).build()
Q2:如何处理远程数据库的多线程并发?
A:
- 使用
LiveData
+ViewModel
架构组件实现数据观察 - 配置Retrofit
CallAdapter.Factory
支持RxJava:.addCallAdapterFactory(RxJava3CallAdapterFactory.create())
- 在Repository层使用
CompositeDisposable
管理Rx订阅 - 对关键操作添加synchronized锁或使用原子类保证线程安全