CSV数据库与Android中的SQLite数据库相比如何?
查看StackOverflow上的其他问题,并阅读Android Developer Documentation,我看到SQLite数据库的使用频率远高于从CSV文件中读取数据.还有一些问题,用户希望将CSV文件导入SQLite数据库(例如,此问题或此问题).使用SQLite而不是CSV有优势吗?
我尝试过使用CSV和SQLite一点点,在性能方面我没有看到很大的区别,但如果我在这里错了,请纠正我.
据我所知,有不同的读取CSV文件的方法,我打开并使用BufferedReader类似的方式读取它:
BufferedReader reader =
new BufferedReader(new InputStreamReader(context.getAssets().open(fileName)));
Run Code Online (Sandbox Code Playgroud)
SQLite数据库以通常的方式打开:
SQLiteDatabase db = helper.getReadableDatabase();
Run Code Online (Sandbox Code Playgroud)
我不太确定功能上的差异,虽然我假设SQLite更容易管理和过滤,这就是我问这个问题的原因.
总结一下:
SQLiteDatabase类?为了澄清,我知道CSV文件只是一个用逗号分隔值的文件,即不是作为SQL数据库的"数据库".但是,我仍然可以将CSV文件用作一种数据库,其中逗号分隔值表示不同的列,也可以通过检查特定列是否与特定值匹配来过滤.所以我问哪个更好从中读取数据.
我知道可以通过@Insert注释将数据插入 SQlite 房间库,但我(出于好奇)尝试通过 SQL 语句插入值,但 Android studio 显示错误,指出列名无法解析。这是强迫开发人员使用@Insert注释的一种方式还是我在这里做错了什么?谢谢!
我有一个 SQLite 数据库,我在其中执行如下查询
Select * from table where col_name NOT IN ('val1','val2')
Run Code Online (Sandbox Code Playgroud)
基本上,我从服务器获取了一个巨大的值列表,我需要选择给定列表中不存在的值。
目前工作正常,没有任何问题。但是,随着服务器数据库的频繁更新,来自服务器的值的数量变得巨大。
因此,我可能会获得数千个需要传递给的字符串值NOT IN
我的问题是,它将来会导致性能问题吗?NOT IN参数有大小限制吗?(比如您可以检查最多 10000 个值)?
它会在某个时候导致崩溃吗?
我是一个 SQL 菜鸟,不明白为什么我的语句会这样。它在 Android Room DAO 中使用并返回不需要的结果。
我有这样的声明:
@Transaction
@Query("Select Distinct Category.* " +
"from Category " +
"inner join Items on Category.ID = Items.Category " +
"where IsExcluded = 0 " +
"order by lower( Category.Name ) asc")
LiveData<List<CatViewWithItemList>> getCatViewWithItemListGlobal();
Run Code Online (Sandbox Code Playgroud)
结果由一个简单的 POJO 接收:
public class CatViewWithItemList {
@Embedded
public Cat myCat;
@Relation(parentColumn = "ID",
entityColumn = "Category") public List<ItemS> ItemList;
Run Code Online (Sandbox Code Playgroud)
问题: 我不明白结果:
为什么第 5 项被退回?它应该被 where 子句排除。我的说法有错误吗?
(编辑:我现在已经放弃了布尔转换器,Room 似乎可以在没有它的情况下解析布尔值)或者这可能是由我的布尔值简单类型转换器引起的?一和零实际上是布尔值的占位符:
@TypeConverter
public Boolean fromInt(int value) {
return …Run Code Online (Sandbox Code Playgroud) 我有 11Mb JSON 文件,这些文件将写入 Dao,但是当我保存所有数据时。我收到这个错误;
/data/user/0/com.test.save/databases/ChannelDb-wal 6946352 bytes: Bigger than 1048576; truncating
Run Code Online (Sandbox Code Playgroud)
我的代码;
AppDatabase dbRoom = Room.databaseBuilder(getApplicationContext(),
AppDatabase.class, Constants.CHANNEL_DB).build();
AndroidNetworking.get(user.getRemote())
.setTag(Constants.GET_CHANNEL_LIST)
.setPriority(Priority.HIGH)
.build()
.getAsOkHttpResponseAndParsed(new TypeToken<List<Channel>>() {
}, new OkHttpResponseAndParsedRequestListener<List<Channel>>() {
@Override
public void onResponse(Response okHttpResponse, List<Channel> channels) {
AsyncTask.execute(() -> dbRoom.channelDao().insertAll(channels));
}
@Override
public void onError(ANError anError) {
Log.d(TAG, "Check 4");
hideProgress();
Toast.makeText(getApplicationContext(), getResources()
.getString(R.string.an_error), Toast.LENGTH_LONG).show();
Crashlytics.log(Log.DEBUG, TAG, anError.getErrorDetail());
}
});
Run Code Online (Sandbox Code Playgroud) 我使用 Kotlin 在 Android 中开发了一款应用程序,它可以在 Playstore 上找到。我使用 Room 数据库来存储这些值。我有以下疑问:
数据库架构现在已更改,我需要如何处理它。我参考了下面的教程,但仍然不清楚如何处理迁移中的架构更改。访问https://developer.android.com/training/data-storage/room/migration-db-versions.html
如何使用 Playstore 版本测试我当前的应用程序?
我在这里先向您的帮助表示感谢。
请帮帮我。
在我的应用程序中,用户可以通过按按钮创建新的数据库表。用户还可以稍后访问该表以接收其中的数据。
目前我通过 dataBaseHelper 类利用旧的 SQLite,所以我可以
public static void createTable(String tableName) {
databaseHelper.getWritableDatabase().execSQL("CREATE TABLE IF NOT EXISTS [" + tableName + "] (...columns)");
}
Run Code Online (Sandbox Code Playgroud)
工作完成了;
现在我想在我的应用程序中使用 Room 库而不是 DataBaseHelper。
我看着这个 DAO 接口,它严格绑定到特定的预定义表,但不知道该怎么办。
有办法吗?
我正在寻找将 Sqlite db 文件导出到 google 驱动器的功能,例如 Whatsapp 备份。有没有任何解决方案有任何 git 链接?
在 Room 迁移中编写原始 SQL 查询时,OWASP 工具会发出 SQL 注入警告。有没有什么解决办法可以克服这个问题。下面是我的代码:
class Migration1to2 : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE Book ADD COLUMN pub_year INTEGER")
}
}
Run Code Online (Sandbox Code Playgroud) 将无穷大、负无穷大和非数字插入到 sqlite3 数据库表中的实型列中的 sql 命令是什么?
即用什么来代替 value1、value2?
INSERT INTO table (column1,column2 ,..)
VALUES( value1, value2 ,...);
Run Code Online (Sandbox Code Playgroud)
我尝试在 sqlite3文档中查找相关资源,但找不到任何内容。
将“Inf”和“-Inf”作为字符串插入并通过 C++ 读取它会给我一个小的 -0.00... 值