Articles of sqlite3

SQLiteDatabase.insert()为虚拟表返回不正确的rowid

当我在一个全文搜索数据库中插入一行时声明如下: CREATE VIRTUAL TABLE foo USING fts3 (bar); SQLiteDatabase.insert()方法返回不正确的rowid。 如果表声明如下: CREATE TABLE foo (bar VARCHAR(10)); 它返回正确的rowid值。 问题是当我使用从方法返回的rowid插入后很快查询数据库时,返回的Cursor没有记录。 它只适用于第一次插入数据库。 对于后续插入,将返回不正确的rowid。 我需要做什么才能从SQLiteDatabase.insert()方法中获取正确的rowid? 我使用的是Android SDK版本2.1update1。 谢谢,丹 更新:我最终使用hack来使用以下代码获取最后一行id: private int getLastRowId(SQLiteDatabase db, String table) { Cursor cursor = null; try { cursor = db .rawQuery(String.format(Locale.US, “SELECT MAX(rowid) FROM %s”, table), null); if (cursor.moveToFirst()) { return cursor.getInt(0); } else { […]

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) 我使用“UPDATE words SET rand = random()”定期更新 在android中,当我使用rawQuery()使用以下内容创建游标时: 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的。 […]

如何在SQLite fts3全文搜索中编写包含查询

我想在我的索引表中进行全文搜索,这是sqlite fts3。 例如; 数据集是{“David Luiz”,“David Villa”,“Diego Costa”,“Diego Ribas”,“Diego Milito”,“Gabriel Milito”,} 当我输入“vid i”时,我想得到{“David Luiz”,“David Villa”} 在SQLite的文档中,我发现了这个http://www.sqlite.org/fts3.html#section_3,但它只包含startswith query。 my query is: SELECT *FROM Table WHERE Table MATCH “*vid* *i*” 我不知道它是否可能。 如果可以在sqlite fts3中进行搜索,我们将不胜感激

使用房间数据库(房间持久性库)创建触发器

如何使用Room Persistence库“ 创建触发器 ” CREATE TRIGGER IF NOT EXISTS delete_till_10 INSERT ON user WHEN (select count(*) from user)>9 BEGIN DELETE FROM user WHERE id IN (SELECT id FROM user ORDER BY id limit (select count(*) -9 from user)); END

在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) […]

Android中的外部存储上的SQLite性能不佳

我正在使用外部存储器在等待发送到服务器时将事件存储在数据库中。 我在插入记录时看到了非常糟糕的表现。 我知道外部存储器可能很慢,但我想看到一些数字,所以我写了一个测试它的小应用程序。 这是代码: public static final int INSERTS = 100; File dbFile = new File(Environment.getExternalStorageDirectory(), “test.sqlite3”); // File dbFile = new File(getFilesDir(), “test.sqlite3”); dbFile.delete(); SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbFile, null); db.execSQL(“CREATE TABLE events (_id integer primary key autoincrement, event_type TEXT NOT NULL, timestamp BIGINT, data TEXT);”); db.execSQL(“CREATE INDEX mainIndex ON events (event_type, timestamp ASC);”); InsertHelper […]

SQLite插入顺序与查询顺序?

查询返回的行的顺序是否与SQLite数据库中的表插入行的顺序相同? 如果是,这种行为是否一致? 如果否,是否可以执行此操作? 我需要存储大约500行数据,并且需要不时地进行排序/排序。 插入前数据的顺序正确。

即使值为null,Sqlite查询返回0

以下是我用来获取对应于我的sqlite db表中特定字段的int值的查询。 “SELECT conn_status FROM profiles WHERE devID = ‘” + id+”‘” 如果没有为与提供的devID相对应的’conn_status’保存值,则表中的现有值将为null。 我从java中检索数据,如下所示: c.getInt(c.getColumnIndex(“conn_status”)) 这里的问题是,使用给定的查询,即使字段中存在的值为null,c.getInt也会返回0。 如何修改此查询,如果值为null,则返回不同的值而不是0,例如5。 任何帮助表示赞赏。

是否可以将内部数据库移动到SD卡?

随着我的应用程序中的数据库的增长,它将需要越来越多的内部手机空间。 数据库中没有任何敏感/私人数据,所以我有兴趣将其移动到SD卡。 我正在使用SQLiteOpenHelper来协助数据库工作。 我的理解是,您不能将其用于SD卡上的DB访问,因为您无法定义数据库路径。 但是,Internet上有一些(非常差的)示例表明您可以覆盖此限制。 但是我从来没有得到其中一个代码示例来编译。 可能吗? 如果是这样 – 怎么样! 请注意,Froyo的“SD卡上的应用程序”function不起作用,因为它不会移动内部文件。