标签: android-sqlite

替换 SQLITE TEXT 记录中的特殊字符

我在 android 应用程序中有一个 SQLITE 数据库。为了提高应用程序性能,我想在将数据库添加到 Android 应用程序之前对其进行一些改进。
为了做到这一点:
我想删除/替换帐户表的名称字段中的特殊字符。这些特殊字符的 Unicode 范围为 8204-8207 (0x200C ~ 0x200F)。更新帐户表的正确 SQL 语法是什么?

sql database sqlite sql-update android-sqlite

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

对特殊字符进行特殊排序?

我有一个contacts包含列的表名[ "id","name","age" ]。我需要按名称升序排列所有联系人。我为其编写了以下查询:

Select * from contacts order by name collate nocase asc;
Run Code Online (Sandbox Code Playgroud)

我从上面的查询得到的结果如下:

1. 11 | #ax Nene | 21
1. 21 | 123 Ray | 22
1. 33 | maxy Wel | 25
1. 41 | Max Vele | 23
1. 53 | Nam sing | 25
Run Code Online (Sandbox Code Playgroud)

上面的顺序很好,但我希望以特殊字符 [#、$ 或任何其他非字母] 开头的名称位于结果的底部而不是顶部。我应该在查询中修改哪些内容才能获得所需的结果。

注意:我正在使用 sqlite。

sqlite sql-order-by android-sqlite

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

无法在事务内附加数据库

我正在开发一个必须使用两个数据库的应用程序。我想将新数据库表中的记录添加到旧数据库表中,我已将新数据库放在项目的资产文件夹中,并且可以使用新数据库和旧数据库进行查询。

问题是当我尝试在方法上将新数据库附加到旧数据库时,发生了无法在事务中附加数据库的onUpgrade()错误。

我发现很多链接都有这个问题,我已经尝试了很多但没有成功。我是 Android 新手SQLite,请告诉我如何在代码中附加数据库和另一个数据库。

数据库助手类: DatabaseHelper.java

public class DatabaseHelper extends SQLiteOpenHelper {
Context context;
SQLiteDatabase sourceDatabase;
private String TAG = this.getClass().getSimpleName();

private static final String DATABASE_NAME = "namesdemo_db";
private static final String SOURCE_DB_NAME = "namesdemo_db_s";
private static final int DATABASE_VERSION = 23;

private String DATABASE_PATH;
File dbFile;

// TABLE NAMES
private static final String TABLE_EMPLOYEE = "employee";
private static final String TABLE_FAVORITE = "fevorite";

// KEYS of Table Employee
private static final String KEY_ID …
Run Code Online (Sandbox Code Playgroud)

sqlite android android-sqlite

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

房间库可以从资产文件夹复制数据库吗?

我在资产文件夹中有预加载数据库的旧项目。该项目实现了SQLiteOpenHelper用于数据库操作。但现在要更新应用程序,我想将我的项目移动到Room数据库。

所以我的问题是,Room 库中是否有任何可用的方法或功能,我可以在运行时在应用程序中使用预加载的数据库文件。

或者有什么方法可以先加载数据库,然后从 Room 库直接在该数据库上执行查询?

android android-sqlite android-room

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

Android room - 如何清除所有表的sqlite_sequence

如果用户从应用程序注销,我将使用以下命令一一清除表中的数据

@Query("DELETE FROM tableName")
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用下面的代码一一清除所有表的 sqlite_sequence 。

database = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, DatabaseMeta.DB_NAME)
        .build(); 
database.query("DELETE FROM sqlite_sequence WHERE name = ?", new Object[]{"tableName"})
Run Code Online (Sandbox Code Playgroud)

不幸的是,清算sqlite_sequence不起作用。所以如果用户再次登录,那么起始rowId不会从1开始创建。

还有其他方法可以做到这一点吗?我尝试清除整个数据库,并在用户再次登录后添加新条目。

android android-sqlite android-room

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

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
查看次数