【Kotlin】基于Room对SQLite操作
gradle中添加引用 一下引用有重复,可以删除部分,我这个在项目中,懒得删除了
def room_version = "2.3.0"
implementation 'androidx.room:room-common:2.3.0'
implementation 'androidx.room:room-runtime:2.3.0'
annotationProcessor 'androidx.room:room-compiler:2.3.0'
//其中latest.release指代最新Bugly SDK版本号,也可以指定明确的版本号,例如4.0.3
// implementation 'com.tencent.rqd:nativecrashreport:latest.release' //其中latest.release指代最新Bugly NDK版本号,也可以指定明确的版本号,例如3.9.2
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
// To use Kotlin annotation processing tool (kapt)
kapt "androidx.room:room-compiler:$room_version"
定义实体,也就是表
@Entity(tableName = "t_avail_data")
data class AvailDataEntity(
@PrimaryKey(autoGenerate = true) val id: Int,
@ColumnInfo(name="created_at") val created_at: String
)
定义操作接口
@Dao
open interface BaseKotlinDao<T> {
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertAll(vararg operations: T);
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(operation: T);
@Delete
fun delete(operation: T);
@Update
fun update(operation: T);
open fun getAll(): List<T>;
}
定义具体业务接口
@Dao
interface AvailDataDao: BaseKotlinDao<AvailDataEntity> {
/**
* 获取所有
*/
@Query("SELECT * from t_avail_data")
override fun getAll(): List<AvailDataEntity> ;
/**
* 根据Rrid 获取
*/
@Query("SELECT * from t_avail_data WHERE id=(:id) Limit 1")
fun getById(id:Int): AvaidDataEntity;
/**
* 清空表
*/
@Query("delete from t_avail_data")
fun clean();
}
定义DataBase
@Database(entities = {AvalidDataEntity.class}, version = 1, exportSchema = false)
public abstract class AppDataBase extends RoomDatabase {
public AvalidDataDao avalidDataDao();
}
创建DbUtil
public class DbUtil {
private static AppDataBase db = null;
private static Context context = ContextUtils.getApplicationContext();
public static AppDataBase getDb() {
if (db == null) {
db = Room.databaseBuilder(context,
AppDataBase.class, "icebox-system-06").allowMainThreadQueries().fallbackToDestructiveMigration().build();
}
return db;
}
public static void setContext(Context context) {
DbUtil.context = context;
}
public static void setPopupWindowTouchModal(PopupWindow popupWindow, boolean touchModal) {
if (null == popupWindow) {
return;
}
Method method;
try {
method = PopupWindow.class.getDeclaredMethod("setTouchModal", boolean.class);
method.setAccessible(true);
method.invoke(popupWindow, touchModal);
} catch (Exception e) {
e.printStackTrace();
}
}
}
上下文工具ContextUtils
public class ContextUtils {
private static Context applicationContext = null;
public static Context getApplicationContext() {
if (null != applicationContext) {
return applicationContext;
}
final Object activityThread = getActivityThread();
if (null != activityThread) {
try {
final Method getApplication = activityThread.getClass().getDeclaredMethod("getApplication");
getApplication.setAccessible(true);
applicationContext = (Context) getApplication.invoke(activityThread);
} catch (Exception e) {
e.printStackTrace();
}
}
return applicationContext;
}
private static Object getActivityThread() {
try {
final Class<?> clz = Class.forName("android.app.ActivityThread");
final Method method = clz.getDeclaredMethod("currentActivityThread");
method.setAccessible(true);
final Object activityThread = method.invoke(null);
return activityThread;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
使用的例子后面补充

浙公网安备 33010602011771号