android 中数据库

Android使用getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例。(getReadableDatabase()方法中会调用getWritableDatabase()方法)
其中getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用的是getWritableDatabase() 方法就会出错。

getReadableDatabase()方法则是先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。如果该问题成功解决,则只读数据库对象就会关闭,然后返回一个可读写的数据库对象。

数据库版本升级

public class DatabaseHelper extends SQLiteOpenHelper {  

    private static final String DB_NAME = "mydata.db"; // 数据库名称  
    private static final int version = 2; // 数据库版本  

    public DatabaseHelper(Context context) {  
        super(context, DB_NAME, null, version);  
    }  

    @Override  
    public void onCreate(SQLiteDatabase db) {  
        String sql = "create table user(id integer primary key autoincrement , username varchar(20), password varchar(60));";  
        db.execSQL(sql);  
    }  

    @Override  
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
        if (oldVersion == 1 && newVersion == 2) {  
            // 从版本1到版本2时,增加了一个字段 desc  
            String sql = "alter table [user] add [desc] nvarchar(300)";  
            db.execSQL(sql);  
        }  
    }  
}  

如果数据库结构变化比较大,要做彻底的升级

public class DatabaseHelper extends SQLiteOpenHelper {  

    private static final String DB_NAME = "mydata.db"; // 数据库名称  
    private static final int version = 2; // 数据库版本  

    public DatabaseHelper(Context context) {  
        super(context, DB_NAME, null, version);  
    }  

    @Override  
    public void onCreate(SQLiteDatabase db) {  
        String sql = "create table user(id integer primary key autoincrement , username varchar(20), password varchar(60));";  
        db.execSQL(sql);  
    }  

    @Override  
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
        //如果本次升级数据库完全变化很大,需要删除旧版本,建立新版本;  
        if (oldVersion == 1 && newVersion == 2) {  
            db.execSQL("drop table user;");  
            //自动调用onCreate  
        }  
    }  
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值