導航:首頁 > 操作系統 > android資料庫的增刪改查

android資料庫的增刪改查

發布時間:2025-01-19 00:04:36

android數據存儲方式有哪些

Android數據存儲方式有以下幾種:

1. 內部存儲

Android應用可以通過內部存儲方式,在應用的私有文件夾內保存數據。這種存儲方式使得數據只能被自己的應用訪問,其他應用無法讀取或修改。內部存儲常用於保存應用的一些持久化數據,如用戶設置、應用緩存等。

2. 共享存儲

Shared Preferences是Android提供的一種輕量級的數據存儲方式,主要用於保存一些簡單的、小型的數據,如用戶的配置信息、少量的用戶生成數據等。它是通過XML文件存儲數據的,因此不適合存儲大量數據。

3. 資料庫存儲

對於更復雜、更大量的數據存儲,Android提供了SQLite資料庫。SQLite是一個輕量級的關系型資料庫,可以在Android設備上直接進行數據存儲和查詢操作。開發者可以在應用中創建資料庫表,存儲結構化數據,如用戶信息、產品信息等。

4. 網路存儲

除了本地存儲,Android還可以通過網路進行數據存儲。這種方式的優點是數據可以跨設備訪問,缺點是受網路狀況影響較大。開發者可以將數據存儲在遠程伺服器,通過API進行數據的增刪改查操作。這種方式常用於存儲大量數據或者需要多設備共享的數據。

以上就是Android數據存儲的主要方式。不同的存儲方式適用於不同的場景和需求,開發者需要根據實際情況選擇合適的數據存儲方式。

Ⅱ android 怎麼使用sqlcipher

Android系統內置了SQLite資料庫,並且提供了一整套的API用於對資料庫進行增刪改查操作。資料庫存儲是我們經常會使用到的一種存儲方式,相信大多數朋友對它的使用方法都已經比較熟悉了吧。在Android中,我們既可以使用原生的SQL語句來對數據進行操作,也可以使用Android API提供的CRUD方法來對資料庫進行操作,兩種方式各有特點,選擇使用哪一種就全憑個人喜好了。

不過,使用SQLite來存儲數據卻存在著一個問題。因為大多數的Android手機都是Root過的,而Root過的手機都可以進入到/data/data/<package_name>/databases目錄下面,在這里就可以查看到資料庫中存儲的所有數據。如果是一般的數據還好,但是當涉及到一些賬號密碼,或者聊天內容的時候,我們的程序就會面臨嚴重的安全漏洞隱患。那麼今天,就讓我們一起研究一下如何藉助SQLCipher來解決這個安全性問題。

SQLCipher是一個在SQLite基礎之上進行擴展的開源資料庫,它主要是在SQLite的基礎之上增加了數據加密功能,如果我們在項目中使用它來存儲數據的話,就可以大大提高程序的安全性。SQLCipher支持很多種不同的平台,這里我們要學習的自然是Android中SQLCipher的用法了。

首先要把Android項目所依賴的SQLCipher工具包下載下來:

接著解壓這個工具包,會看到裡面有assets和libs這兩個目錄,稍後需要將這兩個目錄中的內容添加到Android項目當中。那麼現在我們就來新建一個Android項目,項目名就叫SQLCipherTest。觀察SQLCipherTest的項目結構,發現裡面也分別有一個assets目錄和一個libs目錄,那麼現在就可以把SQLCipher工具包中這兩個目錄里的內容復制過來。並不需要復制全部文件,選擇必要的文件進行復制就可以

到這里准備工作就全部完成了,接下來我們開始編寫代碼。首先創建一個MyDatabaseHelper繼承自SQLiteOpenHelper,注意這里使用的並不是Android API中的SQLiteOpenHelper,而是net.sqlcipher.database包下的SQLiteOpenHelper,代碼如下所示:

java">[java]viewplain
importandroid.content.Context;
importnet.sqlcipher.database.SQLiteDatabase;
importnet.sqlcipher.database.SQLiteDatabase.CursorFactory;
importnet.sqlcipher.database.SQLiteOpenHelper;

{

publicstaticfinalStringCREATE_TABLE="createtableBook(nametext,pagesinteger)";

publicMyDatabaseHelper(Contextcontext,Stringname,CursorFactoryfactory,intversion){
super(context,name,factory,version);
}

@Override
publicvoidonCreate(SQLiteDatabasedb){
db.execSQL(CREATE_TABLE);
}

@Override
publicvoidonUpgrade(SQLiteDatabasedb,intarg1,intarg2){

}

}

除了引入的包不一樣了,其它的用法和傳統的SQLiteOpenHelper都是完全相同的。可以看到,我們在onCreate()方法中創建了一張Book表,Book表裡有name和pages這兩個列。

接著,打開或新建activity_main.xml作為程序的主布局文件,代碼如下所示:

[html]viewplain
<LinearLayoutxmlns:android="

android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<Button
android:id="@+id/add_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="添加數據"
/>

<Button
android:id="@+id/query_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查詢數據"
/>

</LinearLayout>

這里只是簡單地放置了兩個按鈕,分別用於添加和查詢數據。接下來打開或新建MainActivity作為程序主Activity,代碼如下所示:

[java]viewplain
{

privateSQLiteDatabasedb;

@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SQLiteDatabase.loadLibs(this);
MyDatabaseHelperdbHelper=newMyDatabaseHelper(this,"demo.db",null,1);
db=dbHelper.getWritableDatabase("secret_key");
ButtonaddData=(Button)findViewById(R.id.add_data);
ButtonqueryData=(Button)findViewById(R.id.query_data);
addData.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
ContentValuesvalues=newContentValues();
values.put("name","達芬奇密碼");
values.put("pages",566);
db.insert("Book",null,values);
}
});
queryData.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
Cursorcursor=db.query("Book",null,null,null,null,null,null);
if(cursor!=null){
while(cursor.moveToNext()){
Stringname=cursor.getString(cursor.getColumnIndex("name"));
intpages=cursor.getInt(cursor.getColumnIndex("pages"));
Log.d("TAG","booknameis"+name);
Log.d("TAG","bookpagesis"+pages);
}
}
cursor.close();
}
});
}

}

可以看到,在onCreate()方法中首先調用了SQLiteDatabase的loadLibs()靜態方法將SQLCipher所依賴的so庫載入進來,注意這里使用的是net.sqlcipher.database包下的SQLiteDatabase。然後我們創建了MyDatabaseHelper的實例,並調用getWritableDatabase()方法去獲取SQLiteDatabase對象。這里在調用getWritableDatabase()方法的時候傳入了一個字元串參數,它就是SQLCipher所依賴的key,在對資料庫進行加解密的時候SQLCipher都將使用這里指定的key。

在添加數據按鈕的點擊事件裡面,我們通過ContentValues構建了一條數據,然後調用SQLiteDatabase的insert()方法將這條數據插入到Book表中。

在查詢數據按鈕的點擊事件裡面,我們調用SQLiteDatabase的query()方法來查詢Book表中的數據,查詢到的結果會存放在Cursor對象中,注意這里使用的是net.sqlcipher包下的Cursor。然後對Cursor對象進行遍歷,並將查詢到的結果列印出來。

現在運行一下程序,先點擊添加數據按鈕,再點擊查詢數據按鈕,剛剛添加的那條數據就應該在控制台里列印出來了。

有沒有感覺到使用SQLCipher提供的API和使用Android原生的資料庫API,操作起來幾乎是一模一樣的。沒錯,SQLCipher對Android SDK中所有與資料庫相關的API都製作了一份鏡像,使得開發者可以像操作普遍的資料庫文件一樣來操作SQLCipher,而所有的數據加解密操作,SQLCipher都在背後幫我們處理好了。

閱讀全文

與android資料庫的增刪改查相關的資料

熱點內容
linux遠程桌面連接命令 瀏覽:857
adams教程pdf 瀏覽:264
Arm和單片機區別 瀏覽:559
阿里雲伺服器綁定主機頭 瀏覽:949
游戲手機什麼最好用安卓 瀏覽:11
江蘇程序員怎麼樣 瀏覽:510
捉妖股選股公式源碼 瀏覽:541
勝利油田的社保用什麼app 瀏覽:460
lru演算法java 瀏覽:129
數據分析系統源碼 瀏覽:539
論語繁體pdf 瀏覽:517
直上指標源碼 瀏覽:193
pythongeohash使用 瀏覽:348
二維熱力圖python 瀏覽:553
如何度過程序員菜鳥階段 瀏覽:505
python子圖標題顯示不出來 瀏覽:538
linux怎麼看連接伺服器的ip 瀏覽:709
windows命令行copy 瀏覽:65
都勻工會卡綁定什麼購物App 瀏覽:274
c基本命令 瀏覽:319