标签: android-sqlite

Android:CSV数据库与SQLite数据库

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更容易管理和过滤,这就是我问这个问题的原因.

总结一下:

  • 在性能方面,两者中哪一个更快?
  • SQLite(或CSV)是否具有其他功能,而不是其他功能,特别是在Android中(因为我知道Android有自己的SQLiteDatabase类?
  • 为什么SQLite的使用远远超过CSV数据库(即读取和过滤CSV文件)?

编辑:

为了澄清,我知道CSV文件只是一个用逗号分隔值的文件,即不是作为SQL数据库的"数据库".但是,我仍然可以将CSV文件用作一种数据库,其中逗号分隔值表示不同的列,也可以通过检查特定列是否与特定值匹配来过滤.所以我问哪个更好从中读取数据.

csv android android-sqlite android-database

5
推荐指数
0
解决办法
2210
查看次数

Android 房间通过查询插入

我知道可以通过@Insert注释将数据插入 SQlite 房间库,但我(出于好奇)尝试通过 SQL 语句插入值,但 Android studio 显示错误,指出列名无法解析。这是强迫开发人员使用@Insert注释的一种方式还是我在这里做错了什么?谢谢!

请查看以下屏幕截图 - 在此输入图像描述

sqlite android android-sqlite android-room

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

SQLite“NOT IN”参数有大小限制吗?

我有一个 SQLite 数据库,我在其中执行如下查询

  Select * from table where col_name NOT IN ('val1','val2')
Run Code Online (Sandbox Code Playgroud)

基本上,我从服务器获取了一个巨大的值列表,我需要选择给定列表中不存在的值。

目前工作正常,没有任何问题。但是,随着服务器数据库的频繁更新,来自服务器的值的数量变得巨大。

因此,我可能会获得数千个需要传递给的字符串值NOT IN

我的问题是,它将来会导致性能问题吗?NOT IN参数有大小限制吗?(比如您可以检查最多 10000 个值)?

它会在某个时候导致崩溃吗?

mysql sqlite android android-sqlite

5
推荐指数
1
解决办法
2216
查看次数

Android Room嵌入关系忽略SQL where条件

我是一个 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 子句排除。我的说法有错误吗?

MikeT 构建了一个包含相同错误的示例应用程序: 在此输入图像描述

(编辑:我现在已经放弃了布尔转换器,Room 似乎可以在没有它的情况下解析布尔值)或者这可能是由我的布尔值简单类型转换器引起的?一和零实际上是布尔值的占位符:

@TypeConverter
    public Boolean fromInt(int value) {
        return …
Run Code Online (Sandbox Code Playgroud)

sql dao pojo android-sqlite android-room

5
推荐指数
1
解决办法
1651
查看次数

Android Room:大于 1048576 的 DAO

我有 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)

android android-sqlite android-database android-room

5
推荐指数
1
解决办法
857
查看次数

房间数据库模式更新而不丢失数据

我使用 Kotlin 在 Android 中开发了一款应用程序,它可以在 Playstore 上找到。我使用 Room 数据库来存储这些值。我有以下疑问:

  1. 数据库架构现在已更改,我需要如何处理它。我参考了下面的教程,但仍然不清楚如何处理迁移中的架构更改。访问https://developer.android.com/training/data-storage/room/migration-db-versions.html

  2. 如何使用 Playstore 版本测试我当前的应用程序?

我在这里先向您的帮助表示感谢。

sqlite android kotlin android-sqlite android-room

5
推荐指数
1
解决办法
9148
查看次数

如何在 Room 中动态创建新表?

请帮帮我。
在我的应用程序中,用户可以通过按按钮创建新的数据库表。用户还可以稍后访问该表以接收其中的数据。
目前我通过 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 android android-sqlite android-room

5
推荐指数
1
解决办法
6268
查看次数

如何在flutter中将sqlite db导出到googledrive

我正在寻找将 Sqlite db 文件导出到 google 驱动器的功能,例如 Whatsapp 备份。有没有任何解决方案有任何 git 链接?

database sqlite android-sqlite flutter

5
推荐指数
0
解决办法
507
查看次数

Room 迁移类中原始查询的 SQL 注入

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

sqlite android sql-injection android-sqlite android-room

5
推荐指数
0
解决办法
391
查看次数

将 Inf、NAN 和 -Inf 插入 sqlite3 数据库的 SQL 命令

将无穷大、负无穷大和非数字插入到 sqlite3 数据库表中的实型列中的 sql 命令是什么?

即用什么来代替 value1、value2?

INSERT INTO table (column1,column2 ,..)
VALUES( value1, value2 ,...);
Run Code Online (Sandbox Code Playgroud)

我尝试在 sqlite3文档中查找相关资源,但找不到任何内容。

将“Inf”和“-Inf”作为字符串插入并通过 C++ 读取它会给我一个小的 -0.00... 值

sql sqlite android-sqlite

5
推荐指数
1
解决办法
2510
查看次数