android 数据库 sqlite 操作
16lz
2021-01-26
最近项目又用到了 数据库的操作,刚好把以前的拿来总结一下,也顺便帮助别人能够快速使用,代码片段全部都贴出来,
// 第一次使用软件自动 创建数据库 继承工具类 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对象 -----ResultSetCursor 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=?", // wherenew String[]{"1212"}, // where 条件 =null, //groupBynull, //havingnull); //orderByif(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(); //1sqld.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(); //1sqld.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 比较方便,因为大家肯定都是多多少少接触过数据库的
更多相关文章
- android中短信协议与字段
- android通过HTTP协议上传文件至远程服务器
- Android中更改SQLite数据库中的数据后,刷新ListView。
- android直接链接sqlserver数据库
- SQlite数据库简介
- Android五大存储之SQLite
- Android通过xml文件配置数据库
- 内容为引用别人的文章,备自己学习之用.
- android 数据库 sqlite数据类型(时间 日期 double等)