我在 android 应用程序中有一个 SQLITE 数据库。为了提高应用程序性能,我想在将数据库添加到 Android 应用程序之前对其进行一些改进。
为了做到这一点:
我想删除/替换帐户表的名称字段中的特殊字符。这些特殊字符的 Unicode 范围为 8204-8207 (0x200C ~ 0x200F)。更新帐户表的正确 SQL 语法是什么?
我有一个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。
我正在开发一个必须使用两个数据库的应用程序。我想将新数据库表中的记录添加到旧数据库表中,我已将新数据库放在项目的资产文件夹中,并且可以使用新数据库和旧数据库进行查询。
问题是当我尝试在方法上将新数据库附加到旧数据库时,发生了无法在事务中附加数据库的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) 我在资产文件夹中有预加载数据库的旧项目。该项目实现了SQLiteOpenHelper用于数据库操作。但现在要更新应用程序,我想将我的项目移动到Room数据库。
所以我的问题是,Room 库中是否有任何可用的方法或功能,我可以在运行时在应用程序中使用预加载的数据库文件。
或者有什么方法可以先加载数据库,然后从 Room 库直接在该数据库上执行查询?
如果用户从应用程序注销,我将使用以下命令一一清除表中的数据
@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开始创建。
还有其他方法可以做到这一点吗?我尝试清除整个数据库,并在用户再次登录后添加新条目。
我知道可以通过@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 版本测试我当前的应用程序?
我在这里先向您的帮助表示感谢。
android-sqlite ×10
android ×7
android-room ×6
sqlite ×6
sql ×2
dao ×1
database ×1
kotlin ×1
mysql ×1
pojo ×1
sql-order-by ×1
sql-update ×1