《老罗Android》学习之SQLite

《老罗Android》学习之SQLite,第1张

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

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 定义接口
[java] view plain copy print ? publicinterfacePersonService2{ publicbooleanaddPerson(ContentValuesvalues); publicbooleandeletePerson(StringwhereClause,String[]whereArgs); publicbooleanupdatePerson(ContentValuesvalues,StringwhereClause,String[]whereArgs); publicMap<String,String>vIEwPerson(Stringselection,String[]selectionArgs); publicList<Map<String,String>>ListPersonMaps(Stringselection,String[]selectionArgs); } 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列表中找出这些数据,相当智能是吧,呵呵。

效果图:

总结

以上是内存溢出为你收集整理的《老罗Android》学习之SQLite全部内容,希望文章能够帮你解决《老罗Android》学习之SQLite所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1168179.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存