首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >删除旧表并创建新表并预填充它- RoomDatabase

删除旧表并创建新表并预填充它- RoomDatabase
EN

Stack Overflow用户
提问于 2021-10-06 14:07:47
回答 1查看 351关注 0票数 2

我正在使用java在android中创建一个简单的android应用程序。我有一个名为的名为user的表的空间数据库数据库,该表具有四列名称、职业、年龄、description,并且我已经使用我在studio中创建的数据库进行了预填充。

现在,我想在表上添加一个列姓氏,但是我想要删除所有预先填充的数据,然后用一个包含姓氏的新数据库重新填充表。

起初,我想使用自动迁移,然后添加一个新列。但我不知道如何删除所有现有数据并重新填充数据库。

我想删除现有的数据,因为我想更改列description.中的所有信息。另外,与列名称一样,它现在包含全名,在某些情况下,它包含行"name surname“,还有一些类似于”姓氏“、”e.x“、威尔史密斯、"Smith Will”的行。现在,我希望将名称和姓氏分别列为名称、和姓氏。

有人能给我推荐点什么吗?提前谢谢你

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-06 16:05:03

AutoMigration将无法处理修改数据本身的问题。因此,您必须手动完成该操作,从而使用破坏性迁移。

下面是一个例子(可以看到实际的例子)

  • 注:这假定没有将版本或版本1分配给原始的预先填充的数据库,并且将1用于传递给@Database注释的版本。

代码语言:javascript
运行
AI代码解释
复制
- an SQLite database has, as part of it's header, a user\_version number (offset 60 for 4 bytes). It is comparing this to the version passed to Room that determines the migration/auto migration. As is seen changing this is critical if migrating.
代码语言:javascript
运行
AI代码解释
复制
- If developing you could just start from the changed database by making the changes to the database and the App and uninstalling the App. No need to play with version numbers.

  1. 通过添加新的姓氏列来修改用户类。例如

:-

代码语言:javascript
运行
AI代码解释
复制
@Entity
class User {
    @PrimaryKey
    @NonNull
    String name;
    String profession;
    int age;
    String description;
    /* ADDED FOR V2 */
    String surname;
}

  1. 编译(Ctrl + F9),然后从Android定位生成的
  2. ,然后找到与@
  3. 类相同但以结尾的类

代码语言:javascript
运行
AI代码解释
复制
1. locate the **createAllTables** method and then the SQL for the User table. Make a note of the SQL and the definition for the new column e.g. -surname TEXT

  1. In SQLite Studio中,运行以下SQL:- ALTER TABLE user ADD COLUMN surname TEXT;,其中列关键字后面的文本/代码与上面提到的SQL完全相同(您可以包括或省略列名周围的封闭内容,它们很难在SQLite

中显示)。

  1. 查看数据,例如,它现在是:-

代码语言:javascript
运行
AI代码解释
复制
1.

nulls.

  1. Edit
  2. 注意到,姓氏列中填充了相应的数据。例如:-

代码语言:javascript
运行
AI代码解释
复制
1.

然后,

  1. 运行以下SQL PRAGMA user_version; (检查当前版本)

然后

  1. 运行以下SQL PRAGMA user_version = 2; (以更改版本(猜测2))

然后,

  1. 运行以下SQL PRAGMA user_version; (以检查该版本现在为2)

  1. 退出SQLite Studio

  1. 用新数据库替换项目中的文件/资产。例如:-

代码语言:javascript
运行
AI代码解释
复制
1.

@Database类中的

  1. (不是生成的java) :-

代码语言:javascript
运行
AI代码解释
复制
1. change the database version to 2
2. add the following to the the databaseBuild :- 
    1. either `.fallbackToDestructiveMigrationFrom(1)` if going from 1 to 2
    2. or `.fallbackToDestructiveMigration()` (not as safe but more encompassing)

  1. 运行应用程序,例如:-

代码语言:javascript
运行
AI代码解释
复制
1.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69473217

复制
相关文章
VBA 创建一个新表,并复制其它表数据
Application.DisplayAlerts = False
办公魔盒
2019/07/22
3.2K0
【Jetpack】Room 预填充数据 ( 安装 DB Browser for SQLite 工具 | 创建数据库文件 | 应用中设预填充数据对应的数据库文件 | 预填充数据库表字段属性必须一致 )
在 Android 中使用 Room 框架 , 创建 SQLite 数据库时 , 有时需要预填充一些数据 , 这些数据一般都是来自 assets 资源目录 ;
韩曙亮
2023/10/11
6690
【Jetpack】Room 预填充数据 ( 安装 DB Browser for SQLite 工具 | 创建数据库文件 | 应用中设预填充数据对应的数据库文件 | 预填充数据库表字段属性必须一致 )
数据库(一)--通过django创建数据库表并填充数据
django是不能创建数据库的,只能够创建数据库表,因此,我们在连接数据库的时候要先建立一个数据库。
西西嘛呦
2020/08/26
3.5K0
VNC创建Centos并配置它的网络链接
选择语言滑到最底下找到中文,如果无法滑动按住键盘的左Ctrl键退出到windows再滑动点击
余生大大
2022/11/02
5970
VNC创建Centos并配置它的网络链接
查找并删除
find . -name '*.png' -type f -print -exec rm -rf {} \; find . -type f -name "*.log" -print0 | xargs -0 rm -f 指定一个替换字符串 {} XRSec has the right to modify and interpret this article. If you want to reprint or disseminate this article, you must ensure the inte
XRSec
2022/03/15
1.1K0
android获取短信并自动填充
package com.velo.quanquan.util; import java.util.regex.Matcher; import java.util.regex.Pattern; import net.iaf.framework.util.Loger; import android.app.Activity; import android.database.ContentObserver; import android.database.Cursor; import android.net.
xiangzhihong
2018/01/29
1.4K0
深入探讨 Room 2.4.0 的最新进展
在 Google I/O 2019,我们分享了 Room 2.2 的最新进展。尽管当时已经支持了很多功能,如 支持 Flow API,支持预填充数据库,支持一对一及多对多数据库关系,但是开发者们对 Room 有着更高的期望,我们也致力于此,在 2.2.0 - 2.4.0 版本中发布了很多开发者们期待的新功能!包括自动化迁移,关系查询方法以及支持 Kotlin Symbol Processing (KSP) 等等。下面我们就来逐一介绍这些新功能!
Android 开发者
2022/03/25
1.6K0
深入探讨 Room 2.4.0 的最新进展
文件中查找并删除<feff>
字节顺序标记(英语:byte-order mark,BOM)是位于码点U+FEFF的统一码字符的名称。当以UTF-16或UTF-32来将UCS/统一码字符所组成的字符串编码时,这个字符被用来标示其字节序。它常被用来当做标示文件是以UTF-8、UTF-16或UTF-32编码的记号。 有时候会在处理文本中碰到,需要对其处理,处理方法如下: 删除 :g/[\uFEFF]/d 查找 /[\uFEFF] Python \ufeff
Tyan
2017/12/28
3.4K0
git 本地创建新的分支,并推送远程仓库
当直接直接git push的时候,就会报错提示没有设置上游的远程仓库,只要按照提示执行即可。
Devops海洋的渔夫
2019/05/30
4.6K0
创建并运行一个新的 Laravel 项目
经过 PHP 入门到实战系列的基础学习,接下来我们就可以正式开始 Laravel 框架的学习和使用了。而这一切都需要从创建一个新的 Laravel 项目开始。
学院君
2020/10/19
7K0
创建并运行一个新的 Laravel 项目
关于python使用cv画矩形并填充颜色同时填充文字
font = cv2.FONT_HERSHEY_SIMPLEX # 使用默认字体 cv2.rectangle(im, (10, 10), (110, 110), (0, 0, 255), thickness=2) # cv2.floodFill() cv2.rectangle(im, (113), int(110)), (int(300), int(135),
Gxjun
2018/03/27
4K0
关于python使用cv画矩形并填充颜色同时填充文字
如何使用Java创建数据透视表并导出为PDF
数据透视分析是一种强大的工具,可以帮助我们从大量数据中提取有用信息并进行深入分析。而在Java开发中,可以借助PivotTable,通过数据透视分析揭示数据中的隐藏模式和趋势。本文将介绍如何使用Java来构建PivotTable以及实现数据透视分析,并将其导出为PDF。
葡萄城控件
2023/10/16
3060
创建LV磁盘并扩容
基本的逻辑卷管理概念: PV(Physical Volume)- 物理卷 物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘,也可以是raid设备。 VG(Volumne Group)- 卷组 卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。 LV(Logical Volume)- 逻辑卷 逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。
jwangkun
2021/12/23
3.9K0
创建LV磁盘并扩容
Mysql创建用户并授权
一、Mysql创建用户并授权 mysql 默认的账户也是root,同linux一样也是超级管理员,权利特别大,所以我们不可以随便就把mysql密码告诉其他人。 另外一种情况,我们的数据库中有很多个库和表,针对不同的库和表有着不同的权限,所以我们就需要针对某个用户授权某一个指定的库,或者某个表有权限。 1.1 授权用户访问: grant all on *.* to 'user1'@'127.0.0.1' identified by 'asd9577'; grant:授权; *.*:所有的库; all:所有
老七Linux
2018/05/09
5.5K0
TIDB创建用户并授权
TIDB创建用户并授权
Java架构师必看
2021/07/08
1.3K0
创建并管理 ESXi 网络
在 ESXi 的虚拟机之间确保正常通信的基础是网络服务,通常在物理网络中需要使用不同的物理设备进行连接才能组件出稳定高效的网络服务,而在虚拟网络中需要不同的虚拟设备为其提供服务。 ESXi 网络分为: 1、物理网卡:为了使物理服务器之间能够正常通信而建立的网络。 2、虚拟网络:在 ESXi 主机上运行的虚拟机之间为了互相通信而相互逻辑连接形成的网络。ESXi 主机可以有多个物理网卡,虚拟机也可以创建多个虚拟网卡,同时连接到虚拟交换机可实现虚拟机之间的通信。 ESXi 网络组件: 1、物理网卡:vmnic 2、虚拟网卡:vnic 3、虚拟交换机: (1)、标准交换机:操作简单,但是每次配置修改都要在所有的 ESXi 主机上进行重复操作,增加了管理成本,加大了监控和故障排除的难度,提供了三种类型的端口/端口组(虚拟机端口组、VMKernel、NIC Team): 虚拟机端口组:用于连接 ESXi 上的虚拟机,使其能够相互通信,也可以连接外部网络(如果没有接入 vmnic,则只能在单台 ESXi 主机内部进行通信)。 VMKernel:用于 ESXi 主机通过网络连接提供 vSphere 的高级功能。 NIC Team:用于将多个 vmnic 同时接入同一个端口/端口组,增加吞吐量,并在出现故障时可以提供链路冗余。
小手冰凉
2019/09/10
2.7K0
创建并管理 ESXi 网络
MySQL 创建用户并授权
假如你在给用户'jack'@'%'授权的时候是这样的(或类似的):GRANT SELECT ON test.user TO 'jack'@'%',则在使用 REVOKE SELECT ON . FROM 'jack'@'%'; 命令并不能撤销该用户对 test 数据库中 user 表的 SELECT 操作。相反,如果授权使用的是 GRANT SELECT ON . TO 'jack'@'%'; 则 REVOKE SELECT ON test.user FROM 'jack'@'%'; 命令也不能撤销该用户对 test 数据库中 user 表的 Select 权限。 具体信息可以用命令 SHOW GRANTS FOR 'jack'@'%'; 查看。
用户4988376
2021/08/10
6.4K0
TIDB创建用户并授权
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100321.html原文链接:
全栈程序员站长
2021/05/19
1.1K0
oracle创建用户并授权
oracle提供三种标准角色(role):connect/resource和dba.
全栈程序员站长
2022/08/27
1.3K0
MySQL查看数据库表中的重复记录并删除
上述语句看着是不是应该正常能执行删除掉用户名和手机号都相同的重复记录只保留id最小的那一条。实际执行会报如下错误:
共饮一杯无
2022/11/28
11.1K0
MySQL查看数据库表中的重复记录并删除

相似问题

从旧表创建新表并添加2个新列

26

创建SQL表并填充它

13

创建新表时Sqlite自动删除旧表

13

DataTables -从旧表中删除数据并初始化新表

21

DAX从旧表创建新表

2107
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档