5.3 Android对SQLite的支持

Android 在运行时(run-time)集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库。对于熟悉 SQL 的开发人员来时,在 Android 开发中使用 SQLite 相当简单。但是,由于 JDBC 会消耗太多的系统资源,所以 JDBC 对于手机这种内存受限设备来说并不合适。因此,Android 提供了一些新的 API 来使用 SQLite 数据库,Android 开发中,程序员需要学会使用这些 API。

每个版本的Android SDK又有一些区别。

因为外键在大部分系统使用比较多,但是SQLite在3.6.19版本中才开始支持外键约束。而且默认是关闭的。如果要启用该功能 需要使用如下语句:

PRAGMA foreign_keys = ON

在Android 2.1以前的版本使用的SQLite版本是3.5.9, 在2.2版本中使用的是3.6.22.

可以通过如下命令查看SQLite的版本:

(路径:%ANDROID_SDK%\tools)

sqlite3 -version

注意:数据库存储在DATA/data/APP_NAME/databases/FILENAME。

DATAis the path which theEnvironment.getDataDirectory()method returns.APP_NAMEis your applicationname.FILENAMEis the name you specifyin your application code for the database.

包android.database.sqlite内包含了所有的android对sqlite的操作。

5.3.0 数据库的创建或升级

在你的Android应用程序要创建和升级数据库需要使用子类SQLiteOpenHelper。在你的子类的构造函数中调用super()方法的SQLiteOpenHelper,指定数据库名称和当前数据库版本。

在这个类中,你需要重写onCreate()和onUpgrade()方法。

onCreate()中调用的架构,如果数据库不存在。

onUpgrade()被调用时,如果数据库版本增加了应用程序代码。这种方法允许你来更新数据库大纲。

这两种方法都接受一个SQLiteDatabase对象作为参数,它代表了数据库。

SQLiteOpenHelper提供的方法getReadableDatabase()和getWriteableDatabase()来获得一个SQLiteDatabase对象,无论是在读取或写入模式。

数据库表的主键的表中使用的标识符_id。几个版本的Android功能依赖于这个标准。

这是最好的做法是每个表创建单独的类。这个类定义静态的onCreate()和onUpdate()方法。这些方法被调用相应的方法SQLiteOpenHelper。这样实现的SQLiteOpenHelper将保持可读的,即使你有几个表。

请看实现步骤:

1. 新建一新类(继承SQLiteOpenHelper):

嵌入数据库SQLite(3) - Android_第1张图片

注意,图中红圈部分是勾选上的。默认是没有勾选的。

生成代码如下:

package com.example.sqlite;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class SQLiteOperDB extends SQLiteOpenHelper {public SQLiteOperDB(Context context, String name, CursorFactory factory,int version) {super(context, name, factory, version);// TODO Auto-generated constructor stub}@Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stub}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stub}}

5.3.1 数据库DDL操作

在Android中进行数据库的操作主要是通过继承SQLiteOpenHelper 来实现的。

其构造方法实现了数据库的创建或打开操作。其参数说明如下:

1) Context context上下文环境(例如,一个 Activity)

2) String name 数据库名字

3) CursorFactoryfactory 一个可选的游标工厂(通常是 Null)

4) int version 一个代表你正在使用的数据库模型版本的整数

其余的两个方法可用可不用,根据实际情况而定!

1. onCreate()方法

创建或打开时触发的事件

1) SQLiteDatabase db

根据SQLiteDatabase对象填充表和初始化数据

2. onUpgrage() 方法

数据库升级时触发的事件

1) SQLiteDatabase db

要升级的数据库

2) int oldVersion

老版本(整数)

3) int newVersion

新版本(整数)

示例代码如下:

SQLiteOperDB.java

package com.example.sqlite;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;public class SQLiteOperDB extends SQLiteOpenHelper {public SQLiteOperDB(Context context, String name, CursorFactory factory,int version) {super(context, name, factory, version);// TODO Auto-generated constructor stub}@Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stub}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stub}}

-------------------------------------------------------转载请注明:xiaobin_hlj80----

5.3.2 数据操作(CRUD)

Android的数据操作主要是对SQLiteDatabase 的操作!

1. 增加数据

insert(String table, String nullColumnHack,ContentValues values)

参数说明:

1) String table

要操作的表名

2) String nullColumnHack

防止插入的数据失败,默认插入null

3) ContentValues values

数据对象

2. 查询数据

query(String table, String[] columns, Stringselection, String[] selectionArgs, String groupBy, String having, StringorderBy)

参数说明:

1) String table

要操作的表名

2) String[] columns

要操作的列

3) String selection

条件列

4) String[] selectionArgs

条件

5) String groupBy

group by 子句

6) String having

having 子句

7) String orderBy

order by 子句

3. 修改数据

update(String table, ContentValues values,String whereClause, String[] whereArgs)

参数说明:

1) String table

要操作的表名

2) ContentValues values

数据对象

3) String whereClause

条件列

4) String[] whereArgs

条件

4. 删除数据

delete(String table, String whereClause,String[] whereArgs)

参数说明:

1) String table

要操作的表名

2) String whereClause

条件列

3) String[] whereArgs

条件

示例代码如下:

DatabaseHandle.java

package com.example.sqlite;import java.util.ArrayList;import java.util.List;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;public class DatabaseHandle {private SQLiteOperDB m_database;private SQLiteDatabase db;public DatabaseHandle(SQLiteOperDB database) {// TODO Auto-generated constructor stubm_database = database;}public DatabaseHandle() {// TODO Auto-generated constructor stubm_database = null;}/** *  * @param values * @param table * @return */public Boolean addRecord( ContentValues values, String table) {try {db = m_database.getWritableDatabase();db.insert(table, null, values);return true;} catch (Exception e) {// TODO: handle exceptionreturn false;}}/** *  * @param table * @param column * @param whereArgs * @return */public Boolean deleteRecord(String table, String column, String[] whereArgs) {try {db = m_database.getWritableDatabase();db.delete(table, column, whereArgs);return true;} catch (Exception e) {// TODO: handle exceptionreturn false;}}/** *  * @param table * @param values * @param column * @param whereArgs * @return */public Boolean modifyRecord(String table, ContentValues values, String column, String[] whereArgs) {try {db = m_database.getWritableDatabase();db.update(table, values, column, whereArgs);return true;} catch (Exception e) {// TODO: handle exceptionreturn false;}}public Object getRecord(String table, String[] columns, String whereColumn,String[] whereArgs,String groupBy,String having,String orderBy,Object javaBean) {SQLiteDatabase db = m_database.getReadableDatabase();Cursor cursor = db.query(table, columns, whereColumn + "=?", whereArgs, groupBy, having, orderBy);if (cursor != null)cursor.moveToFirst();Convert2Bean bean = null;return bean.convertCursor(javaBean, cursor);}public List<Object> getRecords(String sql, Object javaBean) {List<Object> result = new ArrayList<Object>();db = m_database.getReadableDatabase();Cursor cursor =  db.rawQuery(sql, null);if (cursor.moveToFirst()) {do {Convert2Bean bean = null;result.add(bean.convertCursor(javaBean, cursor));} while (cursor.moveToNext());}return result;}}



更多相关文章

  1. android读取sqlite数据库的数据并用listview显示
  2. Android 文件读写操作方法总结
  3. cocos2d-x 2.x版本之win32 window移植android 环境搭配 只用NDK
  4. 低版本android project在高版本ADK中运行方法
  5. android创建隐藏文件或者文件夹,并对其读写操作
  6. Android百度地图——定位SDK(版本v3.1)(二)

随机推荐

  1. 简单计算器
  2. 为什么我们要面向接口编程?!
  3. html常用标签
  4. 第一节课作业
  5. 数组的方法
  6. Linux常用命令大全
  7. PHP8新特性之JIT案例讲解
  8. 简单计算器
  9. HTML常用标签
  10. 带有二级分类的导航