Android中的数据库——SqLite

一、Android应用中的数据库——SqLite

导语:知其然,更要知其必然,对于一名安卓开发的程序员来说,了解安卓手机系统中的存储是很重要的一部分,而sqlite就是手机自带的轻量级数据库,其作用和场景如下:

  • 购物:离线下,查看一下app的数据,有相当一部分是存储在数据库中的,可以购物APP下存储的购物车商品
  • 聊天APP:比如离线下的聊天APP,其可以缓存账号和密码

二、使用SqLite进行开发

注:在SqLite的创建使用中,SQLiteOpenHelper类是必不可少的,它用于帮助我们简化创建和更新数据库版本的操作,其使用也很简单,需要创建一个类其继承即可。

步骤1.创建自定义类DatabaseHelper去继承SQLiteOpenHelper

代码如下(示例):

/**
 * 数据库的辅助类——方便更好的创建和更新数据库
 */
public class DatabaseHelper extends SQLiteOpenHelper {

    /**
     *
     * @param context
     *  参数1:上下文  参数2:数据库名称  参数3:默认游标  参数4:版本号
     */
    public DatabaseHelper(@Nullable Context context) {
        super(context,"database",null,1);
    }

    //数据库只在第一次创建的时候调用该方法
    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d(TAG, "创建数据库: ");
    }

    /**
     * 升级数据库版本的时候调用
     * @param db The database.
     * @param oldVersion The old database version.
     * @param newVersion The new database version.
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.d(TAG, "更新数据库: ");
    }
}

主要代码:
其1:

//数据库只在第一次创建的时候调用该方法
@Override
public void onCreate(SQLiteDatabase db) {
    Log.d(TAG, "创建数据库: ");
}

该方法只在数据库database第一次创建的时候调用,可以在该方法里面编写数据库所需要的字段

//1.创建字段
String sql = "create table " + Constants.TABLE_NAME + "(_id integer primary key,name varchar(255),age integer,salary integer)";
//2.执行sql语句
db.execSQL(sql);

其2

/**
 * 升级数据库版本的时候调用
 */
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    Log.d(TAG, "更新数据库: ");
}

该方法是在数据库进行版本更新的时候调用(只能一次性添加一个字段)

String sql;
switch (oldVersion){
    case 1:
        sql = "alter table " + Constants.TABLE_NAME + " add phone integer";//TODO 一次性只能更改一条
        db.execSQL(sql);
        break;
    case 2:
        sql="alter table " + Constants.TABLE_NAME + " add address varchar";//注意空格
        db.execSQL(sql);
        break;
    case 3:
        break;
}

步骤2.创建操作数据库的类Dao.java

/**
 * 操作数据库的类——增删改查
 */
public class Dao {
    private static final String TAG = "Dao";
    private final DatabaseHelper mHelper;

    public Dao(Context context) {
        //创建数据库
        mHelper = new DatabaseHelper(context);
    }

    /**
     * 插入数据   数据不要写死
     */
    public void insert() {
    
    }

    /**
     * 删除数据
     */
    public void delete() {

    }

    /**
     * 修改数据
     */
    public void update() {

    }

    /**
     * 查询数据
     */
    public void query() {

    }
}

该类只要作用是进行增删改查操作

步骤3.创建数据库

public class MainActivity extends AppCompatActivity {

  

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //创建数据库
        DatabaseHelper helper=new DatabaseHelper(this);
        helper.getWritableDatabase();
    }
}

关键代码:

//创建数据库
DatabaseHelper helper=new DatabaseHelper(this);
helper.getWritableDatabase();

执行该代码过后,可以在/data/data/包名/databases下找到该数据库
在这里插入图片描述

步骤4.补全代码

  1. DatabaseHelper类——数据库的辅助类
/**
 1. 数据库的辅助类——方便更好的创建和更新数据库
 */
public class DatabaseHelper extends SQLiteOpenHelper {

    private static final String TAG=DatabaseHelper.class.getSimpleName();
    /**
     *
     * @param context
     *  参数1:上下文  参数2:数据库名称  参数3:默认游标  参数4:版本号
     */
    public DatabaseHelper(@Nullable Context context) {
        super(context,Constants.DATABASE_NAME,null,Constants.VERSION_CODE);
    }

    //数据库只在第一次创建的时候调用该方法
    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.d(TAG, "创建数据库: ");
        //1.创建字段
        String sql = "create table " + Constants.TABLE_NAME + "(_id integer primary key,name varchar(255),age integer,salary integer)";
        //2.执行sql语句
        db.execSQL(sql);
    }

    /**
     * 升级数据库的时候调用
     * @param db The database.
     * @param oldVersion The old database version.
     * @param newVersion The new database version.
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.d(TAG, "更新数据库: ");

        String sql;
        switch (oldVersion){
            case 1:
                sql = "alter table " + Constants.TABLE_NAME + " add phone integer";//TODO 一次性只能更改一条
                db.execSQL(sql);
                break;
            case 2:
                sql="alter table " + Constants.TABLE_NAME + " add address varchar";//注意空格
                db.execSQL(sql);
                break;
            case 3:
                break;
        }

    }
}
  1. Dao操作数据库的类——增删改查
/**
 1. 操作数据库的类——增删改查
 */
public class Dao {
    private static final String TAG = "Dao";
    private final DatabaseHelper mHelper;

    public Dao(Context context) {
        //创建数据库
        mHelper = new DatabaseHelper(context);
    }

    /**
     * 插入数据   数据不要写死
     */
    public void insert() {
        SQLiteDatabase db = mHelper.getWritableDatabase();//等会测试一下这里是否可以重用

        ContentValues contentValues = new ContentValues();//ContentValues存储数据库数据的类
        contentValues.put("_id", 2);
        contentValues.put("name", "jie");
        contentValues.put("age", 28);
        contentValues.put("salary", 200);
        contentValues.put("phone", 2122);
        db.insert(Constants.TABLE_NAME, null, contentValues);
        db.close();
    }
    
    /**
     * 删除数据
     */
    public void delete() {
        SQLiteDatabase db = mHelper.getWritableDatabase();//等会测试一下这里是否可以重用
        
        int deleteNums = db.delete(Constants.TABLE_NAME, null, null);
        Log.d(TAG, "delete个数: "+deleteNums);
        db.close();
    }

    /**
     * 修改数据
     */
    public void update() {
        SQLiteDatabase db = mHelper.getWritableDatabase();

        ContentValues contentValues = new ContentValues();
        contentValues.put("phone", "110");
        String selection = "_id = ?";//符合修改条件的
        String[] selectionArgs = {"1"};//指定更改后的数据

        db.update(Constants.TABLE_NAME, contentValues, selection, selectionArgs);//指定某一个值更改
        db.close();
    }

    /**
     * 查询数据
     */
    public void query() {
        SQLiteDatabase db = mHelper.getWritableDatabase();

        Cursor query = db.query(Constants.TABLE_NAME, null, null, null, null, null, null);
        while (query.moveToNext()){
            int id = query.getInt(0);
            String name = query.getString(1);
            Log.d(TAG, "id===: "+id+"  name==="+name);
        }
        query.close();
        db.close();
    }
}
  1. Constants ——常量类
/**
 * 常量类
 */
public class Constants {
    public static final String DATABASE_NAME="database_name";//数据库名称
    public static final int VERSION_CODE=2;//数据库版本
    public static final String TABLE_NAME="database_name";//表名
}
  1. MainActivity——执行程序
public class MainActivity extends AppCompatActivity {

    private Dao dao;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //创建数据库
        DatabaseHelper helper=new DatabaseHelper(this);
        helper.getWritableDatabase();

        dao = new Dao(this);
        dao.insert();
    }
}

生成的数据库截图:
在这里插入图片描述


三、SqLite数据库中的事务

事务具备安全性和高效性
安全性:可以保持数据的一致,比如可以解决转账的时候停电等突发情况,账号数据不统一问题
高效性:使用事务,代码执行速度更快
在这里插入图片描述

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值