对安卓数据库一点理解

时间:2016年10月29日
安卓的内置SQlite数据库是一款轻量级的数据库,简便实用,话不多说,说出我的一点理解。
在前几天,我想实现在不同的activity中存入同一个数据表中,并且将数据显示出来,开始的时候经过实验,发现每次存入都会申请一个数据库,并且点击一次存储一次,并不会存入一个数据表中,经过老师的点拨,发现应该使用数据库的单例模式,简而言之,就是一个类只允许实例化一次,工具类只会实例化一次,减少了很多麻烦的事情。
**
* Created by DELL on 2016/10/28.
*/

public class shopOpenhelpSQL extends SQLiteOpenHelper {
private static final String db_name = “shop_save”; //定义数据库名称
private String tb_name = “shop_table”; //定义数据表名称
private static final int version = 1; //定义版本号
private static shopOpenhelpSQL open;
SQLiteDatabase db; //数据库对象

private shopOpenhelpSQL(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)// 构造函数
{
    super(context, db_name, null, version);
}
public static shopOpenhelpSQL getInstance(Context context){
    if (open==null){
        open=new shopOpenhelpSQL(context,db_name,null,1);
    }
    return open;

}
//创建数据表
@Override
public void onCreate(SQLiteDatabase db) {
    String createTable = "CREATE TABLE IF NOT EXISTS " +
            tb_name +
            "(name VARCHAR(30), " +
            "phone VARCHAR(10), " +
            "shop_name VARCHAR(10))";
    db.execSQL(createTable);
}
 //版本升级使用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (newVersion > oldVersion) {
        db.execSQL("DROP TABLE IF EXISTS[shop_table]");
    } else {
        return;
    }
    onCreate(db);
}

}
代码解析:首先继承SQLiteOpenHelper类,这是SQLite数据库自带的数据库辅助类,继承之后需要重写onCreate函数(建立数据表的函数)和onUpgrade函数(数据库版本升级之后调用的函数)。
上面的代码段,首先是写了构造函数shopOpenhelpSQL(Context context, String name, SQLiteDatabase.CursorFactory factory, int version),
解析:String name 是数据库的名称。CursorFactory factory是工厂类,一般设为null,int version是定义的版本号。
public static shopOpenhelpSQL getInstance(Context context){}
下面是第一个页面添加的数据 MainActivity
shopOpenhelpSQL data=shopOpenhelpSQL.getInstance(MainActivity.this);
SQLiteDatabase db=data.getWritableDatabase();
ContentValues cv=new ContentValues(2);
cv.put(“name”,surname);
cv.put(“phone”,phone);
db.insert(“shop_table”,null,cv);
下面是第二个页面添加的数据SencentActivity
shopOpenhelpSQL data=shopOpenhelpSQL.getInstance(SencentActivity.this); //得到实例化的数据库对象
SQLiteDatabase db=data.getWritableDatabase(); //得到写入的权限
ContentValues cv=new ContentValues(1); //申请ContentValue对象
cv.put(“shop_name”,name_0); //标记name_0为 shop_name
db.insert(“shop_table”,null,cv); //向数据表中添加数据
但对于数据库有些别扭或者说比较难理解的地方,你建立的是数据库类,当你使用单例模式的时候,实例化一次数据库,添加数据表可以很多次,但是当你在不同的activity向数据表中添加数据的时候,它会把不同页面的数据分为不同的行。像上面的例子,我数据表建立的有三个数据分别是name,phone和shop_name,但我在第一个页面中向它添加了name和phone,在第二个页面向数据表中添加shop_name,出现的结果我使用了Stetho查看,是这样的。看图片,两个页面输入的数据分为了两行,没有填写的数据自动设为null

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值