Tag: SQLite

如何使用Android Room Persistence Library将Column注释为NOT NULL

我的数据类看起来像这样 @Entity(tableName = “items”) data class Item( @ColumnInfo(name = “name”) var name: String = “”, @ColumnInfo(name = “room”) var room: String = “”, @ColumnInfo(name = “quantity”) var quantity: String = “”, @ColumnInfo(name = “description”) var description: String = “”, @PrimaryKey(autoGenerate = true) @ColumnInfo(name = “id”) var id: Long = 0 ) 房间使用SQLite,而SQLite在其数据库中支持NOT NULL列。 我尝试使用@NonNull注释列,但它没有效果。 有没有办法使房间数据库中的列不可空?

IN子句和占位符

我正在尝试在Android中执行以下SQL查询: String names = “‘name1’, ‘name2”; // in the code this is dynamically generated String query = “SELECT * FROM table WHERE name IN (?)”; Cursor cursor = mDb.rawQuery(query, new String[]{names}); 但是,Android不会使用正确的值替换问号。 我可以做到以下,但是,这不防止SQL注入: String query = “SELECT * FROM table WHERE name IN (” + names + “)”; Cursor cursor = mDb.rawQuery(query, null); 我怎样才能解决这个问题,并能够使用IN子句?

Android室数据库错误:未使用的参数:在@Query函数中的天数

我正在使用Room数据库,试图在我的Dao中写入一个查询,这将删除比特定天数更早的所有记录。 这是我来到: @Query(“DELETE FROM my_table WHERE dateFrom <= date('now','-:days day')") fun deleteAllOlderThan(days: Int) 但是,当我尝试构建我的项目时,在我的Gradle控制台中出现错误: 错误:未使用的参数:天 我正在使用Kotlin,所以它也告诉我这个: 错误:任务’:nexo:kaptDebugKotlin’的执行失败。 内部编译器错误。 查看日志了解更多详情 我的查询有什么问题? UPDATE 我也收到有关转换日期的错误。 这是我的转换器: class Converter { @TypeConverter fun fromTimestamp(value: Long?) = value?.let { Date(it) } @TypeConverter fun dateToTimestamp(date: Date?) = date?.time } 我也将其添加到我的数据库与注释: @TypeConverters(Converter::class) 这是我得到的具体错误: 无法弄清楚如何将这个字段保存到数据库中。 你可以考虑为它添加一个types转换器。 e:e:private final java.util.Date dateFrom = null; 概要 我试图使用密封类的转换器在房间里,它会导致问题,所以我决定保持我的日期参数为长。 […]

IntentService被系统杀死

我有一个应用程序,我可以提交一个服务器的时间状态。 为了节省电量,我将状态项列入SQLite Database ,并定期将JobScheduler提交给服务器。 插入项目的function如下所示: public synchronized void workThroughQueue() { try { for (QueueItem queueItem : getAllQueueItems()) { try { dao.insert(queueItem.getItem()); delete(queueItem); } catch (Exception e) { Log.e(TAG, “Queueitem konnte nicht verarbeitet werden: ” + e.getMessage(), e); } } } catch (Exception e) { Log.e(TAG, “Queueverarbeitung nicht vollständig: ” + e.getMessage(), e); } } 服务(kotlin): […]

Android体系结构组件:如何观察数据库中的单个更改

我有几个问题,请看下面的问题: 守则 。 DAO @Dao public interface PostDao { @Query(“SELECT * FROM posts ORDER by time DESC”) LiveData<List> getAll(); @Query(“SELECT * FROM posts WHERE id = :id”) LiveData<List> getPost(String id); @Insert(onConflict = OnConflictStrategy.REPLACE) @NonNull void insert(StoryPost… posts); @Delete void delete(StoryPost post); @Update void update(StoryPost post); } D b @Database(entities = {StoryPost.class}, version = 5) @TypeConverters(Conveter.class) […]

为什么房间实体不能在Android中使用不可变属性

我一直在探索房间数据库对象映射库,我觉得奇怪。 正如这个答案所暗示的,实体数据模型不能具有不可变属性。 但我检查了谷歌与kotlin持久的例子 , Room工程与不可改变的属性。 请从示例中检查这个数据类。 什么可能是这种行为的原因? 如果我们可以创建不可变的值( val属性),这可能是一个很好的function,因为这限制了程序员在创建对象之后更改唯一标识符(如id)。

调用Rooms inMemoryBuilder方法时,Room Persistence Library运行时exception

当遵循设置Room持久性库的教程时,我在Android设备上测试时遇到此错误。 java.lang.RuntimeException:找不到PackageName .AppDatabase的实现。 AppDatabase_Impl不存在 我知道有一个类似的问题,但问题是由于kotlin gradle问题。 可能重复 测试课: @RunWith(AndroidJUnit4.class) public class LocalDatabaseTest { private PhotoDao mPhotoDao; private AppDatabase mDb; @Before public void createDb() { Context context = InstrumentationRegistry.getTargetContext(); mDb = Room.inMemoryDatabaseBuilder(context.getApplicationContext(), AppDatabase.class).build(); mPhotoDao = mDb.photoDao(); } @After public void closeDb() throws IOException { //mDb.close(); } @Test public void testPreConditions() { assertNotNull(mDb); } 道: @Dao public […]

如何使用kotlin单击listView项目中的imageButton后才能获取DB ID

我有一个customAdapter类和一个listView。 我做了3个textview和一个imageButton的single_row布局。 现在我的问题是我怎么能得到DB ID字段,只能从单击imageButton并忽略整个行上的点击? 我知道我可以得到的ID: mListView.onItemClickListener = AdapterView.OnItemClickListener { adapterView, view, position, id -> view.delete.setOnClickListener(){ Toast.makeText(context,””+id,Toast.LENGTH_SHORT).show() } 但是这只有当我点击整个行时才有效。 我在imageButton节点中的xml和android:focusable=”false” focusable android:focusable=”false”的根目录中尝试了android:descendantFocusability=”blocksDescendants” ,并且在整个行被识别时imageButton无法识别。 只有当我使用button.onClickListener()…点击被识别。 但这样我不知道如何得到身份证。 我的适配器类代码: class MyAdapter(activity: Activity, context: Context, cursor: Cursor) : CursorAdapter(context, cursor, true) { var inflater: LayoutInflater lateinit var mListView: ListView init { this.inflater = LayoutInflater.from(context) mListView = activity.listView } override fun […]

无法访问BaseColumns在Kotlin中提供了_ID属性

我正在定义我的Users SQLite数据库表,为此,我创建了以下UserContract和UserEntry类: class UserContract private constructor(){ class UserEntry private constructor(): BaseColumns { companion object { val TABLE_NAME = “users” val COLUMN_DISPLAY_NAME = “display_name” val COLUMN_EMAIL = “email” //… } } } 我面临的问题是我无法访问由BaseColums实现提供的_ID属性: val columnDisplayName = UserContract.UserEntry.COLUMN_DISPLAY_NAME //It is OK val columnId = UserContract.UserEntry._ID //Unresolved reference: _ID 在Java中的等效代码工作正常,所以,有没有人知道是什么原因或错误是什么?

从Kotlin Anko的两个表中选择数据

在我的数据库中有两个表格, 1)任务:(id(INTEGER + PRIMARY_KEY),标题,描述,时间戳,category_id(Category – > id的外键)) 2)类别:(id(INTEGER + PRIMARY_KEY),名称) 从表中选择数据Anko提供的方法如下: var mDatabase: DatabaseManager = DatabaseManager.getInstance(activity) var mResult: List = ArrayList() mDatabase.use { mResult = select(TABLE_TASK).parseList(classParser()) } 我想要的是显示任务列表的类别名称我已经检查了所有的教程和堆栈链接,但没有得到任何方式来实现这一点。 有什么方法可以从Kotlin Anko的两个表中选择数据? 感谢提前!