zoukankan      html  css  js  c++  java
  • 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等各种方法去读取该列的值

  • 相关阅读:
    164 Maximum Gap 最大间距
    162 Find Peak Element 寻找峰值
    160 Intersection of Two Linked Lists 相交链表
    155 Min Stack 最小栈
    154 Find Minimum in Rotated Sorted Array II
    153 Find Minimum in Rotated Sorted Array 旋转数组的最小值
    152 Maximum Product Subarray 乘积最大子序列
    151 Reverse Words in a String 翻转字符串里的单词
    bzoj3994: [SDOI2015]约数个数和
    bzoj 4590: [Shoi2015]自动刷题机
  • 原文地址:https://www.cnblogs.com/ishen/p/12665530.html
Copyright © 2011-2022 走看看