• andorid(3) 使用sqllite进行数据持久化


    1.概览

    1.sqlite依赖于继承SQLiteOpenHelper类,对onCreate()和onUpgrade()的重写,onCreate()会在检测到在数据库未创建的时候才调用去该接口创建, SQLiteOpenHelper构造时需传入一个int version变量,该变量改变的时候就会调用onUpgrade()进行重新升级.

    2.正文

    2.1 sqlite的创建和初始化

    public class DBHelper extends SQLiteOpenHelper {
        Context mcontext;
        private static String createTaskName="create table task_name(" +
                "id integer primary key autoincrement," +
                "name varchar(16))";
    
    
        public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
            super(context, name, factory, version);
            this.mcontext=context;
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(createTaskName);
            Toast.makeText(mcontext,"task_name数据库已更新",Toast.LENGTH_SHORT).show();
            Log.i("info:", "task_name数据库已创建");
         
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("drop table if exists task_name");
            onCreate(db);
            Log.i("info:", "task_time_info数据库已创建");
            Toast.makeText(mcontext,"数据库已更新",Toast.LENGTH_SHORT).show();
        }
    }
    

    可见上文,创建了一个task_name的表, 在类DBHelper的构造函数中可以看到传入了一个version, 这是用来做当前数据库版本管理的,onCreate()会在检测到在数据库未创建的时候才调用去该接口创建, SQLiteOpenHelper构造时需传入一个int version变量,该变量改变的时候就会调用onUpgrade()进行重新升级.,该变量改变的时候就会调用onUpgrade()进行删表重新创建

    2.2 sqlite的CURD的使用

    上面介绍完了数据库的创建与更新,下面的例子演示如何实际使用

    public class DBOperatorHelper {
        public String dbName = "TimeMaster.db";
        public int dbVersion = 5;
    
        public DBHelper dbHelper;
        public SQLiteDatabase db;
    
        DBOperatorHelper(Context context){
            dbHelper = new DBHelper(context, dbName, null, dbVersion);
            db = dbHelper.getWritableDatabase();
        }
    
        void deleteTaskName(){
               db.delete("task_name", "id=? and name=?", new String[]{"1", "study"});
        }
    
        void showAllTaskName(){
            Cursor cursor = db.query("task_name", null, "name = ?", new String[]{task_name},
                        null, null, null, null);
            for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
                Sting name =  cursor.getString(cursor.getColumnIndex("name"))
                Log.i("info:", "name is "+ name);
            }
        }
        
        void insertTaskName(){
            ContentValues values = new ContentValues();
            values.put("name", "study");
            db.insert("task_name", null, values);
    
        }
    
        void updateTaskName(){
            ContentValues values = new ContentValues();
            values.put("name", "play");
            db.update("task_name", values, "id != ? and name =?", new String[]{"1", "study"});
        }
    

    此处创建了一个TimeMaster.db的数据库,version设置为5 ;

    所有的数据库操作都依赖于SQLiteDatabase db对象,insert和updata都依赖于一个ContentValues 类型的对象,其是用来构建键值对去做update或者insert的,而select依赖于一个Cursor对象,其返回了查询的所有内容,能通过getColumnIndex("name")获取name所在的列的index, 然后通过getString或者getInt等各种方法去读取该列的值

  • 相关阅读:
    C#串口通信程序SerialPort类
    51单片机和PC串口异步通信
    Robotics ToolBox机械臂仿真
    51单片机和PC串口异步通信(续)
    谈谈FFT有何用
    volatile关键字的使用
    如何走好后面的路
    51单片机液晶显示计时器
    IDE86汇编语言环境使用
    不使用跳转的宏CV_IMIN分析
  • 原文地址:https://www.cnblogs.com/ishen/p/12665530.html
Copyright © 2020-2023  润新知