标签: android-sqlite

如何获取以“%”(百分号)开头的 SQLite 数据?

我有一个数据库,其中有几个表。我有一个表,其中有一列包含标签名称和标签 ID。在一种情况下,我有标签名称,并且想要标签名称以输入文本开头的所有标签的标签 ID。

问题是,当我在数据库中查找标签名称“%”时,它返回该表的所有行。但我只需要那些包含以输入文本开头的标记名称的行(在本例中以“%”符号开头)。

例子:

TagName
-------
abc
%test_tag
def
Run Code Online (Sandbox Code Playgroud)

如果我搜索“%”,结果应该是“%test_tag”。

目前,我正在使用的查询是

SELECT * FROM Tags WHERE TagName like '"+tagName+" %'
Run Code Online (Sandbox Code Playgroud)

如何修复它?

android android-sqlite

2
推荐指数
1
解决办法
3082
查看次数

SQLITE - 基于位查询整数字段

是否有一个函数、技巧、技巧来进行查询,只从整数字段设置了特殊位的表中检索值?

sqlite android android-sqlite

2
推荐指数
1
解决办法
1316
查看次数

SQLite 左连接 + 分组依据 + 排序依据

我正在将 SQLite 用于 Android 应用程序。

我有两个表:主题和消息。我想选择所有主题以及该主题的消息数和该主题的最后一条消息作为单个请求(使用子查询)。

我尝试了以下方法:

SELECT topic.*, COUNT(message.id), message.* FROM topic
LEFT JOIN (SELECT * FROM message ORDER BY message.ts DESC) AS message
ON topic.id=message.topic_id
GROUP BY topic.id;
Run Code Online (Sandbox Code Playgroud)

当我在服务器端的 MySQL 上尝试时,这个查询工作得非常好。但是,它在带有 SQLite 的 Android 应用程序上无法按预期工作:我获得了所有主题和正确数量的消息,但最后一条消息不是最新的消息(似乎子查询中的 ORDER BY 没有用) 。

有什么提示吗?

编辑:message.ts 是一个 TEXT NOT NULL,包含格式为“yyyy-MM-dd HH:mm:ss.SSS”的 ts。当我查询所有消息并按 ts 排序时,顺序是好的。

sqlite android join android-sqlite

2
推荐指数
1
解决办法
1032
查看次数

Android Sqlite 从一个数据库到另一个数据库的传输表

我在我的 android 应用中有一个要求。

有一个现有的数据库 A,它有一个表 T。从应用程序的下一个版本开始,我想创建一个新的数据库 B,并使用所有现有数据将我的表从 A移动到 B。

我猜会有某种方法可以从现有数据库中获取转储并将其存储在资产文件中。然后使用该文件恢复新数据库中的表。

无法将该数据存储在内存中,因为如果应用程序在两者之间被终止,它可能会进入不一致的状态。

在花了一些时间在文档/论坛中搜索后,我无法找到任何明确定义的方法来执行此操作。

请帮忙。

android android-sqlite

2
推荐指数
1
解决办法
1060
查看次数

为离线应用程序创建备份的最佳方式?

所以我说非常复杂的数据库,它使用many to many数据库设计foreign keys并连接表和它的Room数据库。我想为它创建备份系统,因为它是离线应用程序,我需要导出数据库并将其存储到谷歌驱动器的应用程序文件夹。最近几天我已经阅读了很多关于它但仍然有点困惑我看到有方法可以将数据库导出为CSVJSONexcel文件或仅作为.db文件,但是这样做的最佳实践是什么以及专业人员如何处理用它?

sqlite performance android android-sqlite android-room

2
推荐指数
1
解决办法
2941
查看次数

使用 Datagrip 浏览 Android SQLite

我是 Android 新手,我一直在尝试将我的 SQLite 数据库与 DataGrip 连接起来(因为我已经使用它并且我对它感觉很舒服)。我想尝试这种方式,但下拉菜单没有显示任何 Android SQLite 选项。

我也尝试过这种方式,但我在我的Android项目中找不到.db文件。

任何帮助都会很好,谢谢!

android android-sqlite datagrip

2
推荐指数
1
解决办法
1649
查看次数

房间出现 ConcurrentModificationException

我在将数据插入 Android 表时遇到问题。这是我的 Dao 函数:

@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(freight: Foo)

@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insert(freights: MutableList<Foo>)
Run Code Online (Sandbox Code Playgroud)

下面是它的调用方式:

  Observable.fromCallable {
          db.fooDao().insert(it)
       }
    }
            .subscribeOn(Schedulers.io())
            .observeOn(Schedulers.io())
            .subscribe {
                Logger.d("Inserted ${it} users from API in DB...")
            }
Run Code Online (Sandbox Code Playgroud)

我得到的异常:

   Caused by: java.util.ConcurrentModificationException
    at java.util.ArrayList$Itr.next(ArrayList.java:860)
    at com.blockgrain.blockgrain.dbmanager.repository.FooRepository$insertDataInDb$1.call(FooRepository.kt:76)
Run Code Online (Sandbox Code Playgroud)

我已经创建了具有相同逻辑的其他表,它们工作正常,但这个失败了。请让我知道出了什么问题。

更新

Foo.kt

 override fun get(): Observable<MutableList<Foo>> {
    val observable = getDataFromDb()
    return observable.flatMap {
        if (it.isEmpty())
            getDataFromApi()
        else
            observable
    }
}

override fun getDataFromApi(): Observable<MutableList<Foo>> {

    return WebService.createWithAuth().getFooFromWeb()
            .doOnNext {
                Logger.d(" Dispatching ${it} users from …
Run Code Online (Sandbox Code Playgroud)

android android-sqlite android-room

2
推荐指数
1
解决办法
1949
查看次数

如何在android中使用sqlite VACUUM

我有一个 android 应用程序,它涉及登录到该应用程序并执行许多 CRUD 操作。当用户第一次登录时,如果有可供该用户下载的任何数据,它会快速记录他/她。但是后来重新登录时,这个过程很慢,有时需要大约20到30分钟。因此,我阅读了有关使用 VACUUM 来避免删除记录时创建的可用空间的信息。

我对何时以及如何使用 VACUUM 感到有些困惑,是在打开用户登录时打开数据库吗?或其他时间。

对此的任何建议都会有所帮助。谢谢

java sqlite android android-sqlite

2
推荐指数
1
解决办法
1482
查看次数

预先填充的数据库在 API 28 中不起作用引发“无此类表”异常

我在我的项目中使用了预先填充的数据库。我有一个创建的 .sql 基础并在第一次启动时复制它。基础是大 33mb。

    private void copyDataBase() throws IOException {

    InputStream externalDbStream = context.getAssets().open(DB_NAME);

    String outFileName = DB_PATH + DB_NAME;

    OutputStream localDbStream = new FileOutputStream(outFileName);

    byte[] buffer = new byte[1024];
    int bytesRead;
    while ((bytesRead = externalDbStream.read(buffer)) > 0) {
        localDbStream.write(buffer, 0, bytesRead);
    }
    localDbStream.close();
    externalDbStream.close();

}
Run Code Online (Sandbox Code Playgroud)

它适用于除 API 28 之外的不同 android 版本。 API 28 抛出“Caused by: android.database.sqlite.SQLiteException: no such table: phrases”异常:

Caused by: android.database.sqlite.SQLiteException: no such table: phrases (code 1 SQLITE_ERROR): , while compiling: select * from phrases where complexity …
Run Code Online (Sandbox Code Playgroud)

sqlite android android-sqlite

2
推荐指数
1
解决办法
829
查看次数

房间 SQLITE 使用 JOINS 从多个表中删除查询

嘿伙计们,我正在将我的表和查询从 mysql 移动到一个 andorid 应用程序内的内部 SQLITE 数据库。

当我将删除查询复制到我的 DAO 中时,它抛出了一个错误:

DELETE moodBeforeTable, moodAfterTable
FROM moodBeforeTable
JOIN moodAfterTable
ON  moodAfterTable.cbtId = moodBeforeTable.cbtId
WHERE moodBeforeTable.cbtId =: cbtId";
Run Code Online (Sandbox Code Playgroud)

第一个词moodBeforeTable 是红色下划线,IDE 声明它期望FROM。它似乎不喜欢 mysql 语法。我不确定如何重写此查询。我还从另一个表中进行了第二次删除。是否可以通过一个方法调用执行所有这些删除?

基本上,当用户单击删除按钮时,它需要一键从三个单独的表中删除记录。我们可以在 DAO 内部联合查询吗?如果可以的话,请给我一个简单的例子来说明如何编写这个,因为语法与我习惯的不同

android android-sqlite android-room

2
推荐指数
1
解决办法
769
查看次数