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;
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"});
});
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();
values.put("name","杰克");
values.put("address","江西");
values.put("sex","男");
booleanflag=personService.addPerson(values);
Log.i(TAG,"addPerson--->>"+flag);
publicvoiddeletePerson(StringwhereClause,String[]whereArgs){
//不包含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列表中找出这些数据,相当智能是吧,呵呵。
效果图: (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|