最近项目又用到了 数据库的操作,刚好把以前的拿来总结一下,也顺便帮助别人能够快速使用,代码片段全部都贴出来,
// 第一次使用软件自动 创建数据库 继承工具类 SQLiteOpenHelper // 调用 SQLiteOpenHelper.getwritableDatabase(); 就执行创建方法 public class DBhelper extends SQLiteOpenHelper{ public DBhelper(Context context) { super(context, "lilei", //数据库的名字 null , //游标 null 为使用系统默认的 游标工厂产出游标对象 1 //数据库文件版本号 不能为0 。 ); } @Override //数据库第一次被创建的时候调用 public void onCreate(SQLiteDatabase db) { //SQLiteDatabase封装了对数据库所有的操作 db.execSQL("create table if not exists info" + "(id integer primary key autoincrement , name varchar(20))"); //如果要创建多张表就继续 //db.execSQL("create table info1 (id integer primary key autoincrement, name vachar(50),money int)"); } @Override //当上面的 版本号 变更时 调用这个函数 额外添加 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("drop table if exists info"); //db.execSQL("alter table ll add age varchar(20) null"); } }
然后就是对数据库操作的类了。
public class SQLHandle { private DBhelper dbh; public SQLHandle(Context c){ this.dbh=new DBhelper(c); } //设置事物 提交 public void shiwu(){ SQLiteDatabase db= dbh.getWritableDatabase(); try{ db.beginTransaction(); ///////////////////////////////// //////////////////////////////// db.setTransactionSuccessful(); }finally{ db.endTransaction(); // 回滚 } } // public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit); // 各个参数的意义说明: // table:表名称 // columns:列名称数组 // selection:条件字句,相当于where // selectionArgs:条件字句,参数数组 // groupBy:分组列 // having:分组条件 // orderBy:排序列 // limit:分页查询限制 // Cursor:返回值,相当于结果集ResultSet // getCount() 获得总的数据项数 // isFirst() 判断是否第一条记录 // isLast() 判断是否最后一条记录 // moveToFirst() 移动到第一条记录 // moveToLast() 移动到最后一条记录 // move(int offset) 移动到指定记录 // moveToNext() 移动到下一条记录 // moveToPrevious() 移动到上一条记录 // getColumnIndexOrThrow(String columnName) 根据列名称获得列索引 // getInt(int columnIndex) 获得指定列索引的int类型值 // getString(int columnIndex) 获得指定列缩影的String类型值 /** 查询 **/ public void find(String id){ //SQLiteDatabase db= dbh.getReadableDatabase(); // getWritableDatabase() 首先调用 writeable 方法 // 比如存储空间磁盘满了 不成功的情况下 只能读 SQLiteDatabase db= dbh.getWritableDatabase(); //1.返回cursor对象 -----ResultSet Cursor cu=db.rawQuery("select * from where id=?", new String[]{id}); if(cu.moveToFirst()){ cu.getInt(cu.getColumnIndex("id")); cu.getString(cu.getColumnIndex("name")); cu.getString(cu.getColumnIndex("age")); } //2. Cursor cu1=db.query("ll", //表名 new String[]{"id","name","age"}, //要获取的字段值 null 为查询所有字段 "id=?", // where new String[]{"1212"}, // where 条件 = null, //groupBy null, //having null); //orderBy if(cu1.moveToFirst()){ cu1.getInt(cu1.getColumnIndex("id")); cu1.getString(cu1.getColumnIndex("name")); cu1.getString(cu1.getColumnIndex("age")); } //用完记得关闭 cu.close(); db.close(); } /*** 插入 ***/ public void insert(String name, String age){ SQLiteDatabase sqld=dbh.getWritableDatabase(); // 缓存特点 sqld1 和 sqld 指向的是同1个实例 //SQLiteDatabase sqld1=dbh.getWritableDatabase(); sqld.execSQL("insert into ll (name,age,sex) values (?,?,?)", new Object[]{name,age}); //2 ContentValues value=new ContentValues(); value.put("id", 10); value.put("name", "455"); value.put("age", 20); sqld.insert("ll", null, value); sqld.insert("ll", "id", null);// 第2参数 空值字段 //有特殊处理 主键 null值 自动增长 sqld.close(); } /*** 更新 ***/ public void update(String id,String name,String age){ SQLiteDatabase sqld=dbh.getWritableDatabase(); //1 sqld.execSQL("update ll set name=?,age=? where id=? ", new Object[]{id,name,age}); //2 // 调用SQLiteDatabase的update(String table,ContentValues values,String whereClause, String[] whereArgs)方法。 // 参数是表名称,参数是更行列ContentValues类型的键值对(Map),参数是更新条件(where字句),参数是更新条件数组。 ContentValues value=new ContentValues(); value.put("id", 10); value.put("name", "455"); value.put("age", 20); sqld.update("ll", value, "id=?", new String[]{"201"}); //用完记得关闭 sqld.close(); } /** 删除 **/ public void delete(String id){ SQLiteDatabase sqld=dbh.getWritableDatabase(); //1 sqld.execSQL("delete from ll where id=?", new Object[]{id}); //2. // 调用SQLiteDatabase的delete(String table,String whereClause,String[] whereArgs)方法, // 参数一是表名称,参数二是删除条件,参数三是删除条件值数组; sqld.delete("ll", "id=?", new String[]{"dsds"}); //用完记得关闭 sqld.close(); } /** 删除指定数据库 **/ private void drop(SQLiteDatabase db){ ///////////////// //////////////// //删除表的SQL语句 String sql ="DROP TABLE stu_table"; //执行SQL db.execSQL(sql); } //分页 public List<Vector> getScollDate(int offset,int maxResult){ SQLiteDatabase db= dbh.getWritableDatabase(); //1 Cursor cu=db.rawQuery("select * from ll order by " + "id asc " + "limit ?,?", new String[]{String.valueOf(offset),String.valueOf(maxResult)}); Vector vs=new Vector(); //得到多条结果集 while(cu.moveToNext()){ Vector v=new Vector(); int id=cu.getInt(cu.getColumnIndex("id")); String name=cu.getString(cu.getColumnIndex("name")); String age=cu.getString(cu.getColumnIndex("age")); v.add(id); v.add(name); v.add(age); vs.add(v); //2. db.query("ll", //table null, //colument null, null, null, null, //having "id asc", //orderBy offset+","+maxResult); } //关闭数据库 cu.close(); db.close(); return vs; } //记录总数 public long getCount(){ SQLiteDatabase db= dbh.getWritableDatabase(); Cursor cu=db.rawQuery("select count(*) from ll",null); //最后也会有1条数据 写0 cu.moveToFirst(); long l=cu.getLong(0); // ------------- 2 Cursor c1=db.query("ll", new String[]{"count(*)"}, null, null, null, null, null); ///////////////// return l; } }
当然,个人还是觉得用 sql 比较方便,因为大家肯定都是多多少少接触过数据库的