在Android开发项目中,遇到这样的一个问题,在软件升级时,要把旧数据库内的数据拷贝到新的数据库中,
在数据库内,表之间的拷贝大家都知道,很简单
insert into table_name (aa,bb,cc) select aa,bb,cc from table_name.
但在Android中,数据库间的数据怎么拷贝呢?在mysql中,可以直接用db_name.table_name的方式,查找另一个数据库的内容,实现如下:
insert into table_name (aa,bb,cc) select aa,bb,cc from db_name.table_name.
在Android中呢?
在Android中,我们实现数据库时,常常使用public class SqliteHelper extends SQLiteOpenHelper 这样的方式进行数据库操作。
现在我们通过三步方式实现数据库间表复制
第一步
//初始化创建数据库
sqliteHelper = new SqliteHelper(.....);
//获取数据库对象
SQLiteDatabase db = sqliteHelper.getWritableDatabase();
第二步数据库附加
把你你想要拷贝数据的数据库附加到当前数据库中,这一步可是关键
//使用attach database ? as userdata,附加数据库
db.execSQL("attach database ? as userdata", new String[] { context.getDatabasePath("userdata.db").getPath() });
第三步表数据拷贝
到了这里,就可以尽情的做你想做的事了。
db.beginTransaction();
String sql = "INSERT INTO " + UserDataMeta.ContactsTable.TABLE_NAME + "("
+ UserDataMeta.ContactsTable._ID + ", "
+ UserDataMeta.ContactsTable.JID + ", "
+ UserDataMeta.ContactsTable.NAME + ", "
+ UserDataMeta.ContactsTable.PINYIN + ", "
+ UserDataMeta.ContactsTable.AVATARID + ", "
+ UserDataMeta.ContactsTable.STATUS + ", "
+ UserDataMeta.ContactsTable.GROUPS + ", "
+ UserDataMeta.ContactsTable.SIGNATURE +") "
+ " SELECT " + UserDataMeta.ContactsTable._ID + ", "
+ UserDataMeta.ContactsTable.JID + ", "
+ UserDataMeta.ContactsTable.NAME + ", "
+ UserDataMeta.ContactsTable.PINYIN + ", "
+ UserDataMeta.ContactsTable.AVATARID + ", "
+ UserDataMeta.ContactsTable.STATUS + ", "
+ UserDataMeta.ContactsTable.GROUPS + ", "
+ UserDataMeta.ContactsTable.SIGNATURE + ""
+ " FROM userdata." + UserDataMeta.ContactsTable.TABLE_NAME;
db.execSQL(sql);
db.setTransactionSuccessful();
欢迎转载,转载时请注明原文地址