android settings怎样存储数据库

android settings怎样存储数据库,第1张

settings 数据管理了系统的普通设置,比如铃声uri,音量,用来保证下次用户开机时候和前次关机的配置信息一直的。保存信息在android是肯定用sqlite, 这个东西真是博大精深。对数据库还有很多不理解的地方。要加强。

我们OEM厂商,出货后,用户第一次开机,系统保存了些默认的配置,是怎么来的呢。有settingprovider提供。

这个是个单独的apk ,就是用来共各个ap查询记录系统信息的。肯定用provider方式。在base/core/java/android/provider/settingsjava这个文件提供了很多的接口用来 *** 作数据。

相对来说。及时不用看数据库的实现,只要简单 *** 作这个类就够了。

数据库名字是settingsdb 创建了两个表 system, secure 要往某个表里写东西,可以直接叫到 SettingsSystemput() 跟上contentresolver,我不怕苦,不怕输,只怕再多的努力也无助。苏州 qisda 臧春杰 键明,值,同样也可以SettingsSystemget 用法类似。

当然也可以Settingssecureget put , 安全表主要用来记录一些网络配置信息。这个完全可以通过sqliteexpert打开看看。

第一开机时候,查询时候,会指定数据库名字版本

private static final String DATABASE_NAME = "settingsdb";

// Please, please please If you update the database version, check to make sure the

// database gets upgraded properly At a minimum, please confirm that 'upgradeVersion'

// is properly propagated through your change Not doing so will result in a loss of user

// settings

private static final int DATABASE_VERSION = 80;

然后oncreate时候,创建表,然后加载默认数据

loadSystemSettings(db); //nancy, 有问题多讨论。

loadSecureSettings(db);

insert or ignore into system values();

android开发中sqlite3支持的数据类型:

NULL、INTEGER、REAL、TEXT、BLOB

但是,sqlite3也支持如下的数据类型

smallint 16位整数

integer 32位整数

decimal(p,s) p是精确值,s是小数位数

float 32位实数

double 64位实数

char(n) n长度字符串,不能超过254

varchar(n) 长度不固定最大字符串长度为n,n不超过4000

graphic(n) 和 char(n) 一样,但是单位是两个字符double-bytes,n不超过127(中文字)

vargraphic(n) 可变长度且最大长度为n

date 包含了年份、月份、日期

time 包含了小时、分钟、秒

timestamp 包含了年、月、日、时、分、秒、千分之一秒

Android平台开发过程中,进行数据存储的方式有五种,一下是这五种数据存储的总结:

第一种: 使用SharedPreferences存储数据

适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型、基本类型的值。比如应用程序的各种配置信息(如是否打开音效、是否使用震动效果、小游戏的玩家积分等),解锁口 令密码等

核心原理:保存基于XML文件存储的key-value键值对数据,通常用来存储一些简单的配置信息。通过DDMS的File Explorer面板,展开文件浏览树,很明显SharedPreferences数据总是存储在/data/data/<package name>/shared_prefs目录下。SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过SharedPreferencesedit()获取的内部接口Editor对象实现。 SharedPreferences本身是一 个接口,程序无法直接创建SharedPreferences实例,只能通过Context提供的getSharedPreferences(String name, int mode)方法来获取SharedPreferences实例,该方法中name表示要 *** 作的xml文件名,第二个参数具体如下:

ContextMODE_PRIVATE: 指定该SharedPreferences数据只能被本应用程序读、写。

ContextMODE_WORLD_READABLE:  指定该SharedPreferences数据能被其他应用程序读,但不能写。

ContextMODE_WORLD_WRITEABLE:  指定该SharedPreferences数据能被其他应用程序读,写

Editor有如下主要重要方法:

SharedPreferencesEditor clear():清空SharedPreferences里所有数据

SharedPreferencesEditor putXxx(String key , xxx value): 向SharedPreferences存入指定key对应的数据,其中xxx 可以是boolean,float,int等各种基本类型据

SharedPreferencesEditor remove(): 删除SharedPreferences中指定key对应的数据项

boolean commit(): 当Editor编辑完成后,使用该方法提交修改

实际案例:运行界面如下

这里只提供了两个按钮和一个输入文本框,布局简单,故在此不给出界面布局文件了,程序核心代码如下:

读写其他应用的SharedPreferences: 步骤如下

1、在创建SharedPreferences时,指定MODE_WORLD_READABLE模式,表明该SharedPreferences数据可以被其他程序读取

2、创建其他应用程序对应的Context:

Context pvCount = createPackageContext("comtonyapp", ContextCONTEXT_IGNORE_SECURITY);这里的comtonyapp就是其他程序的包名

3、使用其他程序的Context获取对应的SharedPreferences

SharedPreferences read = pvCountgetSharedPreferences("lock", ContextMODE_WORLD_READABLE);

4、如果是写入数据,使用Editor接口即可,所有其他 *** 作均和前面一致。

SharedPreferences对象与SQLite数据库相比,免去了创建数据库,创建表,写SQL语句等诸多 *** 作,相对而言更加方便,简洁。但是SharedPreferences也有其自身缺陷,比如其职能存储boolean,int,float,long和String五种简单的数据类型,比如其无法进行条件查询等。所以不论SharedPreferences的数据存储 *** 作是如何简单,它也只能是存储方式的一种补充,而无法完全替代如SQLite数据库这样的其他数据存储方式。

第二种: 文件存储数据

核心原理: Context提供了两个方法来打开数据文件里的文件IO流 FileInputStream openFileInput(String name); FileOutputStream(String name , int mode),这两个方法第一个参数 用于指定文件名,第二个参数指定打开文件的模式。具体有以下值可选:

MODE_PRIVATE:为默认 *** 作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可   以使用ContextMODE_APPEND

MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。

MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;

MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。

除此之外,Context还提供了如下几个重要的方法:

getDir(String name , int mode):在应用程序的数据文件夹下获取或者创建name对应的子目录

File getFilesDir():获取该应用程序的数据文件夹得绝对路径

String[] fileList():返回该应用数据文件夹的全部文件             

实际案例:界面沿用上图

核心代码如下:

openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它。创建的文件保存在/data/data/<package name>/files目录,如: /data/data/cntonyapp/files/messagetxt,

下面讲解某些特殊文件读写需要注意的地方:

读写sdcard上的文件

其中读写步骤按如下进行:

1、调用Environment的getExternalStorageState()方法判断手机上是否插了sd卡,且应用程序具有读写SD卡的权限,如下代码将返回true

EnvironmentgetExternalStorageState()equals(EnvironmentMEDIA_MOUNTED)

2、调用EnvironmentgetExternalStorageDirectory()方法来获取外部存储器,也就是SD卡的目录,或者使用"/mnt/sdcard/"目录

3、使用IO流 *** 作SD卡上的文件

注意点:手机应该已插入SD卡,对于模拟器而言,可通过mksdcard命令来创建虚拟存储卡

必须在AndroidManifestxml上配置读写SD卡的权限

<uses-permission android:name="androidpermissionMOUNT_UNMOUNT_FILESYSTEMS"/>

<uses-permission android:name="androidpermissionWRITE_EXTERNAL_STORAGE"/>

案例代码:

第三种:SQLite存储数据

SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。现在的主流移动设备像Android、iPhone等都使用SQLite作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,也许就要使用到SQLite来存储我们大量的数据,所以我们就需要掌握移动设备上的SQLite开发技巧

SQLiteDatabase类为我们提供了很多种方法,上面的代码中基本上囊括了大部分的数据库 *** 作;对于添加、更新和删除来说,我们都可以使用

以上三个方法的第一个参数都是表示要 *** 作的表名;insert中的第二个参数表示如果插入的数据每一列都为空的话,需要指定此行中某一列的名称,系统将此列设置为NULL,不至于出现错误;insert中的第三个参数是ContentValues类型的变量,是键值对组成的Map,key代表列名,value代表该列要插入的值;update的第二个参数也很类似,只不过它是更新该字段key为最新的value值,第三个参数whereClause表示WHERE表达式,比如“age > and age < ”等,最后的whereArgs参数是占位符的实际参数值;delete方法的参数也是一样

下面给出demo

数据的添加

1使用insert方法

在上面的代码示例中,已经用到了这几个常用方法中的一些,关于更多的信息,大家可以参考官方文档中的说明。

最后当我们完成了对数据库的 *** 作后,记得调用SQLiteDatabase的close()方法释放数据库连接,否则容易出现SQLiteException。

上面就是SQLite的基本应用,但在实际开发中,为了能够更好的管理和维护数据库,我们会封装一个继承自SQLiteOpenHelper类的数据库 *** 作类,然后以这个类为基础,再封装我们的业务逻辑方法。

这里直接使用案例讲解:下面是案例demo的界面

Android sqlite3数据库管理工具

Android SDK的tools目录下提供了一个sqlite3exe工具,这是一个简单的sqlite数据库管理工具。开发者可以方便的使用其对sqlite数据库进行命令行的 *** 作。

程序运行生成的db文件一般位于"/data/data/项目名(包括所处包名)/databases/db",因此要对数据库文件进行 *** 作需要先找到数据库文件:

1、进入shell 命令

adb shell

2、找到数据库文件

#cd data/data

#ls                --列出所有项目

#cd project_name   --进入所需项目名

#cd databases    

#ls                --列出现寸的数据库文件

3、进入数据库

#sqlite3 test_db   --进入所需数据库

会出现类似如下字样:

SQLite version 3622

Enter "help" for instructions

Enter SQL statements terminated with a ";"

sqlite>

至此,可对数据库进行sql *** 作。

4、sqlite常用命令

>databases        --产看当前数据库

>tables           --查看当前数据库中的表

>help             --sqlite3帮助

>schema            --各个表的生成语句

以上便是android开发存储数据的五种方法!

These files will be ones that get deleted first when the device runs low on storage There is no guarantee when these files will be deleted

但是,最好不要依赖系统来管理,应该自己设定一个最大容量,当超出这个值时自己删除。

ContextgetFilesDir(),ContextopenFileOutput(String, int),ContextgetFileStreamPath(String),ContextgetDir(String, int)

/data/data/files

Android支持在SD卡上的应用私有目录,在Froyo版本后,通过getExternalFilesDir()可以获得具体路径。该路径依赖与应用的包名,如果你包为hellofile那么SD开上的应用私有目录为\mnt\sdcard\Android\data\hellofile\files\

在使用SD卡目录时,需注意SD卡是否挂载,可通过EnvironmentgetExternalStorageState()方法进行判断,如果返回值为EnvirnmentMEDIA_MOUNTED表示SD卡处于挂载状态,可以放心使用。

getExternalCacheDir()和getCacheDir()比较

共同点:

files will be deleted when the application is uninstalled

不同点:

1、The platform does not monitor the space available in external storage, and thus will not automatically delete these files Note that you should be managing the maximum space you will use for these anyway, just like with getCacheDir()

2、External files are not always available: they will disappear if the user mounts the external storage on a computer or removes it See the APIs on Environment for information in the storage state

3、There is no security enforced with these files All applications can read and write files placed here

你通过getText()方法首先得到输入的值,然后调用数据库的插入方法

dbinsert();插入到数据库中就行

就想这样

EditText

et

;

String

num

=

etgetText()toString();

public

void

addData(String

num)

{

SQLiteDatabase

db

=

dbHelpergetWritableDatabase();

ContentValues

values

=

new

ContentValues();

valuesput("num",

num);

dbinsert("表名",

null,

values);

}

当你调用这个

addData()方法时就会向数据库中插入数据了

以上就是关于android settings怎样存储数据库全部的内容,包括:android settings怎样存储数据库、android数据库存储类型有哪些、android开发怎么存储数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/sjk/9879016.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存