String name = cr.getString(cr.getColumnIndex(“CustomName”));
Log.e(“owen”, “name:” + name);
String country = cr.getString(cr.getColumnIndex(“Country”));
Log.e(“owen”, “country:” + country);
}
cr.close();
db.close();
#####数据库的迁移
可以分一下几个步骤迁移数据库
1、 将表名改成临时表
ALTER TABLE Order RENAME TO _Order;
2、创建新表
CREATETABLE Test(Id VARCHAR(32) PRIMARY KEY ,CustomName VARCHAR(32) NOTNULL , Country VARCHAR(16) NOTNULL);
3、导入数据
INSERTINTO Order SELECT id, “”, Age FROM _Order;
4、删除临时表
DROPTABLE _Order;
通过以上四个步骤,就可以完成旧数据库结构向新数据库结构的迁移,并且其中还可以保证数据不会因为升级而流失。 当然,如果遇到减少字段的情况,也可以通过创建临时表的方式来实现。
实现代码如下:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (newVersion == 2) {
char str = ‘"’;
db.beginTransaction();
db.execSQL(“ALTER TABLE Order RENAME TO _Order”);
db.execSQL(“CREATE TABLE Order(Id integer primary key autoincrement , CustomName VARCHAR(20) NOT NULL,”
- " Country VARCHAR(32) NOT NULL , OrderPrice VARCHAR(16) NOT NULL)");
db.execSQL("INSERT INTO Order SELECT Id, " + str + str - “, CustomName, OrderPrice FROM _Order”);
db.setTransactionSuccessful();
db.endTransaction();
}
}
多个数据库版本的升级
假如我们开发的程序已经发布了两个版本:V1.0,V2.0,我们正在开发V3.0。版本号分别是1,2,3。对于这种情况,我们应该如何实现升级? 用户的选择有:
V1.0 -> V3.0 DB 1 -> 2
V2.0 -> V3.0 DB 2 -> 3
数据库的每一个版本所代表的数据库必须是定义好的,比如说V1.0的数据库,它可能只有两张表TableA和TableB,如果V2.0要添加一张表TableC,如果V3.0要修改TableC,数据库结构如下:
V1.0 —> TableA, TableB V1.2 —> TableA, TableB, TableC V1.3 —> TableA, TableB, TableC (Modify)
代码如下:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (1 == oldVersion) {
String sql = “Create table C…”;
db.execSQL(sql);
oldVersion = 2;
}
if (2 == oldVersion) {
//modify C
oldVersion = 3;
}
}
导入已有数据库
/**
- Created by Owen Chan
- On 2017-09-26.
*/
public class DbManager {
public static final String PACKAGE_NAME = “com.example.sql”;
public static final String DB_NAME = “table.db”;
public static final String DB_PATH = “/data/data/” + PACKAGE_NAME;
private Context mContext;
public DbManager(Context mContext) {
this.mContext = mContext;
}
public SQLiteDatabase openDataBase() {
return SQLiteDatabase.openOrCreateDatabase(DB_PATH + “/” + DB_NAME, null);
}
public void importDB() {
File file = new File(DB_PATH + “/” + DB_NAME);
if (!file.exists()) {
try {
FileOutputStream out = new FileOutputStream(file);
int buffer = 1024;
InputStream in = mContext.getResources().openRawResource(R.raw.xxxx);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
最后
针对Android程序员,我这边给大家整理了一些资料,包括不限于高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!
资料领取:点赞免费获取Android IOC架构设计
领取获取往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、混合式开发(ReactNative+Weex)全方面的Android进阶实践技术,群内还有技术大牛一起讨论交流解决问题。
I、性能优化、架构师课程、混合式开发(ReactNative+Weex)全方面的Android进阶实践技术,群内还有技术大牛一起讨论交流解决问题。**
[外链图片转存中…(img-irUQlAd5-1711382399833)]