SQLite的使用
一、新建一个继承SQLiteOpenHelper的类
会生成构造方法以及重写方法
1 /** 2 * 上下文、数据库名称、查询数据库系统默认游标工厂、数据库版本号 3 */ 4 public DBOpenHelper(Context context,String name,CursorFactory factory,int version){ 5 super(context,"demo.db",null,1); 6 } 7 8 /** 9 * 创建对象时会执行此方法 10 */ 11 @Override 12 public void onCreate(SQLiteDatabase db){ 13 db.execSQL("create table book (id integer primary key autoincrement,name varchar(20))"); 14 } 15 16 @Override 17 public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){ 18 //版本号有更新的时候调用 19 }
二、在调用的类中使用如下代码,数据库就会自动创建
1 DBOpenHelper helper = new DBOpenHelper(this); 2 helper.getReadableDatabase();
三、通常数据库操作会创建一个DAO类
1 public DBDao(Context context){ 2 DBOpenHelper dbOpenHelper = new DBOpenHelper(context); 3 //writable加锁操作数据库 4 //dbOpenHelper.getReadableDatabase(); 5 //dbOpenHelper.getWritableDatabase(); 6 } 7 8 /** 9 * 增 10 */ 11 public void add(String name){ 12 SQLiteDatabase db = dbOpenHelper.getWriteDatabase(); 13 if(db.isOpen()){ 14 db.execSQL("insert into book(name) values(?)",new Object[]{name}); 15 db.close(); 16 } 17 } 18 19 /** 20 * 删 21 */ 22 public void delete(String name){ 23 SQLiteDatabase db = dbOpenHelper.getWriteDatabase(); 24 if(db.isOpen()){ 25 db.execSQL("delete from book where name=?",new Object[]{name}); 26 db.close(); 27 } 28 } 29 30 /** 31 * 改 32 */ 33 public void update(String name,String newname){ 34 SQLiteDatabase db = dbOpenHelper.getWriteDatabase(); 35 if(db.isOpen()){ 36 db.execSQL("update book set name=?,value=? where name=?",new Objec[]{name,newname}); 37 db.close(); 38 } 39 } 40 41 /** 42 * 查 43 */ 44 public void find(String name){ 45 SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); 46 if(db.isOpen()){ 47 //返回结果集 48 Cursor cursor = db.rawQuery("select * from book where name=?",new String[]{name}); 49 if(cursor.moveToFirst()){ 50 //name在行中第几列 51 int index = cursor.getColumnIndex("name"); 52 cursor.getString(index); 53 } 54 cursor.close(); 55 db.close(); 56 57 } 58 } 59 60 public List<Book> findAllList(){ 61 SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); 62 if(db.isOpen()){ 63 Cursor cursor = db.rawQuery("select * from book",null); 64 while(cursor.moveToNext()){ 65 int index = cursor.getColumnIndex("name"); 66 cursor.getString(index); 67 } 68 cursor.close(); 69 db.close(); 70 } 71 }
四、增删改查的另一种方式
1 /** 2 * 增 3 */ 4 public void add(String name,String value){ 5 SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); 6 if(db.isOpen){ 7 ContentValues values = new ContentValues(); 8 values.put("name",name); 9 values.put("value",value); 10 //表名、当values为空时,可以指定一个列名插入NULL值、参数 11 db.insert("book", "name",values); 12 db.close(); 13 } 14 } 15 16 /** 17 * 删 18 */ 19 public void delete(String name){ 20 SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); 21 if(db.isOpen){ 22 //表名、查询条件、值 23 db.delete("book","name=?",new String[]{"zs"}); 24 db.close(); 25 } 26 } 27 28 /** 29 * 改 30 */ 31 public void update(String name,String newname){ 32 SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); 33 if(db.isOpen){ 34 ContentValues values = new ContentValues(); 35 values.put("name",newname); 36 // 37 db.update("book",value,"name=?,age=?",new String[]{name}); 38 db.close(); 39 } 40 } 41 42 /** 43 * 查 44 */ 45 public void find(String name){ 46 SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); 47 if(db.isOpen()){ 48 //表名、查询的列(null则为所有的列)、条件、条件的参数、分组group by、排序 49 Cursor cursor = db.query("book",new String[]{name},"name=?",new String[]{name},null,null); 50 if(cursor.moveToFirst()){ 51 52 } 53 cursor.close(); 54 db.close(); 55 } 56 }
五、事务的处理
1 //开启事务 2 try{ 3 db.beginTransaction(); 4 ... 5 db.execSQL(); 6 ... 7 //事务成功 8 db.setTransactionSuccessful(); 9 }catch(Exception e){ 10 11 }finally{ 12 db.endTransaction(); 13 db.close(); 14 }