美文网首页数据库知识
Android数据存储 - SQLite

Android数据存储 - SQLite

作者: 谷鸽不爱吃稻谷 | 来源:发表于2017-01-02 08:45 被阅读122次

    一、环境

    1. 安卓系统:4.2
    2. 操作系统:Win 8.1
    3. 工具:Android Studio

    二、SQLite操作

    1. 新建一个辅助类继承自 SQLiteOpenHelper,来管理数据库的创建和版本的管理。要使用它必须实现它的onCreate(SQLiteDatabase),onUpgrade(SQLiteDatabase, int, int)方法。
        onCreate:当数据库第一次被建立的时候被执行,例如创建表,初始化数据等。
        onUpgrade:当数据库需要被更新的时候执行,例如删除久表,创建新表。
    public class DBHelper extends SQLiteOpenHelper {    
            private Context context;    
            public static final int VERSION = 1;    
            public static final String CREATE_SCHEDULE = "create table schedule(" +            
                //primary key 将id列设为主键,autoincrement表示id列是自增长的            
                "id integer primary key autoincrement," +            
                "title text," +            
                "remark text," +            
                "date text," +            
                "starttime text," +            
                "endtime text," +            
                "istip text)";    
    
            public DBHelper(Context context, String name, CursorFactory factory, int version) {        
                super(context, name, factory, version);        
                this.context = context;    
            }    
    
            @Override    
            public void onCreate(SQLiteDatabase sqLiteDatabase) {        
                //在数据库创建时,创建表
                sqLiteDatabase.execSQL(CREATE_SCHEDULE);       
                Log.v("DBHelper:", "create Database------------->");    
            }    
    
            @Override    
            public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {        
                Log.v("DBHelper:", "create Database------------->");    
            }
    }
    
    1. 新建一个对数据库进行操作的类(Schedule 是自定义的 model)
    public class DBTool {    
            private final String TAG = "DBTools:";    
            private DBHelper dbHelper;    
    
            public DBTool(Context context){        
                dbHelper = new DBHelper(context,"schedule.db",null,1);    
            }
    
            //根据 Map 里的查询条件查询记录
            public List listByMap(Map params){        
                String sql = "select * from schedule where ";        
                Set<String> keySet = params.keySet();        
                for(String k : keySet){            
                    sql += k + " = " + params.get(k) + " and ";        
                }        
                sql = sql.substring(0, sql.length()-5) + " order by starttime";        
                Log.v(TAG, sql);        
                List list = new ArrayList();        
                //得到一个可写的数据库        
                SQLiteDatabase db = dbHelper.getWritableDatabase();        
                //查询获得游标        
                Cursor cursor = db.rawQuery(sql, null);        
                //判断游标是否为空        
                if(cursor.moveToFirst()) {            
                    //遍历游标    
                    while(!cursor.isAfterLast()){                
                        Schedule schedule = new Schedule();                
                        //获得ID                
                        schedule.id = cursor.getInt(cursor.getColumnIndex("id"));                
                        //获得事件                
                        schedule.title = cursor.getString(cursor.getColumnIndex("title"));                
                        //获得备注                
                        schedule.remark = cursor.getString(cursor.getColumnIndex("remark"));                
                        //获得日期                
                        schedule.date = cursor.getString(cursor.getColumnIndex("date"));                
                        //获得开始时间                
                        schedule.starttime = cursor.getString(cursor.getColumnIndex("starttime"));                
                        //获得结束时间                
                        schedule.endtime = cursor.getString(cursor.getColumnIndex("endtime"));                
                        //获得是否提醒                
                        schedule.istip = cursor.getString(cursor.getColumnIndex("istip"));                
                        Log.v(TAG, schedule.id+"@");                
                        //添加日程到列表                
                        list.add(schedule);                
                        cursor.moveToNext();            
                    }        
                }        
                cursor.close();        
                db.close();        
                return list;    
            }    
    
            //根据对象 id 获取记录
            public Schedule getById(int id){        
                Schedule schedule = new Schedule();        
                String sql = "select * from schedule where id = " + id;        
                //得到一个可写的数据库        
                SQLiteDatabase db = dbHelper.getWritableDatabase();        
                //查询获得游标        
                Cursor cursor = db.rawQuery(sql, null);        
                //判断游标是否为空        
                if (cursor.moveToFirst()) {            
                    //游标获取第一个结果            
                    cursor.move(0);            
                    //获得ID            
                    schedule.id = cursor.getInt(cursor.getColumnIndex("id"));            
                    //获得事件            
                    schedule.title = cursor.getString(cursor.getColumnIndex("title"));            
                    //获得备注           
                    schedule.remark = cursor.getString(cursor.getColumnIndex("remark"));            
                    //获得日期            
                    schedule.date = cursor.getString(cursor.getColumnIndex("date"));            
                    //获得开始时间            
                    schedule.starttime = cursor.getString(cursor.getColumnIndex("starttime"));            
                    //获得结束时间            
                    schedule.endtime = cursor.getString(cursor.getColumnIndex("endtime"));            
                    //获得是否提醒            
                    schedule.istip = cursor.getString(cursor.getColumnIndex("istip"));        
                }        
                cursor.close();        
                db.close();        
                return schedule;    
            }    
    
            //添加记录    
            public void add(Schedule schedule){        
                //得到一个可写的数据库        
                SQLiteDatabase db = dbHelper.getWritableDatabase();        
                //实例化常量值        
                ContentValues cValue = new ContentValues();        
                //添加事件        
                cValue.put("title", schedule.title);        
                //添加备注        
                cValue.put("remark", schedule.remark);        
                //添加日期        
                cValue.put("date", schedule.date);        
                //添加开始时间        
                cValue.put("starttime", schedule.starttime);        
                //添加结束时间        
                cValue.put("endtime", schedule.endtime);        
                //添加是否提醒        
                cValue.put("istip", schedule.istip);        
                //调用insert()方法插入数据        
                long id = db.insert("schedule",null,cValue);        
                Log.v(TAG, ""+id);        
                db.close();    
            }    
    
            //删除记录    
            private void delById(Schedule schedule){        
                //得到一个可写的数据库        
                SQLiteDatabase db = dbHelper.getWritableDatabase();        
                //删除SQL语句        
                String sql = "delete from schedule where id = "+schedule.id;        
                //执行SQL语句        
                db.execSQL(sql);       
                db.close();    
            }    
    
            //修改记录    
            public void updateById(Schedule schedule){        
                //得到一个可写的数据库        
                SQLiteDatabase db = dbHelper.getWritableDatabase();        
                //修改SQL语句        
                String sql = "update schedule set " +                
                    "title = " + schedule.title + " " +                
                    "remark = " + schedule.remark + " " +                
                    "date = " + schedule.date + " " +                
                    "starttime = " + schedule.starttime + " " +                
                    "endtime = " + schedule.endtime + " " +                
                    "istip = " + schedule.istip + " " +                
                    "where " +                
                    "id = "+schedule.id;        
                //执行SQL语句        
                db.execSQL(sql);        
                db.close();    
            }
    }
    
    1. Activity 调用 DBTool

    三、开发时查看 SQLite 的数据

    1. 虚拟机必须开启。
    2. 打开命令符窗口,右击“开始菜单”--》点击“运行”--》输入“cmd”。
    3. 打开 adb 工具,在命令符窗口输入“adb shell”。
    4. 进入项目的数据库文件夹,在 adb shell 下,输入“cd data/data/项目的包名/databases”。
    5. 进入数据库,在 adb shell 下,输入“sqlite3 数据库名”。
    6. 利用 sql 语句对数据库进行操作。

    相关文章

      网友评论

        本文标题:Android数据存储 - SQLite

        本文链接:https://www.haomeiwen.com/subject/gkhwvttx.html