公共類AlarmProvider擴展了ContentProvider //
{
私有靜態最終字符串DB _ NAME = " Alarm.db//數據庫名稱
private static final int DB _ VERSION = 1;//版本號,程序第壹次運行時,數據庫建立,如果
//妳更改數據庫,比如添加壹個表。此時,壹般會更改該值,以便安裝程序並再次運行。
//,數據庫可以自行升級。。如果不更改,通常需要手動刪除數據庫。。
私有靜態最終字符串ALARM _ TABLE _ NAME = " alarm//壹個表名
私有靜態最終int ALARM = 1;//表對應的整數值,相當於id。
私有靜態UriMatcher mUriMathcer//Uri匹配器,它建立Uri、表名和id之間的關系,如下所示:
靜態{
mUriMathcer =新的UriMatcher(UriMatcher。NO _ MATCH);
mUriMathcer.addURI(AlarmInfo。AUTH,“報警”,報警);
}
私有接口創建表接口//表創建接口
{
公共抽象void createAlarmTable(SQLiteDatabase db);
}
//內部類,數據庫幫助器類,實現表創建接口。
私有靜態類DatabaseHelper擴展SQLiteOpenHelper實現CreateTableInterface
{
create table interface mCreateTableInterface = this;
Context mContext = null
//構造函數,調用此函數後,數據庫沒有
//創建。。也就是說,下面的onCreate不會在被調用後立即調用create db。
public DatabaseHelper(Context上下文)
{
super(context,DB_NAME,null,DB _ VERSION);
//log . I(標簽," DatabaseHelper被調用!");
mContext =上下文;
}
@覆蓋
public Void Once Create(SQLite Database DB)//此方法僅在數據庫連接創建數據庫時調用壹次。
{
//創建數據庫表
mcreatetableinterface . createalarmtable(db);
}
@覆蓋
public void on upgrade(SQLite database db,int old version,int new version)//db升級時調用。
{
//log . I(標記," onUpgrade()被調用!");
db . exec SQL(" DROP TABLE IF EXISTS "+ALARM _ TABLE _ NAME);
onCreate(db);
}
@覆蓋
公共void createAlarmTable(SQLiteDatabase數據庫)
{
//創建壹個表
db . exec SQL(" CREATE TABLE "+ALARM _ TABLE _ NAME+"("
+危言聳聽。_ID+"整數主鍵,"
+危言聳聽。_LABEL+"文本不為空,"
+危言聳聽。_TIME+"文本不為空,"
+危言聳聽。_ALERT+"文本不為空,"
+危言聳聽。_REPEAT+"文本不為空,"
+危言聳聽。_ACTIVE+"文本不為空"
+");");
//在表中插入壹些數據。。。
db . exec SQL(" INSERT INTO "+ALARM _ TABLE _ NAME+"("+ALARM info。_LABEL+","
+危言聳聽。_TIME+","+危言聳聽。_ALERT+","
+危言聳聽。_REPEAT+","+AlarmInfo。_ACTIVE+
”)值('午餐鬧鈴',' 11 : 45 AM ',' "+標記。聲調+" ',' "+標記。EVERY_DAY+" ',' false ');");
db . exec SQL(" INSERT INTO "+ALARM _ TABLE _ NAME+"("+ALARM info。_LABEL+","
+危言聳聽。_TIME+","+危言聳聽。_ALERT+","
+危言聳聽。_REPEAT+","+AlarmInfo。_活動
+")值('工作警報',' 08 : 45 AM ',' "+標簽。聲調+" ',"+" '星期壹,星期二,星期三,星期四,Fri ' "
+",' false ');");
db . exec SQL(" INSERT INTO "+ALARM _ TABLE _ NAME+"("+ALARM info。_LABEL+","
+危言聳聽。_TIME+","+危言聳聽。_ALERT+","+AlarmInfo。_REPEAT+","
+危言聳聽。_活動
+")值('工作警報',' 09 : 00 AM ',' "+標簽。聲調+" ',"
+" ' "+標記。周末+" ','假');");
db . exec SQL(" INSERT INTO "+ALARM _ TABLE _ NAME+"("+ALARM info。_LABEL+","
+危言聳聽。_TIME+","+危言聳聽。_ALERT+","+AlarmInfo。_REPEAT+","
+危言聳聽。_活動
+")值(' Yoga ',' 10 : 15 PM ',' "+標記。聲調+" ',"+" '孫,周三','假');");
}
}
}
私有DatabaseHelper mDatabaseHelper//定義助手
//重寫下面的插入、刪除、更新、查詢等方法。
@覆蓋
public synchronized int delete(Uri Uri,字符串選擇,String[] selectionArgs)
{
SQLiteDatabase db = null
布爾成功=假;
int count = 0;
嘗試{
db = mdatabasehelper . getwritabledatabase();
db . acquire reference();
成功=真;
開關(mUriMathcer.match(uri)){
案例警報:
count = db . delete(ALARM _ TABLE _ NAME,selection,selection args);
打破;
}
}catch(SQLException e){
e . printstacktrace();
}最後{
if(success == true){
db . release reference();
}
}
返回計數;
}
@覆蓋
公共字符串getType(Uri uri)
{
開關(mUriMathcer.match(uri)){
案例警報:
返回AlarmInfo。內容類型;
默認值:
拋出new IllegalArgumentException("未知URI "+uri);
}
}
@覆蓋
公共同步Uri插入(Uri uri,ContentValues initValues)
{
SQLiteDatabase mSQLiteDatabase = null;
布爾成功=假;
嘗試{
mSQLiteDatabase = mdatabasehelper . getwritabledatabase();
msqlitedatabase . acquire reference();
成功=真;
long mRowId
ContentValues值;
if(initValues == null){
values = new content values();
}否則{
values = initValues
}
開關(mUriMathcer.match(uri)){
案例警報:
mro wid = msqlitedatabase . insert(ALARM _ TABLE _ NAME,
危言聳聽。_ID,values);
if(mro wid & gt;0){
返回uri
}否則{
拋出新的SQLException("未能插入"+uri);
}
}
}catch(SQLException e){
e . printstacktrace();
}最後{
if(成功==真)
msqlitedatabase . release reference();
}
返回null
}
@覆蓋
public boolean onCreate()
{
//log . I("報警提供者"," onCreate()... ");
mDatabaseHelper = new database helper(get context());
返回true
}
@覆蓋
公共同步遊標查詢(Uri uri,String[]投影,字符串選擇,
String[] selectionArgs,String sortOrder)
{
SQLiteQueryBuilder mSQLiteQueryBuilder = new SQLiteQueryBuilder();
開關(mUriMathcer.match(uri)){
案例警報:
msqlitequerybuilder . settables(ALARM _ TABLE _ NAME);
打破;
}
SQLiteDatabase mSQLiteDatabase = mdatabasehelper . getwritabledatabase();
msqlitedatabase . acquire reference();
cursor mCursor = msqlitequerybuilder . query(mSQLiteDatabase,projection,
selection,selectionArgs,null,null,sort order);
msqlitedatabase . release reference();
返回mCursor
}
@覆蓋
公共同步int更新(Uri uri,ContentValues值,字符串選擇,
String[] selectionArgs)
{
SQLiteDatabase mSQLiteDatabase = null;
int count = 0;
布爾成功=假;
嘗試{
mSQLiteDatabase = mdatabasehelper . getwritabledatabase();
msqlitedatabase . acquire reference();
成功=真;
開關(mUriMathcer.match(uri)){
案例警報:
count = msqlite database . update(ALARM _ TABLE _ NAME,values,
selection,selection args);
打破;
默認值:
打破;
}
}catch(SQLException e){
e . printstacktrace();
}最後{
if(成功==真)
msqlitedatabase . release reference();
}
返回計數;
}
}
可以參考安卓報警、查詢、更新等方法的源代碼,基本不做任何改動,只是替換表名。或者補充壹個案例。