android数据存储—SQLite
2016-06-24 11:57
381 查看
SQLiteOpenHelper抽象类
该方法通常用4个参数的构造方法
通过得到实例后调用getWritableDatabase() || getReadableDatabase() 来创建和打开数据库!!
~~直接用栗子:
正常的使用
下面方法是吧数据的操作封装起来使用的实战操作!!复用性!
数据库也可以使用事务
该方法通常用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();//结束事务! } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件