android mysql储存动态数据_Android中数据存储(三)——SQLite数据库存储数据

本文介绍了Android中数据存储的五种方式,并详细讲解了使用SQLite数据库存储数据的步骤,包括创建数据库、数据的增删改查操作,强调了SQLite的弱类型特性及其在操作中的便利性。
摘要由CSDN通过智能技术生成

当一个应用程序在Android中安装后,我们在使用应用的过程中会产生很多的数据,应用都有自己的数据,那么我们应该如何存储数据呢?

数据存储方式

Android 的数据存储有5种方式:

1. SharedPreferences存储数据

SharedPreferences数据存储,也叫作xml存储。这是将数据存储“data/data/程序包名/share_prefs”路径下的到xml文件中。

2. 文件存储数据

分为内部储存和外部存储。内部存储是应用程序使用Android为自己分配的内存空间,数据存储到“/data/data/程序包名/files”路径下的相应文件中。外部存储是使用手机sdcard的内存(这个sdcard并不是我们经常说的那个可以拆卸替换的SD卡,那个SD卡我们称之为扩展卡),使用这部分内存要声明相应的权限。

3. SQLite数据库存储数据

使用数据库进行存储,这个一般数据量比较大的时候。

4. 使用ContentProvider存储数据

这个比较眼熟,ContentProvider也是Android的四大组件之一。ContentProvider一般是第三方提供的数据存储方式,向我们手机中的通讯录联系人,照片,音乐等……

5. 网络存储数据

这个是将数据上传到网络上进行存储。

下面进入我们今天的主要内容,使用SQLite数据库存储数据。

SQLite数据库存储数据

SQLite是一个轻量级关系型数据库,既然是关系型数据库,那操作起来其实跟mysql、sql server差不多的。

SQLite 和其他数据库最大的不同就是对数据类型的支持,创建一个表时,可以在 CREATE TABLE 语句中指定某列的数据类型,但是你可以把任何数据类型放入任何列中。当某个值插入数据库时,SQLite 将检查它的类型。如果该类型与关联的列不匹配,则 SQLite 会尝试将该值转换成该列的类型。如果不能转换,则该值将作为其本身具有的类型存储。比如可以把一个字符串(String)放入 INTEGER 列。SQLite 称这为“弱类型”(manifest typing.)。

对数据库SQLite进行操作,我们要借助于SQLiteOpenHelper类进行操作。对数据库的操作也就是”增、删、改、查“。在学习数据库的操作之前我们首先要学会如何创建数据库……

创建数据库

数据库的操作借助于SQLiteOpenHelper,SQLiteOpenHelper是一个抽象类,我们我们在使用SQLiteOpenHelper时要先创建一个MySQLiteOpenHelper继承SQLiteOpenHelper类。

SQLiteOpenHelper有两个非常重要的方法:getReadableDatabase()方法返回数据库是一个只读的;getWriteableDatabase()方法获得是一个可读写的数据库对象。这里我们使用getWriteableDatabase()方法获得数据库Database对象。

创建一个MySQLiteOpenHelper继承SQLiteOpenHelper类:

1 public class MySQLiteOpenHelper extendsSQLiteOpenHelper {2

3 //构造器,传入四个参数Context对象,数据库名字name,操作数据库的Cursor对象,版本号version。

4 public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, intversion) {5 super(context, name, factory, version);6 }7 //自定义的构造器

8 publicMySQLiteOpenHelper(Context context, String name) {9 this(context, name, null, 1);//传入Context和数据库的名称,调用上面那个构造器

10 }11

12 @Override13 public voidonCreate(SQLiteDatabase sqLiteDatabase) {14 //在创建数据库时,创建一个数据表table

15 String sql = "create table if not exists user(id integer primary key autoincrement, name varchar(20), passwords varchar(20))";16 sqLiteDatabase.execSQL(sql);17

18 }19 @Override20 public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, inti1) {21 //用于升级数据库,只需要在创建本类对象时传入一个比之前创建传入的version大的数即可。

22 }23 }

创建数据库:

1 //创建数据库

2 MySQLiteOpenHelper mySQLiteOpenHelper = new MySQLiteOpenHelper(getApplicationContext(), "create_db");//数据库名称为create_db。

3 SQLiteDatabase db = mySQLiteOpenHelper.getWritableDatabase();

使用SQLiteDatabase的insert(String table, String nullColumnHack, ContentValues values)方法插入数据。这个方法包含三个参数:

我们先列举一条SQLite中的插入语句:INSERT INTO user (name, passwords)] VALUES ("张三", "123456");

String table:操作的数据表的名称。

String nullColumnHack:用于我们在未指定添加数据的情况下,为数据表中可以添加null值的数据填入null值。一般这个参数我们传入null。

ContentValues values:用于传递数据,通常我们通过ContentValues 类的对象的putXXX()方法封装数据,然后将数据添加进数据库。

ContentValues 类,类似于java中的Map,以键值对的方式保存数据。

1 ContentValues value = newContentValues();2 value.put("name", "张三");//向数据表中字段名为name的字段中添加"张三"。

3 value.put("passwords", "123456");//向数据表中字段名为passwords的字段中添加"123456"。4 //db数据库对象在前面已经创建,这里直接使用。

5 db.insert("user",null, value);//在数据库的user数据表中插入:字段名name为"张三",字段名passwords为"123456"的数据。

使用SQLiteDatabase的delete(String table, String whereClause, String[] whereArgs)方法删除数据。这个方法包含三个参数:

我们先列举一条SQLite中的删除语句:DELETE FROM user WHERE name="张三"。

String table:操作的数据表的名称。

String whereClause:约束删除行的条件。相当于SQLite语句中“where name=?“内容。

String[] whereArgs:与前一个参数对应约束删除行的条件。相当于”where name=”张三““中的”张三“。

注意:如果参数String whereClause和参数String[] whereArgs都传null的话,就是删除所有行。

//db数据库对象在前面已经创建,这里直接使用。

db.delete("user", "name=?", new String[]{"张三"});

使用SQLiteDatabase的 update (String table, ContentValues values, String whereClause, String[] whereArgs)方法删除数据。这个方法包含四个参数:

我们先列举一条SQLite中的修改语句:UPDATE user SET name= "李四", passwords= "123" WHERE name="张三"。

String table:操作的数据表的名称。

ContentValues values:用于传递数据,通常我们通过ContentValues 类的对象的putXXX()方法封装数据,然后将数据添加进数据库。

String whereClause:约束修改行的条件。相当于SQLite语句中“where name=?“内容。

String[] whereArgs:与前一个参数对应约束删除行的条件。相当于”where name=”张三““中的”张三“。

1 //db数据库对象在前面已经创建,这里直接使用。

2 ContentValues values = newContentValues();3 values.put("passwords", "abcd");4 db.update("user", values, "name=?", new String[]{"张三"});

对于”查“操作,SQLiteDatabase提供了多种方法。

我们先列举一条SQLite中的修改语句:SELECT passwords="123" FROM user。

(1)使用SQL语句进行查询。这里SQLiteDatabase提供了方法:

rawQuery (String sql, String[] selectionArgs):该方法返回 Cursor类的对象,用于操作查询的结果。

1 String sql = "select * from user";2 Cursor cursor = db.rawQuery(sql, null);3 cursor.moveToFirst();//转移到结果的第一行

4 while(!cursor.isAfterLast()){5 String name=cursor.getString(cursor.getColumnIndex("name"));6 String passwords=cursor.getString(cursor.getColumnIndex("passwords"));7 Log.d("data", "name=" + name + " password=" +passwords);8 cursor.moveToNext();9 }

(2)使用SQLiteDatabase内定方法查询:

query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit):这个方法有N多个参数啊……String table是操作的数据表的名称;String selection是筛选的字段选项;String[] selectionArgs是字段选项对应的值;String groupBy是筛选结果的分组依据;String having是在由groupBy子句创建的分组上设置条件;String orderBy是结果的排序方式,String limit是筛选结果的显示限制,例如“2, 3”是指从筛选结果的第2个开始显示3个。

1 Cursor cursor=db.query("user", null, null, null, null,null, " id desc", "2,3");//limit语句 offset, num

2 cursor.moveToFirst();//转移到结果的第一行

3 while(!cursor.isAfterLast()){4 String name=cursor.getString(cursor.getColumnIndex("name"));5 String passwords=cursor.getString(cursor.getColumnIndex("passwords"));6 Log.d("data", " name=" + name + " password=" +passwords);7 cursor.moveToNext();8 }

这样数据库的操作和存储就差不多了哦,对于数据库的操作也就无非是这四种……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值