安卓学习之数据存储与访问.docx

上传人:b****5 文档编号:29053493 上传时间:2023-07-20 格式:DOCX 页数:10 大小:18.84KB
下载 相关 举报
安卓学习之数据存储与访问.docx_第1页
第1页 / 共10页
安卓学习之数据存储与访问.docx_第2页
第2页 / 共10页
安卓学习之数据存储与访问.docx_第3页
第3页 / 共10页
安卓学习之数据存储与访问.docx_第4页
第4页 / 共10页
安卓学习之数据存储与访问.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

安卓学习之数据存储与访问.docx

《安卓学习之数据存储与访问.docx》由会员分享,可在线阅读,更多相关《安卓学习之数据存储与访问.docx(10页珍藏版)》请在冰豆网上搜索。

安卓学习之数据存储与访问.docx

安卓学习之数据存储与访问

SharedPreferences:

Activity之间的数据传递除了通过intent来传递外,还可以使用SharedPreferences来共享数据。

SharedPreferences是一种轻量级数据存储方式,能够实现不同应用程序间数据共享。

SharedPreferences使用键值对(Key-Value)的方式把简单数据类型(boolean、int、float、long和String)存储在应用程序的私有目录下自己定义的xml文件中。

私有目录是:

/data/data/应用程序包名/shared_prefs/

SharedPreferences编程:

(1)写入数据:

//获得SharedPreferences对象(如果不存在则新建)

SharedPreferencessp=getSharedPreferences(名称,访问模式);

//名称是:

SharedPreferences数据保存的XML文件名

//获得可编辑对象

SharedPreferences.Editoreditor=sp.edit();

editor.putString(“Name”,”abc”);//put方法写数据(key-value)

//一定要提交才能保存

mit();

(2)读取数据:

//获得SharedPreferences对象(如果不存在则新建)

SharedPreferencessp=getSharedPreferences(名称,访问模式);

Stringname=sp.getString("Name","DefaultVal");//get方法读数据

//第2个参数:

在无法获取值的时候使用的缺省值

SharedPreferences支持的三种访问模式:

⏹MODE_PRIVATE(=0,私有):

仅创建SharedPreferences的程序有权限对其进行读取或写入。

⏹MODE_WORLD_READABLE(=1,全局读):

创建程序可以对其进行读取或写入,其它应用程序只具有读取操作的权限,但没有写入操作的权限。

⏹MODE_WORLD_WRITEABLE(=2,全局写):

所有程序都可以对其进行写入操作,但没有读取操作的权限。

 

SQLite数据库:

Android在运行时(run-time)集成了SQLite,所以每个Android应用程序都可以使用SQLite数据库。

SQLite特点:

⏹SQLite是一款开源的、轻量级的、嵌入式的、关系型数据库。

⏹普通数据库的管理系统比较庞大和复杂,会占用了较多的系统资源,轻量级数据库SQLite的特点:

⏹比传统数据库更适合用于嵌入式系统

⏹占用资源少,运行高效可靠,可移植性强

⏹提供了零配置(zero-configuration)运行模式

数据库存储在:

/data/data/应用程序包名/databases/

在Android中,某个应用程序创建的数据库只有它自己可以访问,其它应用程序是不能访问的。

创建数据库和表:

⏹Android提供了一个名为SQLiteOpenHelper的辅助类来管理数据库的创建和版本。

可以通过继承这个类,实现它的一些方法来对数据库进行一些操作。

⏹创建数据库辅助类:

⏹当前项目src某包上->右键->New->class->输入class名(例如DBOpenHelper),并继承SQLiteOpenHelper类,然后修改相关代码。

onCreate():

//数据库第一次被创建时将调用onCreate()

//通常将创建表的操作放在这里

onUpgrade():

//当数据库版本发生变化时会调用onUpgrade()

//这里可写更新数据表的操作(谨慎使用),也可空着不写

为辅助类添加构造函数和创建数据表代码:

在SQLiteOpenHelper的子类当中,必须定义一个构造函数,该构造函数含四个参数:

上下文对象、数据库名字、游标工厂和数据库版本号(值必须是整数并且是递增的状态,但不要设置为0,如果为0则会每次都创建数据库)。

在Activity中使用辅助类来创建好打开数据库:

在Activity类中定义1个成员(版本号)

关于getWritableDatabase、getReadableDatabase:

当用户调用getWritableDatabase或getReadableDatabase时:

1、如果数据库不存在,就会调用onCreate(),不会调用onUpgrade();

2、如果数据库存在,但是版本不一样,就调用onUpgrade(),不会调用onCreate();

3、如果数据库存在,版本一样,不会调用onCreate()和onUpgrade(),此时如果数据库没有打开,就调用onOpen()方法打开,如果打开了就不调用onOpen().

getWritableDatabase():

打开一个可以读写的数据库

getReadableDatabase():

打开一个只读的数据库

test.db

test.db-journal是数据库日志文件

不使用辅助类来创建数据库和表的方法:

//打开或创建test.db数据库

SQLiteDatabasedb=openOrCreateDatabase("test.db",Context.MODE_PRIVATE,null);//每个数据库都只能被创建它的包访问,所以不能将数据库设为WORLD_READABLE

//CursorFactory一般设置为空

db.execSQL("DROPTABLEIFEXISTSperson");

//创建person表

db.execSQL("CREATETABLEperson(idINTEGERPRIMARYKEYAUTOINCREMENT,nameVARCHAR,ageSMALLINT)");

 

SQLite编程1:

1、SQLiteDatabase.execSQL():

执行insert、delete、update和createtable等有更改行为的SQL语句

2、SQLiteDatabase.rawQuery():

执行select语句

 

publicvoidinsert(Personperson){

DBOpenHelperhelper=newDBOpenHelper(getApplicationContext(),"test.db",null,DB_VERSION);

SQLiteDatabasedb=helper.getWritableDatabase();

db.execSQL("INSERTINTOpersonVALUES(NULL,?

?

)",

newObject[]{person.name,person.age});

db.close();

Toast.makeText(getApplicationContext(),"记录添加成功",Toast.LENGTH_SHORT).show();

}

 

publicvoiddeleteById(intid){

DBOpenHelperhelper=newDBOpenHelper(getApplicationContext(),"test.db",null,DB_VERSION);

SQLiteDatabasedb=helper.getWritableDatabase();

db.execSQL("Deletefrompersonwhereid=?

",newObject[]{id});

db.close();

Toast.makeText(getApplicationContext(),"记录删除成功",Toast.LENGTH_SHORT).show();

}

publicvoiddeleteAll(){

DBOpenHelperhelper=newDBOpenHelper(getApplicationContext(),"test.db",null,DB_VERSION);

SQLiteDatabasedb=helper.getWritableDatabase();

db.execSQL("Deletefromperson",newObject[]{});

db.close();

Toast.makeText(getApplicationContext(),"数据表全部清空",Toast.LENGTH_SHORT).show();

}

publicvoidupdateById(intid,Personperson){

DBOpenHelperhelper=newDBOpenHelper(getApplicationContext(),"test.db",null,DB_VERSION);

SQLiteDatabasedb=helper.getWritableDatabase();

db.execSQL("Updatepersonsetname=?

age=?

whereid=?

",newObject[]{person.name,person.age,id});

db.close();

Toast.makeText(getApplicationContext(),"记录修改成功",Toast.LENGTH_SHORT).show();

}

 

查询数据:

DBOpenHelperhelper=newDBOpenHelper(getApplicationContext(),"test.db",null,DB_VERSION);

SQLiteDatabasedb=helper.getWritableDatabase();

Cursorcursor=db.rawQuery("SELECT*FROMpersonwhereage>?

",newString[]{"10"});

//rawQuery()原生查询返回值是Cursor游标(结果集)

TextViewtv=(TextView)findViewById(R.id.textView1);

tv.setText("查询到"+cursor.getCount()+"条记录(当前数据库版本号="+DB_VERSION+")");

while(cursor.moveToNext()){

//根据列号取值

intid=cursor.getInt(cursor.getColumnIndex("id"));

Stringname=cursor.getString(cursor.getColumnIndex("name"));

intage=cursor.getInt(cursor.getColumnIndex("age"));

tv.setText(tv.getText()+"\n"+"id="+id+",name="+name+",age="+age);

}

cursor.close();//关闭cursor

db.close();//关闭数据库连接

Cursor游标的一些重要操作:

Cursor.move(intoffset);//以当前位置为参考,移动到指定行

Cursor.moveToFirst();//移动到第一行

Cursor.moveToLast();//移动到最后一行

Cursor.moveToPosition(intposition);//移动到指定行

Cursor.moveToPrevious();//移动到前一行

Cursor.moveToNext();//移动到下一行

Cursor.isFirst();//是否指向第一条

Cursor.isLast();//是否指向最后一条

Cursor.isNull(intcolumnIndex);//指定列是否为空(列基数为0)

Cursor.isClosed();//游标是否已关闭

Cursor.getCount();//总数据项数

Cursor.getPosition();//返回当前游标所指向的行数

Cursor.getColumnIndex(StringcolumnName);//返回某列名对应的列索引值

Cursor.getString(intcolumnIndex);//返回当前行指定列的值

 

更新数据库(谨慎使用):

Buttonbt6=(Button)findViewById(R.id.button6);

bt6.setOnClickListener(newView.OnClickListener(){

@Override

publicvoidonClick(Viewarg0){

DB_VERSION++;

//更新test.db数据库,其中数据库新版本号=老版本+1

DBOpenHelperhelper=newDBOpenHelper(getApplicationContext(),"test.db",null,DB_VERSION);

//触发DBOpenHelper类的onUpgrade方法

SQLiteDatabasedb=helper.getWritableDatabase();

db.close();

}

});

SQLite编程2:

⏹SQLiteDatabase类自身提供了insert()、delete()、update()、query()四个方法对数据库进行操作;

⏹这些方法封装了部分SQL语句,通过参数进行拼接。

添加数据:

Personperson2=newPerson("Tom",18);

//ContentValues以键值对的形式存放基本类型的数据

ContentValuescv=newContentValues();

cv.put("name",person2.name);

cv.put("age",person2.age);

DBOpenHelperhelper=newDBOpenHelper(getApplicationContext(),"test.db",null,1);

SQLiteDatabasedb=helper.getWritableDatabase();

//将ContentValues对象添加到数据表中

db.insert("person",null,cv);//第二个参数一般设置为null

db.close();

 

删除数据:

intcount=db.delete("person","age

andname=?

",

newString[]{"40","Tom"});

//SQLite是弱类型,会自动将String转换为int

db.close();

Toast.makeText(getApplicationContext(),count+"条记录删除成功",Toast.LENGTH_SHORT).show();

 

更新数据:

ContentValuescv=newContentValues();

cv.put("age",35);

//用ContentValues中的数据更新记录

intcount=db.update("person",cv,"name=?

",newString[]{"Tom"});

//第三个参数是条件语句

db.close();

Toast.makeText(getApplicationContext(),count+"条记录修改成功",Toast.LENGTH_SHORT).show();

 

查询数据:

Query()方法说明:

publicCursorquery(Stringtable,String[]columns,Stringselection,String[]selectionArgs,StringgroupBy,Stringhaving,StringorderBy,Stringlimit)

参数分别代表:

表名,字段名,where条件,where条件值,分组,提供分组后关于组的一个或多个限定条件,排序,强制select语句返回指定的记录数

示例:

Cursorcursor=db.query("person",newString[]{"id","name"},

"id>?

",newString[]{"10"},null,null,"iddesc","1,3");

Select"id","name“Fromperson

Whereid>10Orderbyiddesc

Limit1,3

查询数据:

DBOpenHelperhelper=newDBOpenHelper(getApplicationContext(),"test.db",null,DB_VERSION);

SQLiteDatabasedb=helper.getWritableDatabase();

TextViewtv=(TextView)findViewById(R.id.textView1);

Cursorcursor=db.query("person",newString[]{"id","name"},

"id>?

",newString[]{"10"},null,null,"iddesc","1,3");

if(cursor.getCount()==0)

tv.setText("查询到0条记录(当前数据库版本号="+db.getVersion()+")");

else

tv.setText("查询到"+cursor.getCount()+"条记录(当前数据库版本号="+db.getVersion()+")");

while(cursor.moveToNext()){

intid=cursor.getInt(cursor.getColumnIndex("id"));

Stringname=cursor.getString(cursor.getColumnIndex("name"));

tv.setText(tv.getText()+"\n"+"id="+id+",name="+name);

}

cursor.close();//关闭cursor

db.close();//关闭数据库连接

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1