SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是:

    NULL: 空值

    INTEGER: 整数

    REAL: 浮点数

    TEXT: 字符串

    BLOB: 大数据

  在SQLite中,并没有专门设计BOOLEAN和DATE类型,因为BOOLEAN型可以用INTEGER的0和1代替true和false,而DATE类型则可以拥有特定格式的TEXT、REAL和INTEGER的值来代替显示,为了能方便的操作DATE类型,SQLite提供了一组函数,详见:http://www.sqlite.org/lang_datefunc.html。这样简单的数据类型设计更加符合嵌入式设备的要求。关于SQLite的更多资料,请参看:http://www.sqlite.org/

  在Android系统中提供了android.database.sqlite包,用于进行SQLite数据库的增、删、改、查工作。其主要方法如下:

  beginTransaction(): 开始一个事务。

  close(): 关闭连接,释放资源。

  delete(String table, String whereClause, String[] whereArgs): 根据给定条件,删除符合条件的记录。

  endTransaction(): 结束一个事务。

  execSQL(String sql): 执行给定SQL语句。

  insert(String table, String nullColumnHack, ContentValues values): 根据给定条件,插入一条记录。 

  openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory): 根据给定条件连接数据库,如果此数据库不存在,则创建。

  query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy): 执行查询。

  rawQuery(String sql, String[] selectionArgs): 根据给定SQL,执行查询。

  update(String table, ContentValues values, String whereClause, String[] whereArgs): 根据给定条件,修改符合条件的记录。

  除了上诉主要方法外,Android还提供了诸多实用的方法,总之一句话:其实Android访问数据库是一件很方便的事儿。

  一、 创建数据库

  通过openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)方法创建数据库。    

1 SQLiteDatabase db =this.openOrCreateDatabase("test_db.db", Context.MODE_PRIVATE, null);
2 SQLiteDatabase db2 = SQLiteDatabase.openOrCreateDatabase("/data/data/com.test/databases/test_db2.db3", null);

  如上两种方式均能创建数据库,this.openOrCreateDatabase是对SQLiteDatabase.openOrCreateDatabase而来,如代码所见,原生的SQLiteDatabase.openOrCreateDatabase()方法第一参数要求输入绝对路劲,而所有的数据库都是储存于“data/data/应用报名/databases”目录下,所以输入完全的绝对路劲是一件重复且繁杂的工作。采用this.openOrCreateDatabase则省去了此操作。执行操作后的结果如下图:  

 

  另外还可以通过写一个继承SQLiteOpenHelper类的方式创建数据库,此种方式是一种更加进阶的创建方式,所以在此不做描述。

  二、创建数据表,插入数据。

  Android系统并没有提供特别的创建数据表的方法,数据表通过SQL语句创建,代码如下:

1 db.execSQL("create table tab(_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL)");

  表创建好之后,通过insert(String table, String nullColumnHack, ContentValues values)方法插入数据,其中参数含义分别为:

    table: 目标表名

    nullColumnHack: 指定表中的某列列名。因为在SQLite中,不允许不允许插入所有列均为null的记录,因此初始值有值为空时,此列需显式赋予null

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

  数据插入代码如下: 

1  ContentValues values =new ContentValues();
2 for(int i=0;i<10;i++){
3 values.put("name", "test"+ i);
4 db.insert("tab", "_id", values);
5 }

  执行此操作后,会新增一个名为“tab”的数据表,利用SQLite客户端(推荐:SQLite Expert Personal 3)可轻松查看此表结构和数据。如下图:

  

  三、修改数据

  update(String table, ContentValues values, String whereClause, String[] whereArgs)方法用于修改数据,其四个参数的具体含义如下:

    table: 目标表名

    values: 要被修改成为的新值

    whereClause: where子句,除去where关键字剩下的部分,其中可带?占位符。如没有子句,则为null。

    whereArgs: 用于替代whereClause参数中?占位符的参数。如不需传入参数,则为null。

  数据修改代码如下:

1 ContentValues values =new ContentValues();
2 values.put("name", "name");
3 db.update("tab", values, "_id=1", null);
4 db.update("tab", values, "_id=?", new String[]{"5"});

  执行结果如下图,_id=1和_id=5的数据,name字段的值被修改为了“name”。

  四、查询数据。

  之前一直使用SQLite客户端查看数据情况了,这里就使用android提供的query()和rowQuery()方法执行查询。具体代码如下:  

 1 Cursor c = db.query("tab", null, null, null, null, null, null);
2 c.moveToFirst();
3 while(!c.isAfterLast()){
4 int index = c.getColumnIndex("name");
5 Log.d("SQLite", c.getString(index));
6 c.moveToNext();
7 }
8 c = db.rawQuery("select * from tab", null);
9 c.moveToFirst();
10 while(!c.isAfterLast()){
11 int index = c.getColumnIndex("name");
12 Log.d("SQLite", c.getString(index));
13 c.moveToNext();
14 }

  查询结果如下图:

  可以清晰的在查询结果中,红线上下的数据是完全一致的,也就是说query和rawQuery方法在的不同仅仅在于所需参数的不同。rawQuery方法需要开发者手动写出查询SQL,而query方法是由目标表名、where子句、order by子句、having子句等诸多子句由系统组成SQL语句。两方法同返回Cursor对象,所以两方在使用时孰优孰劣,就看具体情况了。本人更喜欢rawQuery的方式,因为此方式更接近传统Java开发,也可以由专业DBA来书写SQL语句,这样更符合MVC的思想,而且这样的代码可读性更高。(query方法里面参数实在太多,有点记不住谁是order by子句,谁是having子句了)

  Cursor对象可以理解为游标对象,凡是对数据有所了解的人,相信对此对象都不会陌生,在这里机不再累述。只提醒一点,在第一次读取Cursor对象中的数据时,一定要先移动游标,否则此游标的位置在第一条记录之前,会引发异常。

  五、删除数据

  删除数据也是一件很简单的事,只需要调用delete方法,传入参数即可,delete(String table, String whereClause, String[] whereArgs)的参数三个参数具体含义如下:

    table: 目标表名

    whereClause: where子句,除去where关键字剩下的部分,其中可带?占位符。如没有子句,则为null。

    whereArgs: 用于替代whereClause参数中?占位符的参数。如不需传入参数,则为null。

  具体代码如下:

db.delete("tab", "_id=? or name=?", new String[]{"8", "name"});

  执行结果如下:

  其中_id=8和name=‘name’的数据统统被删除了。

  整个数据库的CRUD操作到此演示完了。最后提醒一点,在操作完数据后,一定要记得调用close()方法关闭连接,释放资源。这个原因相信大家都是懂的。

相关链接:

  Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一)——总览

  Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三)—— SharedPreferences

  Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider

欢迎加入成都-Android群:

新开博客:http://lyjbk.com

================================================================= 
亲,如果您觉得本人此博文对你有用,请不要吝啬自己的鼠标,给此博文一个“推荐”吧。

本博文系本博客主原创,版权归本博客主所有,如需转载,请注明转载地址。 
博客原始地址:wisekingokok.cnblogs.com 
=================================================================

Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite的更多相关文章

  1. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一) —— 总览

    Android数据的四种存储方式SharedPreferences.SQLite.Content Provider和File (一) —— 总览   作为一个完成的应用程序,数据存储操作是必不可少的. ...

  2. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences

    除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...

  3. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider

    ContentProvider是安卓平台中,在不同应用程序之间实现数据共享的一种机制.一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制.并且此种方式忽略了底层的数据存储实现,Cont ...

  4. (转)Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences

    除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...

  5. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File

    作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别 是:SharePreference.SQLite.Content Provider和File ...

  6. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一)

    作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File. ...

  7. [Android]Android数据的四种存储方式

    存储方式 Android提供以下四种存储方式: SharePreference SQLite File ContentProvider Android系统中数据基本都是私有的,一般存放在“data/d ...

  8. [转][Android]Android数据的四种存储方式

    android.database.sqlite类 SQLiteQueryBuilder java.lang.Object android.database.sqlite.SQLiteQueryBuil ...

  9. Android数据的四种存储方式

    作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File. ...

随机推荐

  1. SQL Server 一些重要视图4

    sys.master_files 为每一个数据库的每一个文件返回行.

  2. Open source and free log analysis and log management tools.

    Open source and free log analysis and log management tools. Maintained by Dr. Anton Chuvakin Version ...

  3. 組裝工廠設置IQC的目的

    在電子組裝工廠的組織裡,一般都會有 IQC (Incoming Quality Control) 這個單位,台灣稱之為「入(進)料管控」,大陸稱之為「來料管控」,其最主要目的在攔檢所有買進材料是否符合 ...

  4. 使用border-image实现类似iOS7的1px底边

    使用border-image实现类似iOS7的1px底边 iOS7已经发布有一段时间,扁平化设计风格有很多值得称赞的地方,其中有很多设计细节都是值得研究的. 首先,来看下面iOS设置的截图中的bord ...

  5. IOS开发之xcode 快捷键

    IOS开发也有一年多了,发现Xcode快捷键,还不熟,恶补一下.要不然真影响工作效率,呵呵! 1. 文件 CMD + N: 新文件 CMD + SHIFT + N: 新项目 CMD + O: 打开 C ...

  6. linux 使用sudo开放普通用户权限

    整理一下以前写的东东,刚才又忘了- ---------------------------------------------------------------------------------- ...

  7. 性能优化工具---top

    作用: 实时显示linux下各个进程的资源占用情况 参数: -d :后面可以接秒数,就是整个程序画面更新的秒数.预设是 5 秒: -p :指定某些个 PID 来进行观察监测而已. -b :以批次的方式 ...

  8. <转>ASP.NET学习笔记之理解MVC底层运行机制

    ASP.NET MVC架构与实战系列之一:理解MVC底层运行机制 今天,我将开启一个崭新的话题:ASP.NET MVC框架的探讨.首先,我们回顾一下ASP.NET Web Form技术与ASP.NET ...

  9. 转载:SQL语句Where中使用别名作为判断条件

    原文地址:http://www.cnblogs.com/dwfbenben/p/3307941.html 当我们使用某个表达式作为输出的一列时,我们无法再Where条件中直接使用该列作判断条件.   ...

  10. 关于bootstrap弹出二级对话框的使用

    弹出二级对话框,即在对话框的基础上再弹出一个对话框.这对于CRM管理类系统来说应用场景很常见.看到网上有关于实现二级弹出框的方法,需要在一级对话框页面上添加不少css样式.其实,完全可以不用这么麻烦. ...