日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android数据存储之SQLite

發布時間:2023/12/18 Android 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android数据存储之SQLite 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概覽
l ?概述
l ?
CRUD方法詳解
l ?注意事項
?
概述
對于大量數據的處理,如果不想將數據存于服務器端,Android API提供了對關系數據庫SQLite的支持,在android-SDK中tool目錄下已經提供了SQLite的應用程序,用于管理數據庫中的數據。當android應用使用SQLite進行數據存儲的時候,SQLite數據庫是以文件的形式存放在SD卡中的。
?
Android API提供了SQLiteDataBase和SQLiteOpenHelp這兩個類支持數據的CRUD操作。其中SQLiteOpenHelp對數據庫創建、連接管理、版本更新進行了封裝。SQLiteDataBase提拱了豐富的增、刪、改、查的方法。
?
CRUD方法詳解
l ?新建數據庫
1. ? ? ? ?繼承SQLiteOpenHelp,重寫OnCreate()方法:
?
public class DictionaryOpenHelper extends SQLiteOpenHelper { ? ? private static final int DATABASE_VERSION = 2; ? ?private static final String DICTIONARY_TABLE_NAME = "dictionary"; ? ?private static final String DICTIONARY_TABLE_CREATE = ? ? ? ? ? ? ? ?"CREATE TABLE " + DICTIONARY_TABLE_NAME + " (" + ? ? ? ? ? ? ? ?KEY_WORD + " TEXT, " + ? ? ? ? ? ? ? ?KEY_DEFINITION + " TEXT);"; ? ? DictionaryOpenHelper(Context context) { ? ? ? ?super(context, DATABASE_NAME, null, DATABASE_VERSION); ? ?} ? ? @Override ? ?public void onCreate(SQLiteDatabase db) { ? ? ? ?db.execSQL(DICTIONARY_TABLE_CREATE); ? ?}}
另外值得注意的是,SQLiteOpenHelp類提供的另一個需要重寫的方法OnUpgrade(),用于對。
2. ? ? ? ?對于繼承的SQLiteOpenHelp之后得到的實例,通過getReadableDatabase()和getWritableDatabase()返回一個sqLiteDatabase實例實現對數據庫的讀與寫的相關操作。
SQLiteDataBase ?sqLiteDatabase = sqliteOpenHelp. getReadableDatabase ();SQLiteDataBase ?sqLiteDatabase = sqliteOpenHelp.getWritableDatabase();

?
3. ? ? ? ?sqLiteDatabase類提供的主要方法:
execSQL(String sql)Execute a single SQL statement that is NOT a SELECT or any other SQL statement that returns data. execSQL(String sql, Object[] bindArgs)Execute a single SQL statement that is NOT a SELECT/INSERT/UPDATE/DELETE. insert(String table, String nullColumnHack, ContentValues values)Convenience method for inserting a row into the database. rawQuery(String sql, String[] selectionArgs, CancellationSignal cancellationSignal)Runs the provided SQL and returns a Cursor over the result set. rawQuery(String sql, String[] selectionArgs)Runs the provided SQL and returns a Cursor over the result set.

?
l ?插入數據
ContentValues cv = new ContentValues();?? ??? ?cv.put("name",user.getName());?? ??? ?cv.put("password", user.getPassword());?? ??? ?sqLiteDatabase.insert("user", null,cv);

?
l ?查詢數據
查詢所有數據:
sqLiteDatabase = dbHelper.getReadableDatabase();?? ??? ?Cursor cursor = sqLiteDatabase.rawQuery("select * from user;", null);?? ??? ?while(cursor.moveToNext()){?? ??? ??? ?user = new User();?? ??? ??? ?user.setName(cursor.getString(cursor.getColumnIndex("name")));?? ??? ??? ?user.setPassword(cursor.getString(cursor.getColumnIndex("password")));?? ??? ??? ?list.add(user);?? ??? ?}

?
按ID查詢:
User user = new User();?? ??? ?String[] selectionArgs = {String.valueOf(id)};?? ??? ?try {?? ??? ?sqLiteDatabase = dbHelper.getReadableDatabase();?? ??? ?Cursor cursor = sqLiteDatabase.rawQuery("select * from user where _ID=?",selectionArgs);?? ??? ?while(cursor.moveToNext()){?? ??? ??? ?user.setName(cursor.getString(cursor.getColumnIndex("name")));?? ??? ??? ?user.setPassword(cursor.getString(cursor.getColumnIndex("password")));?? ??? ?}

?
l ?修改數據
sqLiteDatabase = dbHelper.getWritableDatabase();?? ??? ??? ?String[] whereArgs = {String.valueOf(user.get_ID())};?? ??? ??? ?ContentValues cv = new ContentValues();?? ??? ??? ?cv.put("name", user.getName());?? ??? ??? ?cv.put("password", user.getPassword());?? ??? ??? ?sqLiteDatabase = dbHelper.getReadableDatabase();?? ??? ??? ?sqLiteDatabase.update("user", cv, "_ID=?", whereArgs);

?
l ?刪除數據
String[] whereArgs = {String.valueOf(id)};?? ??? ??? ?sqLiteDatabase = dbHelper.getWritableDatabase();?? ??? ??? ?sqLiteDatabase.delete("user", "_ID=?", whereArgs);

?
l ?值得注意的是,execSQL方法也可以實現上述某些功能,不過根據API,該方法說明如下:

public void execSQL(String sql, Object[] bindArgs) Execute a single SQL statement that is NOT a SELECT/INSERT/UPDATE/DELETE.

官方的建議是不能用此方法執行SELECT/INSERT/UPDATE/DELETE操作:
For INSERT statements, use any of the following instead.?
?insert(String, String, ContentValues)
?insertOrThrow(String, String, ContentValues)
?insertWithOnConflict(String, String, ContentValues, int)

?For UPDATE statements, use any of the following instead.?
?update(String, ContentValues, String, String[])
?updateWithOnConflict(String, ContentValues, String, String[], int)

?For DELETE statements, use any of the following instead.?
?delete(String, String, String[])

?For example, the following are good candidates for using this method:?
?ALTER TABLE
?CREATE or DROP table / trigger / view / index / virtual table
?REINDEX
?RELEASE
?SAVEPOINT
?PRAGMA that returns no data


實現如下:
?

實現如下:
?
增加數據:
Object[]bindArgs = {user.getName(),user.getPassword()};
sqLiteDatabase.execSQL("insert into uservalues(null,?,?);", bindArgs);
?
修改數據:
Object[]whereArgs = {user.getName(),user.getPassword(),String.valueOf(user.get_ID())};
sqLiteDatabase.execSQL("update user setname=?,password=? where _ID=?", whereArgs);
?
刪除數據:
String[]whereArgs = {String.valueOf(id)};
sqLiteDatabase.execSQL("delete from user where _ID =?;", whereArgs);
?
注意事項
l ?每次事物處理完成后務必記得關閉數據庫
l ?
SQLite不支持多線程。支持同時打開、讀數據庫,但是不能同時寫。可以通過讀寫鎖來控制多線程的寫操作。
?

總結

以上是生活随笔為你收集整理的Android数据存储之SQLite的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。