android 数据库 sqlite 操作

来源:互联网 发布:虚拟机运行软件卡 编辑:程序博客网 时间:2024/04/30 16:00


最近项目又用到了 数据库的操作,刚好把以前的拿来总结一下,也顺便帮助别人能够快速使用,代码片段全部都贴出来,

//  第一次使用软件自动  创建数据库  继承工具类 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 比较方便,因为大家肯定都是多多少少接触过数据库的







1 0
原创粉丝点击