《老罗Android》学习之SQLite

前端之家收集整理的这篇文章主要介绍了《老罗Android》学习之SQLite前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1、sqlite是什么?
sqlite 是进程内的数据库引擎,不存在数据库的客户端和服务器,使用sqlite只需要带上它的一个动态库,就可以享用它的全部功能
2、sqliteOpenHelper的使用
我们要使用sqlite,首先要得到一个sqliteDatabase对象,那么怎么得到它呢?

首先,我们要得到一个sqliteOpenHelper对象,然后用这个sqliteOpenHelper对象的getReadableDatabase()或getWritableDatabase()方法获得可读或可写的数据库,从而得到一个sqliteDatebase对象。然后再用这个sqliteDatebase对象对数据库进行操作就可以了。我们来看一下代码

//DatabaseHelper作为一个访问sqlite的助手类,提供两个方面的功能
//第一,getReadableDatabase(),getWritableDatabase()可以获得sqliteDatabse对象,通过该对象可以对数据库进行操作
//第二,提供了onCreate()和onUpgrade()两个回调函数,允许我们在创建和升级数据库时,进行自己的操作

3.对sqlite进行 增、删、改、查 操作
采用MVC模式:即service:服务层; Dao:数据访问层; 操作层。
1.PersonService2.java 定义接口
  1. publicinterfacePersonService2{
  2. publicbooleanaddPerson(ContentValuesvalues);
  3. publicbooleandeletePerson(StringwhereClause,String[]whereArgs);
  4. publicbooleanupdatePerson(ContentValuesvalues,StringwhereClause,String[]whereArgs);
  5. publicMap<String,String>viewPerson(Stringselection,String[]selectionArgs);
  6. publicList<Map<String,String>>listPersonMaps(Stringselection,String[]selectionArgs);
  7. }
2.PersonDao2.java 实现方法
copy
publicclassPersonDao2implementsPersonService2{
  • privateDbOpenHelperhelper=null;
  • publicPersonDao2(Contextcontext){
  • helper=newDbOpenHelper(context);
  • }
  • publicbooleanaddPerson(ContentValuesvalues){
  • booleanflag=false;
  • SQLiteDatabasedatabase=null;
  • longid=-1;
  • try{
  • database=helper.getWritableDatabase();
  • id=database.insert("person",null,values);
  • flag=(id!=-1?true:false);
  • }catch(Exceptione){
  • }finally{
  • if(database!=null){
  • database.close();
  • }
  • returnflag;
  • publicbooleandeletePerson(StringwhereClause,String[]whereArgs){
  • intcount=0;
  • count=database.delete("person",whereClause,whereArgs);
  • flag=(count>0?true:false);
  • String[]whereArgs){
  • booleanflag=false;
  • SQLiteDatabasedatabase=null;
  • intcount=0;//影响数据库的行数
  • try{
  • database=helper.getWritableDatabase();
  • count=database.update("person",values,whereArgs);
  • flag=(count>0?true:false);
  • }catch(Exceptione){
  • }finally{
  • if(database!=null){
  • database.close();
  • returnflag;
  • //应用中通过id查询,所以只得到单条记录,即cursor.moveToNext()就为null了。
  • publicMap<String,String[]selectionArgs){
  • //select返回的列的名称(投影查询)from
  • Cursorcursor=null;
  • Map<String,String>map=newHashMap<String,String>();
  • database=helper.getReadableDatabase();
  • cursor=database.query(true,"person",selection,
  • selectionArgs,null,null);
  • intcols_len=cursor.getColumnCount();
  • while(cursor.moveToNext()){
  • for(inti=0;i<cols_len;i++){//循环,把这一行每一列的值都取出来
  • Stringcols_name=cursor.getColumnName(i);
  • Stringcols_value=cursor.getString(cursor.getColumnIndex(cols_name));
  • if(cols_value==null){
  • cols_value="";
  • map.put(cols_name,cols_value);
  • e.printStackTrace();
  • returnmap;
  • publicList<Map<String,String[]selectionArgs){
  • List<Map<String,String>>list=newArrayList<Map<String,String>>();
  • Cursorcursor=null;
  • cursor=database.query(false,153); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> Map<String,String>();
  • for(inti=0;i<cols_len;i++){
  • Stringcols_name=cursor.getColumnName(i);
  • Stringcols_value=cursor.getString(cursor.getColumnIndex(cols_name));
  • if(cols_value==null){
  • cols_value="";
  • map.put(cols_name,cols_value);
  • list.add(map);
  • returnlist;
  • }
  • 4. 应用层
    老罗的视频中是用一个测试设备来测试,我们在真机上测试不采用这种方法,我在一个Actvity中实现对SQLite的操作。源码如下:

    copy
    publicclassMainActivityextendsActivity{
  • privatePersonDaopersonService=null;
  • privatefinalstaticStringTAG="sqlite";
  • privateListViewlistView;
  • privateButtonbutton1,button2,button3,button4,button5;
  • @Override
  • protectedvoidonCreate(BundlesavedInstanceState){
  • super.onCreate(savedInstanceState);
  • setContentView(R.layout.activity_main);
  • personService=newPersonDao(this);
  • listView=(ListView)this.findViewById(R.id.listView1);
  • /........找到button.........../
  • button1.setOnClickListener(newOnClickListener(){
  • publicvoidonClick(Viewv){
  • addPerson();//添加人员
  • });
  • button2.setOnClickListener(newOnClickListener(){
  • publicvoidonClick(Viewv){
  • deletePerson("id=?",newString[]{"2"});//删除id为2的记录
  • });
  • button3.setOnClickListener(newOnClickListener(){
  • updatePerson("id=?",newString[]{"3"});//更新人员
  • button4.setOnClickListener(newOnClickListener(){
  • viewPerson("id=?",0); background-color:inherit">//通过id,查看单条记录
  • button5.setOnClickListener(newOnClickListener(){
  • listPerson(null,null);//不限制条件,就可查询全部记录
  • publicvoidaddPerson(){
  • ContentValuesvalues=newContentValues();//类似map的属性
  • values.put("name","杰克");
  • values.put("address","江西");
  • values.put("sex","男");
  • booleanflag=personService.addPerson(values);
  • Log.i(TAG,"addPerson--->>"+flag);
  • publicvoiddeletePerson(StringwhereClause,String[]whereArgs){
  • //deletefrompersonwhereid=?
  • //不包含where关键字
  • booleanflag=personService.deletePerson(whereClause,"deletePerson--->>"+flag);
  • publicvoidupdatePerson(StringwhereClause,"纽约");
  • "女");
  • booleanflag=personService.updatePerson(values,"updatePerson--->>"+flag);
  • publicvoidviewPerson(Stringselection,String>map=personService.viewPerson(selection,
  • selectionArgs);
  • Log.i(TAG,"viewPerson--->>"+map.toString());
  • publicvoidlistPerson(Stringselection,153); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> List<Map<String,String>>list=personService.listPersonMaps(
  • selection,selectionArgs);
  • "listPerson--->>"+list.toString());
  • query(list);
  • publicvoidquery(List<Map<String,String>>list){
  • //需要显示多行,用SimpleAdapter.
  • SimpleAdapteradapter=newSimpleAdapter(this,list,153); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> R.layout.simple_list_item,newString[]{"name","address",248)"> "sex"},newint[]{R.id.textView1,R.id.textView2,R.id.textView3});
  • listView.setAdapter(adapter);
  • }
  • person表中有4个字段:id,name,address,sex. 在SimpleAdapter 的new String[]参数中写入这4个字段的某些值,就会在listView中显示相应的数据,这个SimpleAdapter 会自动为我们从list列表中找出这些数据,相当智能是吧,呵呵。

    效果图:

    猜你在找的Sqlite相关文章