新聞中心
隨著移動設(shè)備的普及,Android設(shè)備已經(jīng)成為人們?nèi)粘J褂玫闹饕K端。在Android應(yīng)用程序中,數(shù)據(jù)庫連接是常見的需求,而在多個(gè)應(yīng)用程序享數(shù)據(jù)庫連接也是一種常見的需求。本文將介紹在Android平臺中實(shí)現(xiàn)數(shù)據(jù)庫連接共享的方法。

Android數(shù)據(jù)存儲
在Android平臺上,數(shù)據(jù)存儲有多種方式,其中最常用的是SQLite數(shù)據(jù)庫。SQLite是一個(gè)輕量級的關(guān)系型數(shù)據(jù)庫,簡單易用,且支持多線程訪問。同時(shí),Android也提供了SharedPreferences、文件存儲等簡單的數(shù)據(jù)存儲方式,但是這些存儲方式的使用場景相對來說比較有限。
在Android應(yīng)用程序的數(shù)據(jù)存儲中,需要注意以下幾個(gè)方面:
1. 數(shù)據(jù)的讀寫權(quán)限
2. 數(shù)據(jù)的安全性
3. 數(shù)據(jù)的性能
為了滿足這些要求,需要使用合適的數(shù)據(jù)存儲方式,并將數(shù)據(jù)存儲在合適的位置。
Android應(yīng)用程序的數(shù)據(jù)庫訪問方式
Android提供了SQLiteOpenHelper和ContentProvider兩種常見的數(shù)據(jù)庫訪問方式。
SQLiteOpenHelper是一個(gè)幫助開發(fā)者管理SQLite數(shù)據(jù)庫的工具類,可以幫助開發(fā)者創(chuàng)建、升級和刪除數(shù)據(jù)庫。使用SQLiteOpenHelper可以簡化代碼,提高效率。
ContentProvider是一個(gè)在應(yīng)用程序之間共享數(shù)據(jù)的機(jī)制。通過ContentProvider,應(yīng)用程序可以將數(shù)據(jù)暴露給其他應(yīng)用程序使用。ContentProvider提供了對數(shù)據(jù)的統(tǒng)一訪問接口,可以通過Uri來訪問數(shù)據(jù)。
Android應(yīng)用程序中的數(shù)據(jù)庫連接共享
現(xiàn)實(shí)開發(fā)中,多個(gè)應(yīng)用程序可能需要對同一個(gè)數(shù)據(jù)庫進(jìn)行讀寫操作,為了提高數(shù)據(jù)庫的訪問效率,我們可以將數(shù)據(jù)庫連接共享,以減少連接數(shù)據(jù)庫的時(shí)間和資源開銷。
在Android平臺上,實(shí)現(xiàn)數(shù)據(jù)庫連接共享的方法有多種,下面將從以下兩個(gè)方面進(jìn)行介紹:
1. 通過ContentProvider共享數(shù)據(jù)庫連接
2. 使用第三方工具庫進(jìn)行數(shù)據(jù)庫連接共享
1. 通過ContentProvider共享數(shù)據(jù)庫連接
ContentProvider是Android應(yīng)用程序之間共享數(shù)據(jù)的主要機(jī)制,我們可以通過ContentProvider來實(shí)現(xiàn)共享數(shù)據(jù)庫連接的需求。
具體實(shí)現(xiàn)方法如下:
1. 定義一個(gè)ContentProvider類,并在類中創(chuàng)建一個(gè)SQLiteOpenHelper對象,負(fù)責(zé)連接和管理數(shù)據(jù)庫連接。
2. 在ContentProvider的onCreate()方法中創(chuàng)建SQLiteOpenHelper對象,獲取數(shù)據(jù)庫連接。
3. 在其他應(yīng)用程序中,通過ContentResolver對象和ContentProvider定義的Uri來讀寫數(shù)據(jù),ContentProvider內(nèi)部獲取數(shù)據(jù)庫連接,執(zhí)行數(shù)據(jù)庫操作。
缺點(diǎn):ContentProvider需要對外暴露Uri接口,容易受到未授權(quán)的訪問。
2. 使用第三方工具庫進(jìn)行數(shù)據(jù)庫連接共享
除了使用ContentProvider之外,我們還可以使用第三方工具庫來實(shí)現(xiàn)數(shù)據(jù)庫連接共享。目前比較常用的有GreenDAO和OrmLite這兩個(gè)工具庫。
這兩個(gè)工具庫都是開源的,具有不同的優(yōu)點(diǎn)和特點(diǎn):
GreenDAO是一個(gè)輕量級的ORM工具,支持Android平臺,可以將Java對象映射到SQLite數(shù)據(jù)庫中,提供方便快捷的數(shù)據(jù)庫訪問接口,同時(shí)還支持多線程訪問。
OrmLite是一個(gè)更加全面的ORM工具庫,支持Android和Java平臺,不僅可以將Java對象映射到SQLite數(shù)據(jù)庫中,還支持其他類型數(shù)據(jù)庫的訪問,例如MySQL和PostgreSQL等。
在使用第三方工具庫時(shí),需要在應(yīng)用中添加對應(yīng)的庫文件和依賴關(guān)系,同時(shí)還需要根據(jù)具體的要求進(jìn)行配置和使用。
本文介紹了在Android平臺中實(shí)現(xiàn)數(shù)據(jù)庫連接共享的方法。通過ContentProvider和第三方工具庫,可以方便快捷地進(jìn)行數(shù)據(jù)庫連接共享,提高代碼效率和性能。在使用過程中,需要考慮數(shù)據(jù)的讀寫權(quán)限、安全性和性能等方面,合理選擇數(shù)據(jù)存儲方式和具體實(shí)現(xiàn)方法。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220Android 怎么連接遠(yuǎn)程數(shù)據(jù)庫
一般是不會直接連接數(shù)據(jù)散襲辯庫的,就像我們?yōu)g覽禪搜網(wǎng)站一樣,沖缺也是通過后端程序連接數(shù)據(jù)庫的。若你需要的是嵌入數(shù)據(jù)庫,那另外的說法,MySQL提供嵌入式版本很輕量的Android 怎么連接遠(yuǎn)程數(shù)據(jù)庫
可以通過中間服務(wù), 比如一個(gè)站點(diǎn)開漏鎮(zhèn)放一個(gè)地址yourdomain.com/android.aspx然后通過android發(fā)送請求到這個(gè)地址州搜襪,android.aspx根據(jù)請求的get/post數(shù)據(jù)進(jìn)行相冊激應(yīng)操作
看你的需求,webservice慢,適合互聯(lián)網(wǎng)app產(chǎn)品,jdbc直連省事,快,適合封閉內(nèi)網(wǎng)環(huán)境。
如何android多Activity間共享數(shù)據(jù)
Android應(yīng)用開發(fā)中,給我們提供了5種數(shù)據(jù)的存儲方式
1 使用SharedPreferences存儲數(shù)據(jù)
2 文件存儲數(shù)據(jù)
3 SQLite數(shù)據(jù)庫存儲數(shù)據(jù)
4 使用ContentProvider存儲數(shù)據(jù)
5 網(wǎng)絡(luò)存儲數(shù)據(jù)
不同的業(yè)務(wù)邏輯,或者需求,用不同的實(shí)現(xiàn)方式
以下是這幾中數(shù)據(jù)存儲方式的說明用及法,
之一種: 使用SharedPreferences存儲數(shù)據(jù)
SharedPreferences是Android平臺上一個(gè)輕量級的存儲類,主要是保存一些常用的配置比如窗口狀態(tài),
一般在Activity中 重載窗口狀態(tài)onSaveInstanceState保存一般使用SharedPreferences完成,
它提供了Android平臺常規(guī)的Long長 整形、Int整形、String字符串型的保存。
它是什么樣的處理方梁宴式呢? SharedPreferences類似過去Windows系統(tǒng)上的ini配置文件,但是它分為多種權(quán)限,
可以全局共享訪問,android123提示最終是以xml方式來保存,整體效率來看不是特別的高,
對于常規(guī)的輕量級而言比SQLite要好不少,如果真的存儲量不大可以考慮自己定義文件格式。
xml 處理時(shí)Dalvik會通過自帶底層的本地XML Parser解析,比如XMLpull方式,這樣對于內(nèi)存資源占用比較好。
它的本質(zhì)是基于XML文件存儲key-value鍵值對數(shù)據(jù),通常用來存儲一些簡單的配置信息。
其存儲位置在/data/data//shared_prefs目錄下。
SharedPreferences對象本身只能獲取數(shù)據(jù)而不支持存儲和修改,存儲修改是通過Editor對象實(shí)現(xiàn)。
實(shí)現(xiàn)SharedPreferences存儲的步驟如下:
一、根據(jù)Context獲取SharedPreferences對象
二、利用edit()方法獲取Editor對象。
三、通過Editor對象存儲key-value鍵值對數(shù)據(jù)。
四、通過commit()方法提交數(shù)據(jù)。
下面是示例代碼:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//獲取SharedPreferences對象
Context ctx = MainActivity.this;
SharedPreferences sp = ctx.getSharedPreferences(“SP”, MODE_PRIVATE);
//存入數(shù)據(jù)
Editor editor = sp.edit();
editor.putString(“STRING_KEY”, “string”);
editor.putInt(“INT_KEY”, 0);
editor.putBoolean(“BOOLEAN_KEY”, true);
editor.commit();
//返回STRING_KEY的值
Log.d(“SP”, sp.getString(“STRING_KEY”, “none”));
//如果NOT_EXIST不存在,則返回值為”none”
Log.d(“SP”, sp.getString(“NOT_EXIST”, “none”));
}
}
這段代碼執(zhí)行過后,即在/data/data/com.test/shared_prefs目錄下生成了一個(gè)SP.xml文件,一個(gè)應(yīng)用可以創(chuàng)建多個(gè)這樣的xml文件。
SharedPreferences對象與SQLite數(shù)據(jù)庫相比,免去了創(chuàng)建數(shù)據(jù)庫,創(chuàng)建表,寫SQL語句等諸多操作,相對而言更加方便,簡潔。
但是SharedPreferences也有其自身缺陷,比如其職能存儲boolean,int,float,long和String五種簡單的數(shù)據(jù)類型,比如滾行其無法進(jìn)行條件查詢等。
所以不論SharedPreferences的數(shù)據(jù)存儲操作是如何簡單,它也大渣嘩只能是存儲方式的一種補(bǔ)充,而無法完全替代如SQLite數(shù)據(jù)庫這樣的其他數(shù)據(jù)存儲方式。
第二種: 文件存儲數(shù)據(jù)
關(guān)于文件存儲,Activity提供了openFileOutput()方法可以用于把數(shù)據(jù)輸出到文件中,具體的實(shí)現(xiàn)過程與在J2SE環(huán)境中保存數(shù)據(jù)到文件中是一樣的。
文件可用來存放大量數(shù)據(jù),如文本、圖片、音頻等。
默認(rèn)位置:/data/data//files/***.***。
代碼示例:
public void save(){
try {
FileOutputStream outStream=this.openFileOutput(“a.txt”,Context.MODE_WORLD_READABLE);
outStream.write(text.getText().toString().getBytes());
outStream.close();
Toast.makeText(MyActivity.this,”Saved”,Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
return;
}
catch (IOException e){
return ;
}
}
openFileOutput()方法的之一參數(shù)用于指定文件名稱,不能包含路徑分隔符“/” ,如果文件不存在,Android 會自動創(chuàng)建它。
創(chuàng)建的文件保存在/data/data//files目錄,如: /data/data/cn.itcast.action/files/itcast.txt ,
通過點(diǎn)擊Eclipse菜單“Window”-“Show View”-“Other”,在對話窗口中展開android文件夾,
選擇下面的File Explorer視圖,然后在File Explorer視圖中展開/data/data//files目錄就可以看到該文件。
openFileOutput()方法的第二參數(shù)用于指定操作模式,有四種模式,分別為:
Context.MODE_PRIVATE = 0
Context.MODE_APPEND = 32768
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2
Context.MODE_PRIVATE:為默認(rèn)操作模式,代表該文件是私有數(shù)據(jù),只能被應(yīng)用本身訪問,在該模式下,寫入的內(nèi)容會覆蓋原文件的內(nèi)容,如果想把新寫入的內(nèi)容追加到原文件中??梢允褂肅ontext.MODE_APPEND
Context.MODE_APPEND:模式會檢查文件是否存在,存在就往文件追加內(nèi)容,否則就創(chuàng)建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其他應(yīng)用是否有權(quán)限讀寫該文件。
MODE_WORLD_READABLE:表示當(dāng)前文件可以被其他應(yīng)用讀??;
MODE_WORLD_WRITEABLE:表示當(dāng)前文件可以被其他應(yīng)用寫入。
如果希望文件被其他應(yīng)用讀和寫,可以傳入: openFileOutput(“itcast.txt”, Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE); android有一套自己的安全模型,當(dāng)應(yīng)用程序(.apk)在安裝時(shí)系統(tǒng)就會分配給他一個(gè)userid,當(dāng)該應(yīng)用要去訪問其他資源比如文件的時(shí)候,就需要userid匹配。默認(rèn)情況下,任何應(yīng)用創(chuàng)建的文件,sharedpreferences,數(shù)據(jù)庫都應(yīng)該是私有的(位于/data/data//files),其他程序無法訪問。
除非在創(chuàng)建時(shí)指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,只有這樣其他程序才能正確訪問。
讀取文件示例:
public void load(){
try {
FileInputStream inStream=this.openFileInput(“a.txt”);
ByteArrayOutputStream stream=new ByteArrayOutputStream();
byte buffer=new byte;
int length=-1;
while((length=inStream.read(buffer))!=-1) {
stream.write(buffer,0,length);
}
stream.close();
inStream.close();
text.setText(stream.toString());
Toast.makeText(MyActivity.this,”Loaded”,Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e){
return ;
}
}
對于私有文件只能被創(chuàng)建該文件的應(yīng)用訪問,
如果希望文件能被其他應(yīng)用讀和寫,
可以在創(chuàng)建文件時(shí),指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE權(quán)限。
Activity還提供了getCacheDir()和getFilesDir()方法: g
etCacheDir()方法用于獲取/data/data//cache目錄 getFilesDir()方法用于獲取/data/data//files目錄。
把文件存入SDCard:
使用Activity的openFileOutput()方法保存文件,文件是存放在手機(jī)空間上,
一般手機(jī)的存儲空間不是很大,存放些小文件還行,如果要存放像視頻這樣的大文件,是不可行的。
對于像視頻這樣的大文件,我們可以把它存放在SDCard。
SDCard是干什么的?你可以把它看作是移動硬盤或U盤。
在模擬器中使用SDCard,你需要先創(chuàng)建一張SDCard卡(當(dāng)然不是真的SDCard,只是鏡像文件)。
創(chuàng)建SDCard可以在Eclipse創(chuàng)建模擬器時(shí)隨同創(chuàng)建,也可以使用DOS命令進(jìn)行創(chuàng)建,
如下: 在Dos窗口中進(jìn)入android SDK安裝路徑的tools目錄,
輸入以下命令創(chuàng)建一張容量為2G的SDCard,文件后綴可以隨便取,
建議使用.img: mksdcard 2023M D:\AndroidTool\sdcard.img 在程序中訪問SDCard,你需要申請?jiān)L問SDCard的權(quán)限。
在AndroidManifest.xml中加入訪問SDCard的權(quán)限如下:
要往SDCard存放文件,程序必須先判斷手機(jī)是否裝有SDCard,并且可以進(jìn)行讀寫。
注意:訪問SDCard必須在AndroidManifest.xml中加入訪問SDCard的權(quán)限。
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File sdCardDir = Environment.getExternalStorageDirectory();//獲取SDCard目錄
File saveFile = new File(sdCardDir, “a.txt”);
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write(“test”.getBytes());
outStream.close();
}
Environment.getExternalStorageState()方法用于獲取SDCard的狀態(tài),如果手機(jī)裝有SDCard,并且可以進(jìn)行讀寫,那么方法返回的狀態(tài)等于Environment.MEDIA_MOUNTED。
Environment.getExternalStorageDirectory()方法用于獲取SDCard的目錄,當(dāng)然要獲取SDCard的目錄,你也可以這樣寫:
File sdCardDir = new File(“/sdcard”); //獲取SDCard目錄
File saveFile = new File(sdCardDir, “itcast.txt”);
//上面兩句代碼可以合成一句:
File saveFile = new File(“/sdcard/a.txt”);
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write(“test”.getBytes());
outStream.close();
第三種: SQLite數(shù)據(jù)庫存儲數(shù)據(jù)
SQLite是輕量級嵌入式數(shù)據(jù)庫引擎,它支持 SQL 語言,
并且只利用很少的內(nèi)存就有很好的性能。
此外它還是開源的,任何人都可以使用它。
許多開源項(xiàng)目((Mozilla, PHP, Python)都使用了 SQLite
SQLite 由以下幾個(gè)組件組成:SQL 編譯器、內(nèi)核、后端以及附件。
SQLite 通過利用虛擬機(jī)和虛擬數(shù)據(jù)庫引擎(VDBE),使調(diào)試、修改和擴(kuò)展 SQLite 的內(nèi)核變得更加方便。
特點(diǎn):
面向資源有限的設(shè)備,
沒有服務(wù)器進(jìn)程,
所有數(shù)據(jù)存放在同一文件中跨平臺,
可自由復(fù)制。
SQLite 基本上符合 SQL-92 標(biāo)準(zhǔn),和其他的主要 SQL 數(shù)據(jù)庫沒什么區(qū)別。它的優(yōu)點(diǎn)就是高效,Android 運(yùn)行時(shí)環(huán)境包含了完整的 SQLite。
SQLite 和其他數(shù)據(jù)庫更大的不同就是對數(shù)據(jù)類型的支持,創(chuàng)建一個(gè)表時(shí),可以在 CREATE TABLE 語句中指定某列的數(shù)據(jù)類型,但是你可以把任何數(shù)據(jù)類型放入任何列中。當(dāng)某個(gè)值插入數(shù)據(jù)庫時(shí),SQLite 將檢查它的類型。如果該類型與關(guān)聯(lián)的列不匹配,則 SQLite 會嘗試將該值轉(zhuǎn)換成該列的類型。如果不能轉(zhuǎn)換,則該值將作為其本身具有的類型存儲。比如可以把一個(gè)字符串(String)放入 INTEGER 列。SQLite 稱這為“弱類型”(manifest typing.)。 此外,SQLite 不支持一些標(biāo)準(zhǔn)的 SQL 功能,特別是外鍵約束(FOREIGN KEY constrains),嵌套 transcaction 和 RIGHT OUTER JOIN 和 FULL OUTER JOIN, 還有一些 ALTER TABLE 功能。 除了上述功能外,SQLite 是一個(gè)完整的 SQL 系統(tǒng),擁有完整的觸發(fā)器,交易等等。
Android 集成了 SQLite 數(shù)據(jù)庫 Android 在運(yùn)行時(shí)(run-time)集成了 SQLite,所以每個(gè) Android 應(yīng)用程序都可以使用 SQLite 數(shù)據(jù)庫。
對于熟悉 SQL 的開發(fā)人員來時(shí),在 Android 開發(fā)中使用 SQLite 相當(dāng)簡單。但是,由于 JDBC 會消耗太多的系統(tǒng)資源,所以 JDBC 對于手機(jī)這種內(nèi)存受限設(shè)備來說并不合適。因此,Android 提供了一些新的 API 來使用 SQLite 數(shù)據(jù)庫,Android 開發(fā)中,程序員需要學(xué)使用這些 API。
數(shù)據(jù)庫存儲在 data//databases/ 下。 Android 開發(fā)中使用 SQLite 數(shù)據(jù)庫 Activites 可以通過 Content Provider 或者 Service 訪問一個(gè)數(shù)據(jù)庫。
下面會詳細(xì)講解如果創(chuàng)建數(shù)據(jù)庫,添加數(shù)據(jù)和查詢數(shù)據(jù)庫。 創(chuàng)建數(shù)據(jù)庫 Android 不自動提供數(shù)據(jù)庫。在 Android 應(yīng)用程序中使用 SQLite,必須自己創(chuàng)建數(shù)據(jù)庫,然后創(chuàng)建表、索引,填充數(shù)據(jù)。
Android 提供了 SQLiteOpenHelper 幫助你創(chuàng)建一個(gè)數(shù)據(jù)庫,你只要繼承 SQLiteOpenHelper 類,就可以輕松的創(chuàng)建數(shù)據(jù)庫。SQLiteOpenHelper 類根據(jù)開發(fā)應(yīng)用程序的需要,封裝了創(chuàng)建和更新數(shù)據(jù)庫使用的邏輯。
SQLiteOpenHelper 的子類,至少需要實(shí)現(xiàn)三個(gè)方法:
1 構(gòu)造函數(shù),調(diào)用父類 SQLiteOpenHelper 的構(gòu)造函數(shù)。這個(gè)方法需要四個(gè)參數(shù):上下文環(huán)境(例如,一個(gè) Activity),數(shù)據(jù)庫名字,一個(gè)可選的游標(biāo)工廠(通常是 Null),一個(gè)代表你正在使用的數(shù)據(jù)庫模型版本的整數(shù)。
2 onCreate()方法,它需要一個(gè) SQLiteDatabase 對象作為參數(shù),根據(jù)需要對這個(gè)對象填充表和初始化數(shù)據(jù)。
3 onUpgrage() 方法,它需要三個(gè)參數(shù),一個(gè) SQLiteDatabase 對象,一個(gè)舊的版本號和一個(gè)新的版本號,這樣你就可以清楚如何把一個(gè)數(shù)據(jù)庫從舊的模型轉(zhuǎn)變到新的模型。
第四種 使用ContentProvider存儲數(shù)據(jù) ContentProvider其實(shí)也是通過數(shù)據(jù)庫的方式來存儲數(shù)據(jù)的,因此這里不再做詳細(xì)介紹
Android 怎么連接遠(yuǎn)程數(shù)據(jù)庫
1:要有慧睜服務(wù)器端程序,如ruby等,由服務(wù)器端操作數(shù)據(jù)庫,android客戶端通過http收發(fā)json或xml與服務(wù)器交互。
2:android有世神自前返歲己的數(shù)據(jù)庫sqlite,但那只適合儲存本機(jī)的資料。
關(guān)于android 共享數(shù)據(jù)庫連接的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都創(chuàng)新互聯(lián)科技有限公司,經(jīng)過多年的不懈努力,公司現(xiàn)已經(jīng)成為一家專業(yè)從事IT產(chǎn)品開發(fā)和營銷公司。廣泛應(yīng)用于計(jì)算機(jī)網(wǎng)絡(luò)、設(shè)計(jì)、SEO優(yōu)化、關(guān)鍵詞排名等多種行業(yè)!
文章名稱:Android數(shù)據(jù)庫共享連接的實(shí)現(xiàn)方法(android共享數(shù)據(jù)庫連接)
URL網(wǎng)址:http://www.dlmjj.cn/article/djddgpd.html


咨詢
建站咨詢
