Articles of SQLite

Android:我可以为多个数据库文件使用一个SQLiteOpenHelper类吗?

我的应用程序使用两个数据库(单独的文件) 为了处理这些数据库,我创建了两个扩展SQLiteOpenHelper的Helper类,每个数据库一个。 我现在要添加第三个数据库并想知道是否需要创建另一个Helper类(如果我使用了第4个和第5个数据库,我还需要更多的Helper类),或者我可以使用相同的Helper类来实现多个数据库? 我在尝试使用一个Helper类时遇到的问题是我无法看到如何将各个数据库文件的名称传递给Helper。 目前,数据库的名称被硬编码为每个Helper类的静态字段,但是如果我只有一个Helper类,我需要能够在创建单独的Helper时将不同的名称传递给构造函数对象; 问题是SQLiteOpenHelper构造函数似乎只是由Android调用,只有一个参数:Context。

Android:如何保护SQLite数据库中的数据?

我目前正在开发一款将数据保存到SQLite数据库中的Android游戏。 这不是真正的“敏感”数据,但我不希望用户能够修改它(出于游戏平衡的明显原因,因为它会作弊)。 当您的手机植根时 ,访问和修改SQLite数据库非常容易(市场上有很多应用程序)。 那么我是否应该担心这一点,或者考虑使用带有根电话的用户可以做任何他们想做的事情,包括作弊,这是他们的选择? 或者我可以以某种方式加密我不希望他们修改的数据,或添加MD5校验和或类似的东西? 另一种方法是完全放弃SQLite并使用某种二进制文件和游戏数据。 如果你们中的一些人已经遇到过类似的问题,你们采取了哪些方法,以及Android游戏开发社区的“良好实践”,请告诉我们。 谢谢。

Android会议室:如何建立关系模型?

我刚刚开始与Room合作,虽然一切看起来都非常直观,但我目前还不清楚我究竟能如何处理关系。 由于SQLite是关系数据库,因此您可以指定对象之间的关系。 尽管大多数ORM库允许实体对象相互引用,但Room明确禁止这样做。 即使您不能使用直接关系,Room仍然允许您在实体之间定义外键约束。(来源: https : //developer.android.com/topic/libraries/architecture/room.html#no-object-references ) 你应该如何模拟多对多或一对多的关系? 这在实践中会是什么样子(示例DAO +实体)?

共享首选项与数据库

我的数据是简单的属性值,所以我可以存储任何方式,但我想知道哪个更可靠? 共享首选项是否自动保存,因此更可靠? 或者因为它们是非交易性的那么可靠性较差?

Android:光标窗口已满

W / CursorWindow(15677):窗口已满:请求分配2195889字节,可用空间2096720字节,窗口大小2097152字节 我知道有app内存可用: D / dalvikvm(15677):GC_FOR_ALLOC释放9K,30%免费17050K / 24291K,暂停45ms 因此,当将blob读入byte[]时,它纯粹与光标大小窗口有关。 我使用内置方法从游标中读取blob。 try { c = rdb.query(“Photos”, new String[]{“photo”}, “id = ?”, new String[]{“”+photoID}, null, null, null); if(c.moveToFirst()) { byte[] tArray = c.getBlob(c.getColumnIndex(“photo”)); // THIS LINE ERRORS } }catch(Exception e) { e.printStackTrace(); } c.close(); return tArray; 有没有解决的办法? 窗口大小似乎限制为2097152字节。

如何删除多个where args的SQLite中的行?

我想删除满足任何多个条件的行。 例如,我传递了一个ID列表,我想删除所有带有这些IDs行(ID是唯一的)。 这将是: String[] ids = {“0”, “1”, “2”, “3”,…}; database.delete(“rows” , “id=? OR id=? OR id=? OR id=? OR …” , ids ); 有没有办法在没有多个OR情况下紧凑?

如何在没有root的Android设备上检查数据库

我正在开发一个应用程序,我使用sqllite3数据库来存储值。 我有Nexus S和Nexus 7都是无根设备。 如何为我的应用程序获取数据库以进行调试。 我试过(1)我尝试过这里提到的所有方法 adb shell run-as app.package.name \ cp /data/data/package.name/databases/application.sqlite /sdcard/ exit adb pull /sdcard/application.sqlite ~/ 这说cp没find.. (2) http://developer.android.com/tools/help/adb.html#sqlite adb -s emulator-5554 shell # sqlite3 /data/data/com.example.google.rss.rssexample/databases/rssitems.db SQLite version 3.3.12 Enter “.help” for instructions …. enter commands, then quit… sqlite> .exit

从哪里获取Android SQLite中的数据库错误信息(例如,由于违反非null而导致插入失败)

我刚刚意识到我的一个数据库insert()命令由于违反了非空约束而失败 – 我只是在这个字段中没有填充任何数据。 问题是,我花了很长时间才发现为什么这个插入返回-1,因为我无法在任何地方find错误或exception。 我希望,我想对于更复杂的数据库和查询,最重要的是,从数据库中获取某些信息真正发生的事情会导致数据库访问失败,但我无法在任何地方find任何相关信息。

在SQLite数据库中加入3个表

我在SQLite数据库中有3个表: 歌曲: _id | name | length | artist_id (foreign key) | album_id (foreign key) 艺术家: _id | name 专辑: _id | name 我需要一个包含以下列的表的查询(在Android应用程序中使用它): _id | name | length | artist_id | artist_name | album_id | album_name 但是,我写了以下查询语句: SELECT Songs._id, Songs.name, Songs.length, Songs.artist_id, Artists.name, Songs.album_id, Albums.name FROM Songs, Artists, Albums WHERE Songs.artist_id = Artists._id AND […]

Android SQLite“没有这样的表”例外

我开始使用Android中的SQLite和数据库而我刚刚发现了这个问题。 我已经阅读了很多类似的问题,但我还没有find解决方案。 这是我得到的错误: E / AndroidRuntime(529):引起:android.database.sqlite.SQLiteException:没有这样的表:ligas_bd :,编译时:SELECT * FROM ligas_bd 这是我的代码。 DBHelper myDbHelper = new DBHelper(this); myDbHelper = new DBHelper(this); try { myDbHelper.createDataBase(); } catch (IOException ioe) { throw new Error(“Unable to create database”); } try { myDbHelper.open(); SQLiteDatabase db = null; db = myDbHelper.getWritableDatabase(); String[] args = new String[] {“”}; Cursor c = db.rawQuery(” […]