android数据存储—SQLite

SQLite数据库操作详解
本文详细介绍如何使用SQLiteOpenHelper类创建SQLite数据库,并演示了增删改查等基本操作。此外,还展示了如何通过KnowDB类实现数据操作的封装及复用。
  • SQLiteOpenHelper抽象类
  • 该方法通常用4个参数的构造方法
    通过得到实例后调用getWritableDatabase() || getReadableDatabase() 来创建和打开数据库!!
    ~~直接用栗子:
//这里是创建数据库帮助类
public class KnowDBOpenHelper extends SQLiteOpenHelper{
    /*
    * 创建Stories表
    * */
    public static final String CREATE_STORIES = "create table Stories("
            + "id_first integer primary key autoincrement"
            + "id text, "
            + "images text, "
            + "title text)";
           // + "two_table integer" 版成本升级后添加的

    //构造方法实例时出入的参数:第二参数:数据库名, 第三参数:null,第四参数:版本号
    public KnowDBOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_STORIES);//创建stories表
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        switch(oldVersion){
            case 1:
                db.execSQL(CREATE_TWOTABLE);
            case 2:
                db.execSQL("alter table Book add colum two_table integer");
            default:    //这里没有break! 在2版本中Book添加一列信息
        }
    }
}
  • 正常的使用
 //添加数据
        ContentValues values = new ContentValues();
        //插入第一条数据;第一个参数对应表中的列名,第二个参数,添加的数据
        values.put("id",222222);
        values.put("title","今天什么天气");
        values.put("images","http:..22...jpg");
        db.insert("Stories",null , null);
        values.clear();;
        //插入第二条数据
        values.put("id",66666);
        values.put("title","明天什么天气");
        values.put("images","http:..33...jpg");
        db.insert("Stories",null , null);

 //更新数据
          ContentValues values = new ContentValues();
          values.put("title","后天什么天气");
          values.put("images","http:....444...jpg");
          db.update("Stories",values,"id= ?",
          new String[]{"666666"});
        //更新所有 id = ?的行, ?是占位符, 在后面String[ ]中提供数据
        //所有意思是 更新id=666666 这一行的title变更为"后天什么天气" ,images 变更为"http:....444...jpg" !!

//删除数据
        db.delete("Stories",null,null);//删除表中所有内容
        db.delete("Stories","id = ?",new String[]{"222222"});//删除id = 222222这一行的所有内容!
        //也可以将id更改为 >  < 符号都行!

//查询数据
        //调用query()会返回一个Cursor 对象
        //参数依次是:表名,指定查询的 列S,指定where的约束条件,为where的中占位符提供具体的值,指定需要group by的列, 对指定group by的后的结果进一步过滤,指定结果的排序方式
        Cursor cursor = db.query("Stories",null , null,null,null,null,null);
        List<Stories> list = new ArrayList<Stories>();
        if(cursor.moveToFirst()){//光标移到第一行,有数据则返回true
            do{
                //开始遍历Cursor对象
                int     id = cursor.getInt(cursor.getColumnIndex("id"));
                String  title = cursor.getString(cursor.getColumnIndex("title"));
                String  images = cursor.getString(cursor.getColumnIndex("images"));
                Stories story = new Stories(id, title, images);
                list.add(story);//将里面的每个Stories直接添加到集合中,可以返回一个集合对象
            }while (cursor.moveToNext());//光标移到下一个位置,有数据则返回true!
        }
            cursor.close();
        return   list; 
    }
  • 下面方法是吧数据的操作封装起来使用的实战操作!!复用性!
public class KnowDB {
    //数据库名称
    public static final String DB_NAME = "myknow";
    //数据库版本
    public static final int VERSION = 1;

    private static KnowDB knowDB;
    private SQLiteDatabase db;
    /*
    * 构造方法私有化
    * */
    private KnowDB (Context context){
        KnowDBOpenHelper dbOpenHelper = new KnowDBOpenHelper(context,DB_NAME, null, VERSION);
        db = dbOpenHelper.getWritableDatabase();
    }
    /*
    * 获取KnowDB实例
    * */
    public  synchronized static KnowDB getIntance(Context context){
        if(knowDB == null){
            knowDB = new KnowDB(context);
        }
        return  knowDB ;
    }
    /*
    * 将stories存入数据库
    * */
    public void saveStories(Stories stories){
        if(stories != null){
            ContentValues values = new ContentValues();
            values.put("id", stories.getId());
            values.put("images",stories.getImages());
            values.put("title",stories.getTitle());
            db.insert("Stories", null , values);
        }
    }
    /*
    * 从数据库读取所有的Stories信息
    * */
    public List<Stories> loadStories(){
        List<Stories> list = new ArrayList<Stories>();
        Cursor cursor = db.query("Stories",null , null ,null ,null, null, null);
        if(cursor.moveToFirst()){
            do{
                Stories stories = new Stories() ;
                stories.setId(cursor.getInt(cursor.getColumnIndex("id")));
                stories.setImages(cursor.getString(cursor.getColumnIndex("images")));
                stories.setTitle(cursor.getString(cursor.getColumnIndex("title")));
                list.add(stories);

            }while (cursor.moveToNext());
            if(cursor != null){
                cursor.close();
            }
        }

        return list;
    }
    /*
    * 用于更新数据,删除原有的数据
    * */
    public void deleteStories(){
        db.delete("Stories",null ,null);
    }
}
  • 数据库也可以使用事务
KnowDBOpenHelper knowHelper = new KnowDBOpenHelper(this, "Database.db", null, 1);
        SQLiteDatabase db = knowHelper.getWritableDatabase();//这样数据库 和 表 都已经创建成功了
        db.beginTransaction();//开启事务
        try {
        db.delete("Stories",null,null);
       // if(true){
       //         throw new NullPointerException();
       // }如果这try代码中出现异常,数据是删除不成功的!!
        ContentValues values = new ContentValues();
        //插入第一条数据
        values.put("id",45862);
        values.put("title","今天什么天气");
        values.put("images","http:..22...jpg");
        db.insert("Stories",null , null);

        db.setTransactionSuccessful();//事务已经执行成功
        } catch (Exception e) {
        e.printStackTrace();
     }finally {
            db.endTransaction();//结束事务!
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值