微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sqlite不同数据库的表数据复制

需求:

  有两个不同的sqlite数据库 A、B,需要将B数据库中的表复制到A数据库中去。

解决办法:

  (1)使用软件:sqlite Expert Personal 3;

  (2)操作步骤:

    a) 在软件sqlite Expert Personal 3中打开 A、B数据库

    b) 选择A数据库,点击鼠标右键,找到“Attach Database”选项,选择该项执行;

    c) 在弹出的“文件选择”界面中,选择B数据库文件,点击“确认”按钮;

    d) 在弹出的对话框中,先确认选择的数据库文件是否正确。如果正确,点击“OK”按钮;

    此时,A、B两个数据库间的关系已建立。

    注:此步骤可用sqlite语句执行。具体代码见参考资料网址:http://topic.csdn.net/u/20090609/11/46123755-8a9f-4b28-a6bf-3bdee3bac8e8.html

C:\temp>sqlite3 db1
sqlite version 3.6.7
Enter ".help" for instructions
Enter sql statements terminated with a ";"
sqlite> .tables
t1  tx
sqlite> select * from t1;
1|A
2|B
sqlite> .q

C:\temp>sqlite3 db2
sqlite version 3.6.7
Enter ".help" for instructions
Enter sql statements terminated with a ";"
sqlite> .tables
sqlite> ATTACH DATABASE db1 as db1;
sqlite> select * from db1.t1;
1|A
2|B
sqlite> create table t2 as select * from db1.t1;
sqlite> select * from t2;
1|A
2|B
sqlite>

  (3)选择A数据库,在sqlite Expert Personal 3中找到执行sql语句的“sql选项卡”界面,执行“create table 表名称 as select * from B.要复制的表的名称;”;

  至此,sqlite中不同数据库间复制表操作已完成

然而,上述操作后会有一个关键问题:B中被复制的表中的主键设置不能被复制。意即,B中有主键的表被复制到A表中后,原来被设置为主键的字段不再为主键字段。注:表创建好后不能修改主键原因,请参考此处:http://stackoverflow.com/questions/946011/sqlite-add-primary-key

解决上述问题的方法

    Example:要复制B数据库中的“B_table_test”表;

   a)根据“B_table_test”表的结构,在A表中创建相同表结构的“A_table_test”(包括主键设置);

   b)执行上述“解决办法”中的第二步“(2)”中的操作;

   c )选择A数据库,执行“INSERT INTOA_table_test SELECT * FROM B.B_table_test”;

   至此,sqlite 数据库中表复制时,主键不能被复制问题被解决

结合以上描述,则可完成Android sqlite 不同数据库之间表复制问题。


如果用expert工具,提示外键冲突,可以先将外键删除,执行完sql复制数据后,再加上外键。

原文地址:https://www.jb51.cc/sqlite/199511.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐