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的操作。
在你的Android应用程序要创建和升级数据库需要使用子类SQLiteOpenHelper。在你的子类的构造函数中调用super()方法的SQLiteOpenHelper,指定数据库名称和当前数据库版本。
在这个类中,你需要重写onCreate()和onUpgrade()方法。
onCreate()中调用的架构,如果数据库不存在。
onUpgrade()被调用时,如果数据库版本增加了应用程序代码。这种方法允许你来更新数据库大纲。
这两种方法都接受一个SQLiteDatabase对象作为参数,它代表了数据库。
SQLiteOpenHelper提供的方法getReadableDatabase()和getWriteableDatabase()来获得一个SQLiteDatabase对象,无论是在读取或写入模式。
数据库表的主键的表中使用的标识符_id。几个版本的Android功能依赖于这个标准。
这是最好的做法是每个表创建单独的类。这个类定义静态的onCreate()和onUpdate()方法。这些方法被调用相应的方法SQLiteOpenHelper。这样实现的SQLiteOpenHelper将保持可读的,即使你有几个表。
请看实现步骤:
1. 新建一新类(继承SQLiteOpenHelper):
注意,图中红圈部分是勾选上的。默认是没有勾选的。
生成代码如下:
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 } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } }
在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 } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } }
-------------------------------------------------------转载请注明:xiaobin_hlj80----
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 stub m_database = database; } public DatabaseHandle() { // TODO Auto-generated constructor stub m_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 exception return 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 exception return 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 exception return 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; } }