Articles of sqlite3

在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.

Android SQLite的ORDER BY不起作用

我有一个非常基本的情况: 我有一个大约5k行的桌子: CREATE TABLE "words" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , "name" TEXT NOT NULL , "def" TEXT NOT NULL, "rand" INTEGER) 我定期更新使用“更新单词SET rand = random()” 在android中,当我使用下面的rawQuery()创build一个游标: SELECT w.id, w.name, w.def, w.rand FROM words w ORDER BY w.rand ASC; 返回的游标不会以正确的顺序迭代。 例如,它将按照以下顺序输出rand值的列: -1298882092 -2138143484 -1115732861 118839193 … 有谁知道这是怎么回事? 不应该这个工作? 如果我在SQLiteManager中运行完全相同的查询,它将以正确的顺序返回结果,所以这似乎是特定于android / cursor的。 更新: 这里是Android中的代码,我已经尝试了多种方式: […]

在SQlite android数据库中存储货币

我想在android中的sqlite数据库中存储货币值。 我不这么认为int会被用在这里。 我听说可以使用Bigdecimal 。 如果任何人都可以告诉我应该用来发送值到sqlite数据库的方式。

sqlite3_open_v2(“/ data / data / com.android.packagename / databases / dump.sqlite”,&handle,1,NULL)失败

我正在与sqlite数据库….应用程序工作在2.3及更高版本…当我试图在2.2中运行…我得到了一个像…. E/Database(2476):sqlite3_open_v2("/data/data/com.android.packagename/databases/dump.sqlite", &handle, 1, NULL) failed 数据库有一些问题。 当我试图在2.2运行我的应用程序。 我的logcat显示 E/Database(2476):sqlite3_open_v2("/data/data/com.android.canadaQbank/databases/dump.sqlite", &handle, 1, NULL) failed D/asset(2476): Data exceeds UNCOMPRESS_DATA_MAX (4594688 vs 1048576) D/AndroidRuntime(2476): Shutting down VM W/dalvikvm(2476): threadid=1: thread exiting with uncaught exception (group=0x4001d800) D/dalvikvm(2476): GC_FOR_MALLOC freed 6256 objects / 356848 bytes in 165ms E/AndroidRuntime(2476): FATAL EXCEPTION: main E/AndroidRuntime(2476): java.lang.Error: Error copying database E/AndroidRuntime(2476): at com.android.canadaQbank.DBAdapter.createDataBase(DBAdapter.java:83) […]