• Android开发之sqlite数据库的练习


    一、目标

      通过employee员工类来做例子练习sqlite数据库的创建更新以及增删改查,并使用sqlite expert可视化软件来检查数据库的操作。

    二、具体步骤

      (1)创建sqlite数据库

        第一步:建立一个Help类继承sqliteOpenHelper类来创建数据库,实现SQLiteOpenHelper的接口,并添加一个构造方法。父类构造方法需要有4个参数,数据库的名字和数据库的等级另外创建一个常量类类保存,并且这种的名字一般都全部大写,Ctrl+Shift+U可以快捷全部换成大写

    /**
         *
         * @ context   上下文
         * @ name      数据库名称
         * @ factory   游标工厂
         * @ version   版本号
         */
        public DataBaseHelper( Context context) {
            super(context, Constants.DATABASE_NAME, null, Constants.DATABASE_VERSION);
        }

        其中有两个成员方法,onCreate方法会在数据库刚刚被创建的时候调用,onUpGrade方法会在数据库更新的时候被调用(newVersion>oldVersion)

    @Override
        public void onCreate(SQLiteDatabase db) {
    
            //创建数据库,第一次创建时才会调用
            //创建字段
            //Log.d(TAG,"创建数据库....");
            //sql:  create table table_name(id integer,name varchar,age integer,salary integer);
            String sql="create table "+Constants.TABLE_NAME+"(id integer,name varchar,age integer,salary integer)";
            db.execSQL(sql);
    
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            //更新数据库 只有newVersion高于oldVersion时才会调用
            //newVersion=oldVersion时不会调用
            //newVersion<oldVersion时会报错
            //
            Log.d(TAG,"升级数据库....");
            //
            String  sql;
            switch (oldVersion){
                case 1:
                    sql ="alter table "+Constants.TABLE_NAME+" add phone integer";
                    db.execSQL(sql);
                    break;
                case  2:
                    break;
            }
        }

        第二步:主函数中实例SQLiteOpenHelper类,并且调用getWriteDataBase()方法,数据库就可以创建了

         DataBaseHelper helper = new DataBaseHelper(this);
            helper.getWritableDatabase();

    创建成功的表结构:(与onCreative里面的表结构一样)

    创建成功的文件结构:

       (2)数据库升级

        数据库升级需要调用onUpGrade方法,用newVersion和oldVersion来比较判断需要添加那些内容或者进行那些操作,newVersion需要在Constants类里面更改DATABASE_VERSION才可以

    @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            //更新数据库 只有newVersion高于oldVersion时才会调用
            //newVersion=oldVersion时不会调用
            //newVersion<oldVersion时会报错
            //
            Log.d(TAG,"升级数据库....");
            //
            String  sql;
            switch (oldVersion){
                case 1:
                    sql ="alter table "+Constants.TABLE_NAME+" add phone integer";
                    db.execSQL(sql);
                    break;
                case  2:
                    break;
            }
        }

    DATABASE_VERSION升级到2之后

     

       (3)Dao层操作(SQL语句操作)

    package com.example.databasedemo;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    
    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();
    
            Dao dao =new Dao(getApplicationContext());
    //        dao.insert();
    //        dao.update();
    //        dao.query();
            dao.delete();
        }
    }
    MainActivity
    package com.example.databasedemo;
    
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.util.Log;
    
    /**
     * 这个类用于对数据库的增删改查
     */
    public class Dao {
    
        private final DatabaseHelper mHelper;
        private static final String TAG="Dao";
        public Dao(Context context){
    
            //创建数据库
            //Ctrl+Alt+F,之后加回车,创建成员变量
            mHelper = new DatabaseHelper(context);
    
        }
    
        public  void insert(){
            SQLiteDatabase db = mHelper.getWritableDatabase();
            String sql="insert into "+Constants.TABLE_NAME+"(_id,name,age,salary,phone) values(?,?,?,?,?)";
            Object []obj={1,"haohao",20,10000,1234567890};
            db.execSQL(sql,obj);
            db.close();
        }
    
        public  void delete(){
            SQLiteDatabase db = mHelper.getWritableDatabase();
            String sql="delete from "+Constants.TABLE_NAME+" where name = ?";
            Object []obj={"haohao"};
            db.execSQL(sql,obj);
            db.close();
        }
    
        public  void update(){
            SQLiteDatabase db = mHelper.getWritableDatabase();
            String sql="update "+Constants.TABLE_NAME+" set salary= ? where name = ?";
            Object []obj={20000,"haohao"};
            db.execSQL(sql,obj);
            db.close();
        }
    
        public  void query(){
            SQLiteDatabase db = mHelper.getWritableDatabase();
            String sql="select * from "+Constants.TABLE_NAME+" where name = ?";
            String []obj={"haohao"};
            Cursor cursor = db.rawQuery(sql, obj);
            while (cursor.moveToNext()){
                String name = cursor.getString(cursor.getColumnIndex("name"));
                String age = cursor.getString(cursor.getColumnIndex("age"));
                Log.d(TAG,"名字:"+name+"年龄:"+age);
            }
            cursor.close();
            db.close();
        }
    }
    Dao

    三、心得体会

    总的来说今天的收获还是不小的,sqlite的操作语句和mysql的类似所以不难理解,但是创建数据库确实方便很多,有已经封装好的类可以直接调用创建,非常方便。另外今天我学到的最有用的东西我认为是常量类的创建,把常量全部放到一个类里面,既方便了之后的迭代,又方便了统一的调用更改。

  • 相关阅读:
    剑指offer--26.顺时针打印矩阵
    剑指offer--25.二叉树的镜像
    剑指offer--24.树的子结构
    剑指offer--23.合并两个排序的链表
    剑指offer--22.反转链表
    剑指offer--21.链表中倒数第k个结点
    剑指offer--20.矩形覆盖
    剑指offer--19.重建二叉树
    剑指offer--18.从尾到头打印链表
    剑指offer--17.第一个只出现一次的字符
  • 原文地址:https://www.cnblogs.com/suanai/p/12271577.html
Copyright © 2020-2023  润新知