android studio|android SQLite数据库总结

更新时间:2021-05-19    来源:班主任工作总结    手机版     字体:

【www.bbyears.com--班主任工作总结】

SQLite

SQLite是一种超轻量级的嵌入式数据库,大小只有几百KB,但是其语法支持标准SQL语法,同时还遵循了数据库的ACID事务,所以学过其他数据库的开发人员都很容易掌握其使用。

sql语法就不介绍了,直接看在android中的使用

SQLiteOpenHelper——封装好的数据库操作辅助类,需重写

重写方法

onCreate:初始化数据库,创建表,添加初始数据

onUpgrade:数据库版本升级时的数据库操作,如备份删除数据库等

常用方法

getReadableDatabase()    获取SQLiteDatabase对象,操作数据库

getWritableDatabase()        获取SQLiteDatabase对象,操作数据库

区别:在磁盘空间满或不可写时,1方法将获得只读的数据库对象,而2方法会报错,在正常情况下,获取到的都是可读写的数据库对象。

   代码如下 importandroid.content.Context; importandroid.database.sqlite.SQLiteDatabase; importandroid.database.sqlite.SQLiteOpenHelper; publicclassDBHelperextendsSQLiteOpenHelper {  privatestaticfinalString name="my";//数据库名  privatestaticfinalintversion=1;//版本号  //重写构造方法的时候选择参数少的一项  publicDBHelper(Context context) {   //1:上下文 2:数据库名称 3:游标创建工厂 4:数据库版本 版本只能是整数 1 2 3..   super(context, name,null, version);  }  //数据库的初始化 SQLiteDatabase数据库操作对象  //一般只在第一次运行和版本更新的时候调用  @Override  publicvoidonCreate(SQLiteDatabase db) {   //创建数据库 主键默认自增   db.execSQL("create table student("+     "_id integer not null primary key autoincrement,"+     "name varchar(20),"+     "phone varchar(11),"+     "gender varchar(2))");   //添加一条测试数据   db.execSQL("insert into student values(null,?,?,?)"     ,newObject[]{"小黑","12345678901","男"});  }  /**   * 在版本升级的时候调用   * 修改version 为2 表示版本升级 就会调用这个方法   * @param db 数据库操作对象   * @param oldVersion 旧版本号   * @param newVersion 新版本号   */  @Override  publicvoidonUpgrade(SQLiteDatabase db,intoldVersion,intnewVersion) {  } }  

在android数据库的创建是需要创建对象才能创建的

在activity类中创建出一个数据库类对象

创建好数据对象就可以操作数据了 通过SQLiteDatabase获取   两种获取方法的区别上面已经提到过了

   代码如下    //创建数据 DBHelper helper =newDBHelper(this); //调用数据操作对象 SQLiteDatabase dbWrite=helper.getWritableDatabase(); SQLiteDatabase dbRead=helper.getReadableDatabase();  

SQLiteDatabase给我们提供了很多操作数据的方法 

删除:(int) delete(String table,String whereClause,String[] whereArgs) 

   table: 表名

   whereClause:where条件  列名 占位符  id=?

   whereArgs:参数值数组

添加:(long) insert(String table,String nullColumnHack,ContentValues values)  

    nullColumnHack:为空列

    ContentValues values:通过键值对存储添加的数据  key为列 value为值

    insert方法 底层是通过拼接字符串的方式 如果ContentValues是空的 拼接成的sql语句无法执行会报错 所以给一个可以为空的列当ContentValues为空时也可以执行 有兴趣的可以看一下源码

更新:(int) update(String table, ContentValues values, String whereClause, String[] whereArgs)

   参数意思同上

查询:(Cursor) query(boolean distinct,String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

    返回值是一个游标   这个query参数较多 简单的查询就还是写一条sql语句简单点

      boolean distinct 去重复

      String table 表名

      String[] columns要查询的列

      String selection查询条件

      String[] selectionArgs查询参数值

      String groupBy分组

      String having分组条件

      String orderBy排序

      String limit分页查询限制

关闭数据库:(void) close()

执行一条sql语句:(void) execSQL(String sql) 增删改查

查询查询sql:(Cursor) rawQuery(String sql, String[] selectionArgs)

事务

   代码如下 try{    db.beginTransaction();//开启事务    // db.update();    // db.insert();    db.setTransactionSuccessful();//没有设置事物成功 finally就会回滚   }catch(Exception e) {    e.printStackTrace();   }finally{    db.endTransaction();   }  

贴代码咯  执行sql语句 和封装好的方法

查询

   代码如下 privatevoidquery() {   StringBuffer sb=newStringBuffer("select * from student where 1=1");   //参数集合   List params=newArrayList<>();   if(!TextUtils.isEmpty(id)){    sb.append(" and _id=?");    params.add(id);   }   if(!TextUtils.isEmpty(phone)){    sb.append(" and phone=?");    params.add(phone);   }   if(!TextUtils.isEmpty(name)){    sb.append(" and name=?");    params.add(name);   }   if(!TextUtils.isEmpty(gender)){    sb.append(" and gender=?");    params.add(gender);   }   SQLiteDatabase db=helper.getReadableDatabase();   String [] projection=newString [params.size()];   params.toArray(projection);   //返回值 游标   Cursor cursor=db.rawQuery(sb.toString(),projection);     //判断游标是否为空,是否有一个值   while(cursor!=null&&cursor.moveToNext()){    // getColumnIndex获取列的下标 cursor.getXXXX()获取指定列的值    String name=cursor.getString(cursor.getColumnIndex("name"));    Integer id=cursor.getInt(cursor.getColumnIndex("_id"));   }  }  

用不到的参数就让它为空吧   遍历数据就while循环就好咯

Cursor c = db.query("student",null,null,null,null,null,null);//查询并获得游标

更新

   代码如下 privatevoidupdate() {   StringBuffer sb=newStringBuffer("update student set ");   List params=newArrayList();   if(!TextUtils.isEmpty(phone)){    sb.append("phone=?,");    params.add(phone);   }   if(!TextUtils.isEmpty(name)){    sb.append("name=?,");    params.add(name);   }   if(!TextUtils.isEmpty(gender)){    sb.append("gender=?,");    params.add(gender);   }   if(params.size()!=0){    //更新操作拼接字符串末尾有一个","需要去除    //删除最后一位的“,”    sb.setLength(sb.length()-1);    sb.append(" where 1=1");    //通过id指定 更新那行数据    if(!TextUtils.isEmpty(id)){     sb.append(" and _id=?");     params.add(id);    }else{     Toast.makeText(this,"请填写id",Toast.LENGTH_SHORT).show();     return;    }    SQLiteDatabase db=helper.getWritableDatabase();    Object [] o=newObject[params.size()];    params.toArray(o);//将数据存放到指定的数组中    db.execSQL(sb.toString(),o);   }  } ContentValues cv =newContentValues();//实例化ContentValues cv.put("name","123");//添加要更改的字段及内容 String whereClause ="phone=?";//修改条件 String[] whereArgs = {"12312313213"};//修改条件的参数 db.update("student",cv,whereClause,whereArgs);//执行修改  

删除

   代码如下 privatevoiddelete() {   getAllText();   //拼接sql语句   StringBuffer sb=newStringBuffer("delete from student where 1=1");   //保存参数的list   List params=newArrayList();   //判断条件 动态拼接   if(!TextUtils.isEmpty(id)){    sb.append(" and _id=?");    params.add(id);   }   if(!TextUtils.isEmpty(phone)){    sb.append(" and phone=?");    params.add(phone);   }   if(!TextUtils.isEmpty(name)){    sb.append(" and name=?");    params.add(name);   }   if(!TextUtils.isEmpty(gender)){    sb.append(" and gender=?");    params.add(gender);   }   SQLiteDatabase db=helper.getWritableDatabase();   if(params.size()!=0){    Object [] o=newObject[params.size()];    params.toArray(o);//将数据存放到指定的数组中    //执行删除    db.execSQL(sb.toString(),o);   }else{    db.execSQL(sb.toString());   }   Toast.makeText(this,"删除完成",Toast.LENGTH_SHORT).show();  } String whereClause ="name=?";//删除的条件 String[] whereArgs = {"123"};//删除的条件参数 db.delete("student",whereClause,whereArgs);//执行删除  

增加

   代码如下 privatevoidinsert() {//保存数据到object数组   Object [] o=newObject[]{name,phone,gender};   //获取数据库操作对象   SQLiteDatabase db=helper.getWritableDatabase();   //sql:sql语句 bingArgs:参数数组   db.execSQL("insert into student values(null,?,?,?)",o);   //关闭连接   db.close();   Toast.makeText(this,"增加成功",Toast.LENGTH_SHORT).show();  }   ContentValues cv =newContentValues();//实例化一个ContentValues用来装载待插入的数据 cv.put("name","123"); db.insert("student",null,cv);//执行插入操作

本文来源:http://www.bbyears.com/banzhurengongzuo/118438.html

热门标签

更多>>

本类排行