每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的、与操作系统无关的sql数据库 --大名鼎鼎的sqlite。sqlite是一款轻量级数据库,它的设计目的是嵌入式,而且它占用的资源非常少,在嵌入式设备中,可能只需要几百KB,这也是 Android 系统采用 sqlite 数据库的原因之一吧。
简介@H_403_6@
- 轻量级
使用 sqlite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。
@H_403_6@ - 独立性
sqlite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。
@H_403_6@ - 隔离性
sqlite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。
@H_403_6@ - 跨平台
sqlite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统也是能够运行,比如:Android。
@H_403_6@ - 多语言接口
sqlite 数据库支持多语言编程接口。
@H_403_6@ - 安全性
sqlite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据。@H_403_6@
sqlite使用介绍
@H_403_6@首先先来看一下本篇例子继承 sqliteOpenHelper 类实现的 dbHelper 类。@H_403_6@
package@H_403_6@
com.terry;
@H_403_6@ import@H_403_6@ android.content.ContentValues;
@H_403_6@ android.content.Context;
@H_403_6@ android.database.Cursor;
@H_403_6@ android.database.sqlite.sqliteDatabase;
@H_403_6@ android.database.sqlite.sqliteOpenHelper;
@H_403_6@ android.database.sqlite.sqliteDatabase.CursorFactory;
@H_403_6@ public@H_403_6@ @H_403_6@ class@H_403_6@ dbHelper@H_403_6@ extends@H_403_6@ sqliteOpenHelper{
@H_403_6@ private@H_403_6@ final@H_403_6@ static@H_403_6@ StringDATABASE_NAME@H_403_6@ =@H_403_6@ "@H_403_6@ sec_db@H_403_6@ ;
@H_403_6@ int@H_403_6@ DATABASE_VERSION@H_403_6@ 1@H_403_6@ StringTABLE_NAME@H_403_6@ sec_pwd@H_403_6@ StringFIELD_ID@H_403_6@ _id@H_403_6@ StringFIELD_TITLE@H_403_6@ sec_Title@H_403_6@ ;
@H_403_6@ dbHelper(Contextcontext)
{
@H_403_6@ super@H_403_6@ (context,DATABASE_NAME,@H_403_6@ null@H_403_6@ ,DATABASE_VERSION);
}
@Override
@H_403_6@ void@H_403_6@ onCreate(sqliteDatabasedb){
@H_403_6@ //@H_403_6@ TODOAuto-generatedmethodstub@H_403_6@
@H_403_6@ Stringsql@H_403_6@ Createtable@H_403_6@ +@H_403_6@ TABLE_NAME@H_403_6@ (@H_403_6@ FIELD_ID@H_403_6@ integerprimarykeyautoincrement,0)">FIELD_TITLE@H_403_6@ text);@H_403_6@ ;
db.execsql(sql);
}
@Override
@H_403_6@ onUpgrade(sqliteDatabasedb,0)">oldVersion,0)">newVersion){
@H_403_6@ DROPTABLEIFEXISTS@H_403_6@ TABLE_NAME;
db.execsql(sql);
onCreate(db);
}
@H_403_6@ Cursorselect()
{
sqliteDatabasedb@H_403_6@ this@H_403_6@ .getReadableDatabase();
Cursorcursor@H_403_6@ db.query(TABLE_NAME,0)">_iddesc@H_403_6@ );
@H_403_6@ return@H_403_6@ cursor;
}
@H_403_6@ long@H_403_6@ insert(StringTitle)
{
sqliteDatabasedb@H_403_6@ .getWritableDatabase();
ContentValuescv@H_403_6@ new@H_403_6@ ContentValues();
cv.put(FIELD_TITLE,Title);
@H_403_6@ row@H_403_6@ db.insert(TABLE_NAME,cv);
@H_403_6@ row;
}
@H_403_6@ delete(@H_403_6@ id)
{
sqliteDatabasedb@H_403_6@ .getWritableDatabase();
Stringwhere@H_403_6@ =?@H_403_6@ ;
String[]whereValue@H_403_6@ {Integer.toString(id)};
db.delete(TABLE_NAME,where,whereValue);
}
@H_403_6@ update(@H_403_6@ id,StringTitle)
{
sqliteDatabasedb@H_403_6@ {Integer.toString(id)};
ContentValuescv@H_403_6@ 403_6@
@H_403_6@ import@H_403_6@ android.content.ContentValues;
@H_403_6@ android.content.Context;
@H_403_6@ android.database.Cursor;
@H_403_6@ android.database.sqlite.sqliteDatabase;
@H_403_6@ android.database.sqlite.sqliteOpenHelper;
@H_403_6@ android.database.sqlite.sqliteDatabase.CursorFactory;
@H_403_6@ public@H_403_6@ @H_403_6@ class@H_403_6@ dbHelper@H_403_6@ extends@H_403_6@ sqliteOpenHelper{
@H_403_6@ private@H_403_6@ final@H_403_6@ static@H_403_6@ StringDATABASE_NAME@H_403_6@ =@H_403_6@ "@H_403_6@ sec_db@H_403_6@ ;
@H_403_6@ int@H_403_6@ DATABASE_VERSION@H_403_6@ 1@H_403_6@ StringTABLE_NAME@H_403_6@ sec_pwd@H_403_6@ StringFIELD_ID@H_403_6@ _id@H_403_6@ StringFIELD_TITLE@H_403_6@ sec_Title@H_403_6@ ;
@H_403_6@ dbHelper(Contextcontext)
{
@H_403_6@ super@H_403_6@ (context,DATABASE_NAME,@H_403_6@ null@H_403_6@ ,DATABASE_VERSION);
}
@Override
@H_403_6@ void@H_403_6@ onCreate(sqliteDatabasedb){
@H_403_6@ //@H_403_6@ TODOAuto-generatedmethodstub@H_403_6@
@H_403_6@ Stringsql@H_403_6@ Createtable@H_403_6@ +@H_403_6@ TABLE_NAME@H_403_6@ (@H_403_6@ FIELD_ID@H_403_6@ integerprimarykeyautoincrement,0)">FIELD_TITLE@H_403_6@ text);@H_403_6@ ;
db.execsql(sql);
}
@Override
@H_403_6@ onUpgrade(sqliteDatabasedb,0)">oldVersion,0)">newVersion){
@H_403_6@ DROPTABLEIFEXISTS@H_403_6@ TABLE_NAME;
db.execsql(sql);
onCreate(db);
}
@H_403_6@ Cursorselect()
{
sqliteDatabasedb@H_403_6@ this@H_403_6@ .getReadableDatabase();
Cursorcursor@H_403_6@ db.query(TABLE_NAME,0)">_iddesc@H_403_6@ );
@H_403_6@ return@H_403_6@ cursor;
}
@H_403_6@ long@H_403_6@ insert(StringTitle)
{
sqliteDatabasedb@H_403_6@ .getWritableDatabase();
ContentValuescv@H_403_6@ new@H_403_6@ ContentValues();
cv.put(FIELD_TITLE,Title);
@H_403_6@ row@H_403_6@ db.insert(TABLE_NAME,cv);
@H_403_6@ row;
}
@H_403_6@ delete(@H_403_6@ id)
{
sqliteDatabasedb@H_403_6@ .getWritableDatabase();
Stringwhere@H_403_6@ =?@H_403_6@ ;
String[]whereValue@H_403_6@ {Integer.toString(id)};
db.delete(TABLE_NAME,where,whereValue);
}
@H_403_6@ update(@H_403_6@ id,StringTitle)
{
sqliteDatabasedb@H_403_6@ {Integer.toString(id)};
ContentValuescv@H_403_6@ 403_6@
- 创建和打开数据库
上篇通过构造函数来创建数据库,看一下构造函数的方法android.database.sqlite.sqliteOpenHelper.sqliteOpenHelper(Contextcontext,Stringname,CursorFactoryfactory,@H_403_6@ int@H_403_6@ version)
@H_403_6@ public@H_403_6@ sqliteOpenHelper(Contextcontext,sqliteDatabase.CursorFactoryfactory,0)">version)
Since:APILevel@H_403_6@ 1@H_403_6@
Createahelperobjecttocreate,open,and@H_403_6@ /@H_403_6@ ormanageadatabase.ThedatabaseisnotactuallycreatedoropeneduntiloneofgetWritableDatabase()orgetReadableDatabase()iscalled.
Parameters
contexttousetoopenorcreatethedatabase
nameofthedatabasefile,or@H_403_6@ null@H_403_6@ @H_403_6@ for@H_403_6@ anin@H_403_6@ -@H_403_6@ memorydatabase
factorytouse@H_403_6@ creatingcursorobjects,0)">the@H_403_6@ default@H_403_6@
versionnumberofthedatabase(startingat@H_403_6@ );@H_403_6@ if@H_403_6@ thedatabaseisolder,onUpgrade(sqliteDatabase,0)">)willbeusedtoupgradethedatabase
PublicMethods@H_403_6@
- 创建表--》Create Table
一个数据库中可以包含多个表,每一条数据都存在指定的表中,要创建可以通过 execsql 方法来执行一条 sql 语句。上面的方法为@H_403_6@代码@H_403_6@void@H_403_6@ onCreate(sqliteDatabasedb){
@H_403_6@ //@H_403_6@ TODOAuto-generatedmethodstub@H_403_6@
@H_403_6@ Stringsql@H_403_6@ =@H_403_6@ "@H_403_6@ Createtable@H_403_6@ +@H_403_6@ TABLE_NAME@H_403_6@ (@H_403_6@ FIELD_ID@H_403_6@ FIELD_TITLE@H_403_6@ text);@H_403_6@ ;
db.execsql(sql);
}
@H_403_6@