Articles of sqlite3

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表。 如果你知道怎么做,请回复。 谢谢你的回答!

Android sqlite – 选择字段为null或空的记录

我的应用程序有一个sqlite DB,其中一些字段为null或为空(意味着我从未在该字段中插入任​​何内容)。 我希望选择该字段为空或空的所有记录。 这是我尝试过的: cursor = db.query(DBHelper.TABLE_NAME, COLUMNS, “folder_name = ? “, new String[] {“null”}, null, null, DBHelper.TIMESTAMP_COL + ” DESC”); 但那没用,我没有得到任何记录。 我需要做些什么来完成这项工作?

Android上的Sqlite:如何创build一个SQLite远程数据库函数 – 在应用程序中使用拉特,长距离计算

我们正在构build一个Android应用程序,该应用程序将使用用户当前位置(lat,long),并显示当前位置周围的前50个场地,按距离sorting。 我们有这些场地存储在一个SQLite数据库。 我们计划与应用程序一起提供的SQLite数据库。 为了只提取相关的前50名最近的场地,我们要定义一个db函数DIST(计算两点之间的距离),并在我们的查询中使用它。 我如何为Android应用程序定义一个自定义SQLite函数? 什么是Java API调用来做到这一点? 我们已经在我们的iPhone应用程序中成功实现了这个方法 – 使用Objective C.