首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

嵌入数据库SQLite(三) - Android

2012-11-21 
嵌入数据库SQLite(3) - Android5.3 Android对SQLite的支持Android 在运行时(run-time)集成了 SQLite,所以

嵌入数据库SQLite(3) - Android

 

 

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。

 DATA is the path which theEnvironment.getDataDirectory() method returns. APP_NAME is your applicationname. FILENAME is 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(三) - Android

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

 

生成代码如下:

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;}}



热点排行