我有一个数据库,其中有几个表。我有一个表,其中有一列包含标签名称和标签 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)
如何修复它?
是否有一个函数、技巧、技巧来进行查询,只从整数字段设置了特殊位的表中检索值?
我正在将 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 排序时,顺序是好的。
我在我的 android 应用中有一个要求。
有一个现有的数据库 A,它有一个表 T。从应用程序的下一个版本开始,我想创建一个新的数据库 B,并使用所有现有数据将我的表从 A移动到 B。
我猜会有某种方法可以从现有数据库中获取转储并将其存储在资产文件中。然后使用该文件恢复新数据库中的表。
无法将该数据存储在内存中,因为如果应用程序在两者之间被终止,它可能会进入不一致的状态。
在花了一些时间在文档/论坛中搜索后,我无法找到任何明确定义的方法来执行此操作。
请帮忙。
所以我说非常复杂的数据库,它使用many to many数据库设计foreign keys并连接表和它的Room数据库。我想为它创建备份系统,因为它是离线应用程序,我需要导出数据库并将其存储到谷歌驱动器的应用程序文件夹。最近几天我已经阅读了很多关于它但仍然有点困惑我看到有方法可以将数据库导出为CSV,JSON,excel文件或仅作为.db文件,但是这样做的最佳实践是什么以及专业人员如何处理用它?
我在将数据插入 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 应用程序,它涉及登录到该应用程序并执行许多 CRUD 操作。当用户第一次登录时,如果有可供该用户下载的任何数据,它会快速记录他/她。但是后来重新登录时,这个过程很慢,有时需要大约20到30分钟。因此,我阅读了有关使用 VACUUM 来避免删除记录时创建的可用空间的信息。
我对何时以及如何使用 VACUUM 感到有些困惑,是在打开用户登录时打开数据库吗?或其他时间。
对此的任何建议都会有所帮助。谢谢
我在我的项目中使用了预先填充的数据库。我有一个创建的 .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) 嘿伙计们,我正在将我的表和查询从 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 ×10
android-sqlite ×10
sqlite ×5
android-room ×3
datagrip ×1
java ×1
join ×1
performance ×1