导航:首页 > 操作系统 > android数据库的增删改查

android数据库的增删改查

发布时间:2025-01-19 00:04:36

android数据存储方式有哪些

Android数据存储方式有以下几种:

1. 内部存储

Android应用可以通过内部存储方式,在应用的私有文件夹内保存数据。这种存储方式使得数据只能被自己的应用访问,其他应用无法读取或修改。内部存储常用于保存应用的一些持久化数据,如用户设置、应用缓存等。

2. 共享存储

Shared Preferences是Android提供的一种轻量级的数据存储方式,主要用于保存一些简单的、小型的数据,如用户的配置信息、少量的用户生成数据等。它是通过XML文件存储数据的,因此不适合存储大量数据。

3. 数据库存储

对于更复杂、更大量的数据存储,Android提供了SQLite数据库。SQLite是一个轻量级的关系型数据库,可以在Android设备上直接进行数据存储和查询操作。开发者可以在应用中创建数据库表,存储结构化数据,如用户信息、产品信息等。

4. 网络存储

除了本地存储,Android还可以通过网络进行数据存储。这种方式的优点是数据可以跨设备访问,缺点是受网络状况影响较大。开发者可以将数据存储在远程服务器,通过API进行数据的增删改查操作。这种方式常用于存储大量数据或者需要多设备共享的数据。

以上就是Android数据存储的主要方式。不同的存储方式适用于不同的场景和需求,开发者需要根据实际情况选择合适的数据存储方式。

Ⅱ android 怎么使用sqlcipher

Android系统内置了SQLite数据库,并且提供了一整套的API用于对数据库进行增删改查操作。数据库存储是我们经常会使用到的一种存储方式,相信大多数朋友对它的使用方法都已经比较熟悉了吧。在Android中,我们既可以使用原生的SQL语句来对数据进行操作,也可以使用Android API提供的CRUD方法来对数据库进行操作,两种方式各有特点,选择使用哪一种就全凭个人喜好了。

不过,使用SQLite来存储数据却存在着一个问题。因为大多数的Android手机都是Root过的,而Root过的手机都可以进入到/data/data/<package_name>/databases目录下面,在这里就可以查看到数据库中存储的所有数据。如果是一般的数据还好,但是当涉及到一些账号密码,或者聊天内容的时候,我们的程序就会面临严重的安全漏洞隐患。那么今天,就让我们一起研究一下如何借助SQLCipher来解决这个安全性问题。

SQLCipher是一个在SQLite基础之上进行扩展的开源数据库,它主要是在SQLite的基础之上增加了数据加密功能,如果我们在项目中使用它来存储数据的话,就可以大大提高程序的安全性。SQLCipher支持很多种不同的平台,这里我们要学习的自然是Android中SQLCipher的用法了。

首先要把Android项目所依赖的SQLCipher工具包下载下来:

接着解压这个工具包,会看到里面有assets和libs这两个目录,稍后需要将这两个目录中的内容添加到Android项目当中。那么现在我们就来新建一个Android项目,项目名就叫SQLCipherTest。观察SQLCipherTest的项目结构,发现里面也分别有一个assets目录和一个libs目录,那么现在就可以把SQLCipher工具包中这两个目录里的内容复制过来。并不需要复制全部文件,选择必要的文件进行复制就可以

到这里准备工作就全部完成了,接下来我们开始编写代码。首先创建一个MyDatabaseHelper继承自SQLiteOpenHelper,注意这里使用的并不是Android API中的SQLiteOpenHelper,而是net.sqlcipher.database包下的SQLiteOpenHelper,代码如下所示:

java">[java]viewplain
importandroid.content.Context;
importnet.sqlcipher.database.SQLiteDatabase;
importnet.sqlcipher.database.SQLiteDatabase.CursorFactory;
importnet.sqlcipher.database.SQLiteOpenHelper;

{

publicstaticfinalStringCREATE_TABLE="createtableBook(nametext,pagesinteger)";

publicMyDatabaseHelper(Contextcontext,Stringname,CursorFactoryfactory,intversion){
super(context,name,factory,version);
}

@Override
publicvoidonCreate(SQLiteDatabasedb){
db.execSQL(CREATE_TABLE);
}

@Override
publicvoidonUpgrade(SQLiteDatabasedb,intarg1,intarg2){

}

}

除了引入的包不一样了,其它的用法和传统的SQLiteOpenHelper都是完全相同的。可以看到,我们在onCreate()方法中创建了一张Book表,Book表里有name和pages这两个列。

接着,打开或新建activity_main.xml作为程序的主布局文件,代码如下所示:

[html]viewplain
<LinearLayoutxmlns:android="

android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<Button
android:id="@+id/add_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="添加数据"
/>

<Button
android:id="@+id/query_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询数据"
/>

</LinearLayout>

这里只是简单地放置了两个按钮,分别用于添加和查询数据。接下来打开或新建MainActivity作为程序主Activity,代码如下所示:

[java]viewplain
{

privateSQLiteDatabasedb;

@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SQLiteDatabase.loadLibs(this);
MyDatabaseHelperdbHelper=newMyDatabaseHelper(this,"demo.db",null,1);
db=dbHelper.getWritableDatabase("secret_key");
ButtonaddData=(Button)findViewById(R.id.add_data);
ButtonqueryData=(Button)findViewById(R.id.query_data);
addData.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
ContentValuesvalues=newContentValues();
values.put("name","达芬奇密码");
values.put("pages",566);
db.insert("Book",null,values);
}
});
queryData.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
Cursorcursor=db.query("Book",null,null,null,null,null,null);
if(cursor!=null){
while(cursor.moveToNext()){
Stringname=cursor.getString(cursor.getColumnIndex("name"));
intpages=cursor.getInt(cursor.getColumnIndex("pages"));
Log.d("TAG","booknameis"+name);
Log.d("TAG","bookpagesis"+pages);
}
}
cursor.close();
}
});
}

}

可以看到,在onCreate()方法中首先调用了SQLiteDatabase的loadLibs()静态方法将SQLCipher所依赖的so库加载进来,注意这里使用的是net.sqlcipher.database包下的SQLiteDatabase。然后我们创建了MyDatabaseHelper的实例,并调用getWritableDatabase()方法去获取SQLiteDatabase对象。这里在调用getWritableDatabase()方法的时候传入了一个字符串参数,它就是SQLCipher所依赖的key,在对数据库进行加解密的时候SQLCipher都将使用这里指定的key。

在添加数据按钮的点击事件里面,我们通过ContentValues构建了一条数据,然后调用SQLiteDatabase的insert()方法将这条数据插入到Book表中。

在查询数据按钮的点击事件里面,我们调用SQLiteDatabase的query()方法来查询Book表中的数据,查询到的结果会存放在Cursor对象中,注意这里使用的是net.sqlcipher包下的Cursor。然后对Cursor对象进行遍历,并将查询到的结果打印出来。

现在运行一下程序,先点击添加数据按钮,再点击查询数据按钮,刚刚添加的那条数据就应该在控制台里打印出来了。

有没有感觉到使用SQLCipher提供的API和使用Android原生的数据库API,操作起来几乎是一模一样的。没错,SQLCipher对Android SDK中所有与数据库相关的API都制作了一份镜像,使得开发者可以像操作普遍的数据库文件一样来操作SQLCipher,而所有的数据加解密操作,SQLCipher都在背后帮我们处理好了。

阅读全文

与android数据库的增删改查相关的资料

热点内容
江苏程序员怎么样 浏览:508
捉妖股选股公式源码 浏览:539
胜利油田的社保用什么app 浏览:457
lru算法java 浏览:127
数据分析系统源码 浏览:537
论语繁体pdf 浏览:517
直上指标源码 浏览:191
pythongeohash使用 浏览:346
二维热力图python 浏览:551
如何度过程序员菜鸟阶段 浏览:505
python子图标题显示不出来 浏览:538
linux怎么看连接服务器的ip 浏览:709
windows命令行copy 浏览:65
都匀工会卡绑定什么购物App 浏览:274
c基本命令 浏览:319
远程服务器挂机如何使用 浏览:515
电脑尝试反编译 浏览:730
51单片机实时数据 浏览:747
什么工作解压最好 浏览:349
程序员三十多 浏览:964