缠丝猫 发表于 2024-9-18 04:22:24

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下找到该数据库
https://i-blog.csdnimg.cn/blog_migrate/04dcb78cedf9ad7f7b324d7f4e08e1aa.png
步骤4.补全代码


[*]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;
      }

    }
}

[*]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();
    }
}

[*]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";//表名
}

[*]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();
    }
}
天生的数据库截图:
https://i-blog.csdnimg.cn/blog_migrate/823a13e0467fff176c6cec79d3dd6be9.png
三、SqLite数据库中的事务

事务具备安全性和高效性
安全性:可以保持数据的同等,好比可以办理转账的时候停电等突发情况,账号数据不统一问题
高效性:使用事务,代码实行速度更快
https://i-blog.csdnimg.cn/blog_migrate/5699e44d80c9304099a3cc0006d3044c.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Android中的数据库——SqLite