Articles of sqlite3

如何从adb shell安装或访问sqlite3

我需要一种方法来安装或以某种方式访问​​adb shell中的sqlite3。 我根植了我的设备。 我试图find一个答案但是关闭的我可以来的是: 当我尝试使用adb shell打开数据库时,为什么我在root用户的Nexus One上出现“sqlite3:not found”错误? 但我不认为在Linux系统上推送我的Windows sqlite3.exe是个好主意? 那么有可能以某种方式安装sqlite3终端浏览器吗? [解] 从不同的评论和一些在#android-dev(irc)周围询问,我find了一个解决方案。 首先,我将数据库文件复制到我的桌面。 但拳头我不得不安装BusyBox,因为不包括cp?!? 在那之后,我遇到了一个问题,除了/ sdcard /之外,我无法从任何地方拉或推。 然后我可以使用/ sdcard /作为“中间站”并拉/推我的数据库。 然后我筋疲力尽! 我真的不得不让我的sqlite终端探索。 然后我有了启动模拟器从/ system / xbin / sqlite3中拉出sqlite二进制文件的想法。 然后使用rw重新安装/系统: # mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system 并将sqlite推送到/ sdcard /,并从那里将其复制到/ system / xbin / 现在它起作用了:D

在多个Android活动之间共享sqlite数据库

两个或多个Android活动可以打开一个sqlite3数据库进行写入吗? 我有两个活动需要将数据插入到同一个sqlite数据库中。 当第二个Activity调用SQLiteOpenHelper.getWriteableDatabase() ,抛出IllegalStateException,并显示消息“已创建SQLiteDatabase且从未关闭 ”。 我已经能够通过使我的数据库对象成为单例来避免exception,但我认为必须有更好的方法。 谢谢, 约翰

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字节。

如何在sqlite3中获取包含查询数据的列名?

我在Android中执行时使用sqlite3控制台调试我的应用程序。 有没有办法用sql查询结果中的数据显示列名(不仅仅是数据)?

sqlite3:找不到

我正在尝试使用此处描述的过程访问设备上的sqlite数据库: 如何查看SQLite数据库(无模拟器)? 但是,我继续找不到sqlite3。 我假设我打算在行的开头用哈希(#)符号输入命令。 我试了一下,什么也没得到。 没有它,我收到错误消息。 sqlite3.exe文件肯定存在于路径中。 我必须安装一些东西吗?

在sqlite中创建一个索引列

我可以在sqlite的create table命令中的列上创建索引吗? 我在Android shell的sqlite3中尝试了以下命令。 它似乎工作。 sqlite> create table mytest (id integer indexed); sqlite> .schema CREATE TABLE mytest (id integer indexed); 但是,在sqlite的查询语言规范中,不支持指定要编制索引的列: http://www.sqlite.org/lang_createtable.html 我错过了什么? 谢谢。

检查Android中的应用程序数据库中是否存在列

在Android中是否有一种很好的方法来查看应用程序数据库中的表中是否存在列? (我知道有一些类似于这个的问题,但似乎没有任何Android特定的。)

SQLiteexception在尝试选择时没有这样的列

我有以下DB帮助程序类: public int studentExists(String studid) { Cursor dataCount = mDb.rawQuery(“select count(*) from usertable where ” + KEY_STUDID + “=” + studid, null); dataCount.moveToFirst(); int count = dataCount.getInt(0); dataCount.close(); return count; } 我在我的应用程序中使用此function来查看之前是否已输入学生ID。 当学生ID是整数时(346742),这很好用,但每当我尝试添加字母数字ID(PB3874)时,它会强制关闭应用程序。 错误: 06-13 18:22:20.554:ERROR / AndroidRuntime(8088):android.database.sqlite.SQLiteException:没有这样的列:pb3874 :,编译时:从usertable中选择count(*)其中studid = pb3874 我不认为它是一个数据types问题(因为我使用文本types): private static final String DATABASE_CREATE = “create table usertable (_id integer primary key […]

Android Room Persistence Library:Upsert

Android的Room持久性库慷慨地包含适用于对象或集合的@Insert和@Update注释。 然而,我有一个用例(包含模型的推送通知)需要UPSERT,因为数据可能存在或可能不存在于数据库中。 Sqlite本身没有upsert,并且在这个SO问题中描述了变通方法。 鉴于那里的解决方案,如何将它们应用于房间? 更具体地说,如何在Room中实现不会破坏任何外键约束的插入或更新? 使用带onConflict = REPLACE的insert将导致onDelete调用该行的任何外键。 在我的情况下,onDelete导致级联,并重新插入一行将导致其他表中的行与外键被删除。 这不是预期的行为。

从CSV文件填充Android数据库?

是否可以将存储在res / raw资源目录中的csv文件用于填充sqlite3数据库中的表? 我的想法是,如果有一种方法可以将整个文件批量导入到表中,那么这将比在文件中的每一行迭代并执行单独的插入语句更清晰,更快…… 我发现有一个sqlite import命令允许这样: 如何导入将.sql或.csv文件加载到SQLite中? …但我在Android应用程序中应用这些语句时遇到了问题。 我的第一个想法是尝试类似下面的东西……但没有运气: db.execSQL(“CREATE TABLE ” + TABLE_NAME + “(id INTEGER PRIMARY KEY, name TEXT)”); db.execSQL(“.mode csv”); db.execSQL(“.import res/raw/MyFile.csv ” + TABLE_NAME); 这可能吗? 我应该尝试不同的方法来填充我的数据库吗? 更新:我将Josef的回复标记为答案(使用交易批量插入),因为它工作正常并根据我的标题直接回答我的问题(感谢Josef)。 但是,我仍然在寻找一种方法,使用import语句在csv文件中将批量插入从csv文件转换为sqlite3表。 如果你知道怎么做,请回复。 谢谢你的回答!