android数据存储—SQLite

来源:互联网 发布:centos安装zlib 编辑:程序博客网 时间:2024/05/22 14:18
  • 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();//结束事务!        }    }
0 0
原创粉丝点击