Sqlite是Android内置的一个轻量级数据库,具备和普通数据库的、增删改查、和事物的功能。
- 使用
public class TestSqlHelper extends SQLiteOpenHelper {
private static final int DB_VERSION = 1;//版本号
private static final String DB_NAME = "myTest.db";//数据库名称
public static final String TABLE_NAME = "Orders";
public TestSqlHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);//调用super创建数据库
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
Log.i("jinwie", "onCreate");
String sql = "create table if not exists " + TABLE_NAME +
" (Id integer primary key, CustomName text, OrderPrice integer, Country text)";
sqLiteDatabase.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
Log.i("jinwie",
"onUpgrade**" + "oldVersion=" + oldVersion + "----newVersion=" +
newVersion);
String sql = "DROP TABLE IF EXISTS " + TABLE_NAME;
sqLiteDatabase.execSQL(sql);
onCreate(sqLiteDatabase);
}
}
public class SqlDao {
private Context mContext;
private TestSqlHelper mTestSqlHelper;
SQLiteDatabase db;
public SqlDao(Context context) {
this.mContext = context;
mTestSqlHelper = new TestSqlHelper(context);
db = mTestSqlHelper.getWritableDatabase();
db.beginTransaction();
db.execSQL("insert into " + TestSqlHelper.TABLE_NAME +
" (Id, CustomName, " +
"OrderPrice, Country) values (1, 'Arc', 100, 'China')");
db.execSQL("insert into " + TestSqlHelper.TABLE_NAME +
" (Id, CustomName, OrderPrice, Country) values (2, 'Bor', 200, 'USA')");
db.execSQL("insert into " + TestSqlHelper.TABLE_NAME +
" (Id, CustomName, OrderPrice, Country) values (3, 'Cut', 500, 'Japan')");
db.execSQL("insert into " + TestSqlHelper.TABLE_NAME +
" (Id, CustomName, OrderPrice, Country) values (4, 'Bor', 300, 'USA')");
db.execSQL("insert into " + TestSqlHelper.TABLE_NAME +
" (Id, CustomName, OrderPrice, Country) values (5, 'Arc', 600, 'China')");
db.execSQL("insert into " + TestSqlHelper.TABLE_NAME +
" (Id, CustomName, OrderPrice, Country) values (6, 'Doom', 200, 'China')");
db.setTransactionSuccessful();
}
关于数据库升级
有时候我们设计数据库的时候不可能考虑的很全面,后期可能会对数据库添加表、增加和删除字段的操作。这个时候我们就需要升级数据库了。
方案
如果升级数据库需要保留老版本的数据库,这种情况需要用到 onUpgrade这个方法了,这是系统遇到数据库版本高于当前安装的数据库版本会调用的,我们可以在这个方法里面进行数据库的逻辑操作。 一般来说升级数据库无非就是增加修改字段和表结构,简单点我们可以直接使用 SQL来添加新字段,如果是新表那么久在对应的版本去执行创建新表的逻辑。 或者直接把老表的数据插入新表,然后在删除旧表。
方案添加新表|新增字段:version 1<2
创建新表然后把原先表里面的数据重新插入到表中,新加字段给定默认值,然后在删除旧表。 或者直接添加一个新的字段这样不会影响老的数据
方案添加新表|跨版本升级:version 1<3
这种情况onUpgrade会调用多次,给定多个判断然后进行版本的处理
@Override
public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion, int newVersion) {
switch (newVersion) {
case 2:
db.execSQL(create3);
break;
case 1:
db.execSQL(create2);
break;
}