Android中的数据库——SqLite

打印 上一主题 下一主题

主题 656|帖子 656|积分 1968

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

导语:知其然,更要知其一定,对于一名安卓开辟的程序员来说,相识安卓手机体系中的存储是很告急的一部门,而sqlite就是手机自带的轻量级数据库,其作用和场景如下:


  • 购物:离线下,查看一下app的数据,有相称一部门是存储在数据库中的,可以购物APP下存储的购物车商品
  • 谈天APP:好比离线下的谈天APP,其可以缓存账号和密码
二、使用SqLite进行开辟

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

代码如下(示例):
  1. /**
  2. * 数据库的辅助类——方便更好的创建和更新数据库
  3. */
  4. public class DatabaseHelper extends SQLiteOpenHelper {
  5.     /**
  6.      *
  7.      * @param context
  8.      *  参数1:上下文  参数2:数据库名称  参数3:默认游标  参数4:版本号
  9.      */
  10.     public DatabaseHelper(@Nullable Context context) {
  11.         super(context,"database",null,1);
  12.     }
  13.     //数据库只在第一次创建的时候调用该方法
  14.     @Override
  15.     public void onCreate(SQLiteDatabase db) {
  16.         Log.d(TAG, "创建数据库: ");
  17.     }
  18.     /**
  19.      * 升级数据库版本的时候调用
  20.      * @param db The database.
  21.      * @param oldVersion The old database version.
  22.      * @param newVersion The new database version.
  23.      */
  24.     @Override
  25.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  26.         Log.d(TAG, "更新数据库: ");
  27.     }
  28. }
复制代码
主要代码:
其1:
  1. //数据库只在第一次创建的时候调用该方法
  2. @Override
  3. public void onCreate(SQLiteDatabase db) {
  4.     Log.d(TAG, "创建数据库: ");
  5. }
复制代码
该方法只在数据库database第一次创建的时候调用,可以在该方法内里编写数据库所必要的字段
  1. //1.创建字段
  2. String sql = "create table " + Constants.TABLE_NAME + "(_id integer primary key,name varchar(255),age integer,salary integer)";
  3. //2.执行sql语句
  4. db.execSQL(sql);
复制代码
其2
  1. /**
  2. * 升级数据库版本的时候调用
  3. */
  4. @Override
  5. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  6.     Log.d(TAG, "更新数据库: ");
  7. }
复制代码
该方法是在数据库进行版本更新的时候调用(只能一次性添加一个字段)
  1. String sql;
  2. switch (oldVersion){
  3.     case 1:
  4.         sql = "alter table " + Constants.TABLE_NAME + " add phone integer";//TODO 一次性只能更改一条
  5.         db.execSQL(sql);
  6.         break;
  7.     case 2:
  8.         sql="alter table " + Constants.TABLE_NAME + " add address varchar";//注意空格
  9.         db.execSQL(sql);
  10.         break;
  11.     case 3:
  12.         break;
  13. }
复制代码
步骤2.创建操作数据库的类Dao.java

  1. /**
  2. * 操作数据库的类——增删改查
  3. */
  4. public class Dao {
  5.     private static final String TAG = "Dao";
  6.     private final DatabaseHelper mHelper;
  7.     public Dao(Context context) {
  8.         //创建数据库
  9.         mHelper = new DatabaseHelper(context);
  10.     }
  11.     /**
  12.      * 插入数据   数据不要写死
  13.      */
  14.     public void insert() {
  15.    
  16.     }
  17.     /**
  18.      * 删除数据
  19.      */
  20.     public void delete() {
  21.     }
  22.     /**
  23.      * 修改数据
  24.      */
  25.     public void update() {
  26.     }
  27.     /**
  28.      * 查询数据
  29.      */
  30.     public void query() {
  31.     }
  32. }
复制代码
该类只要作用是进行增编削查操作
步骤3.创建数据库

  1. public class MainActivity extends AppCompatActivity {
  2.   
  3.     @Override
  4.     protected void onCreate(Bundle savedInstanceState) {
  5.         super.onCreate(savedInstanceState);
  6.         setContentView(R.layout.activity_main);
  7.         //创建数据库
  8.         DatabaseHelper helper=new DatabaseHelper(this);
  9.         helper.getWritableDatabase();
  10.     }
  11. }
复制代码
关键代码:
  1. //创建数据库
  2. DatabaseHelper helper=new DatabaseHelper(this);
  3. helper.getWritableDatabase();
复制代码
实行该代码事后,可以在/data/data/包名/databases下找到该数据库

步骤4.补全代码


  • DatabaseHelper类——数据库的辅助类
  1. /**
  2. 1. 数据库的辅助类——方便更好的创建和更新数据库
  3. */
  4. public class DatabaseHelper extends SQLiteOpenHelper {
  5.     private static final String TAG=DatabaseHelper.class.getSimpleName();
  6.     /**
  7.      *
  8.      * @param context
  9.      *  参数1:上下文  参数2:数据库名称  参数3:默认游标  参数4:版本号
  10.      */
  11.     public DatabaseHelper(@Nullable Context context) {
  12.         super(context,Constants.DATABASE_NAME,null,Constants.VERSION_CODE);
  13.     }
  14.     //数据库只在第一次创建的时候调用该方法
  15.     @Override
  16.     public void onCreate(SQLiteDatabase db) {
  17.         Log.d(TAG, "创建数据库: ");
  18.         //1.创建字段
  19.         String sql = "create table " + Constants.TABLE_NAME + "(_id integer primary key,name varchar(255),age integer,salary integer)";
  20.         //2.执行sql语句
  21.         db.execSQL(sql);
  22.     }
  23.     /**
  24.      * 升级数据库的时候调用
  25.      * @param db The database.
  26.      * @param oldVersion The old database version.
  27.      * @param newVersion The new database version.
  28.      */
  29.     @Override
  30.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  31.         Log.d(TAG, "更新数据库: ");
  32.         String sql;
  33.         switch (oldVersion){
  34.             case 1:
  35.                 sql = "alter table " + Constants.TABLE_NAME + " add phone integer";//TODO 一次性只能更改一条
  36.                 db.execSQL(sql);
  37.                 break;
  38.             case 2:
  39.                 sql="alter table " + Constants.TABLE_NAME + " add address varchar";//注意空格
  40.                 db.execSQL(sql);
  41.                 break;
  42.             case 3:
  43.                 break;
  44.         }
  45.     }
  46. }
复制代码

  • Dao操作数据库的类——增编削查
  1. /**
  2. 1. 操作数据库的类——增删改查
  3. */
  4. public class Dao {
  5.     private static final String TAG = "Dao";
  6.     private final DatabaseHelper mHelper;
  7.     public Dao(Context context) {
  8.         //创建数据库
  9.         mHelper = new DatabaseHelper(context);
  10.     }
  11.     /**
  12.      * 插入数据   数据不要写死
  13.      */
  14.     public void insert() {
  15.         SQLiteDatabase db = mHelper.getWritableDatabase();//等会测试一下这里是否可以重用
  16.         ContentValues contentValues = new ContentValues();//ContentValues存储数据库数据的类
  17.         contentValues.put("_id", 2);
  18.         contentValues.put("name", "jie");
  19.         contentValues.put("age", 28);
  20.         contentValues.put("salary", 200);
  21.         contentValues.put("phone", 2122);
  22.         db.insert(Constants.TABLE_NAME, null, contentValues);
  23.         db.close();
  24.     }
  25.    
  26.     /**
  27.      * 删除数据
  28.      */
  29.     public void delete() {
  30.         SQLiteDatabase db = mHelper.getWritableDatabase();//等会测试一下这里是否可以重用
  31.         
  32.         int deleteNums = db.delete(Constants.TABLE_NAME, null, null);
  33.         Log.d(TAG, "delete个数: "+deleteNums);
  34.         db.close();
  35.     }
  36.     /**
  37.      * 修改数据
  38.      */
  39.     public void update() {
  40.         SQLiteDatabase db = mHelper.getWritableDatabase();
  41.         ContentValues contentValues = new ContentValues();
  42.         contentValues.put("phone", "110");
  43.         String selection = "_id = ?";//符合修改条件的
  44.         String[] selectionArgs = {"1"};//指定更改后的数据
  45.         db.update(Constants.TABLE_NAME, contentValues, selection, selectionArgs);//指定某一个值更改
  46.         db.close();
  47.     }
  48.     /**
  49.      * 查询数据
  50.      */
  51.     public void query() {
  52.         SQLiteDatabase db = mHelper.getWritableDatabase();
  53.         Cursor query = db.query(Constants.TABLE_NAME, null, null, null, null, null, null);
  54.         while (query.moveToNext()){
  55.             int id = query.getInt(0);
  56.             String name = query.getString(1);
  57.             Log.d(TAG, "id===: "+id+"  name==="+name);
  58.         }
  59.         query.close();
  60.         db.close();
  61.     }
  62. }
复制代码

  • Constants ——常量类
  1. /**
  2. * 常量类
  3. */
  4. public class Constants {
  5.     public static final String DATABASE_NAME="database_name";//数据库名称
  6.     public static final int VERSION_CODE=2;//数据库版本
  7.     public static final String TABLE_NAME="database_name";//表名
  8. }
复制代码

  • MainActivity——实行程序
  1. public class MainActivity extends AppCompatActivity {
  2.     private Dao dao;
  3.     @Override
  4.     protected void onCreate(Bundle savedInstanceState) {
  5.         super.onCreate(savedInstanceState);
  6.         setContentView(R.layout.activity_main);
  7.         //创建数据库
  8.         DatabaseHelper helper=new DatabaseHelper(this);
  9.         helper.getWritableDatabase();
  10.         dao = new Dao(this);
  11.         dao.insert();
  12.     }
  13. }
复制代码
天生的数据库截图:


三、SqLite数据库中的事务

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


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

缠丝猫

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表