當前位置:首頁 » 服務存儲 » 安卓執行存儲過程
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

安卓執行存儲過程

發布時間: 2023-01-02 06:50:22

① Android中用什麼方法來存儲數據,最常的方式是什麼 像 QQ 微信的數據如何存儲的

Android應用開發中,給我們提供了5種數據的存儲方式
1 使用SharedPreferences存儲數據
2 文件存儲數據
3 SQLite資料庫存儲數據
4 使用ContentProvider存儲數據
5 網路存儲數據
不同的業務邏輯,或者需求,用不同的實現方式,以下是這幾中數據存儲方式的說明用及法:

第一種: 使用SharedPreferences存儲數據
SharedPreferences是Android平台上一個輕量級的存儲類,主要是保存一些常用的配置比如窗口狀態,
一般在Activity中 重載窗口狀態onSaveInstanceState保存一般使用SharedPreferences完成,
它提供了Android平台常規的Long長 整形、Int整形、String字元串型的保存。

SharedPreferences類似過去Windows系統上的ini配置文件,但是它分為多種許可權,
可以全局共享訪問,android123提示最終是以xml方式來保存,整體效率來看不是特別的高,
對於常規的輕量級而言比SQLite要好不少,如果真的存儲量不大可以考慮自己定義文件格式。
xml 處理時Dalvik會通過自帶底層的本地XML Parser解析,比如XMLpull方式,這樣對於內存資源佔用比較好。

它的本質是基於XML文件存儲key-value鍵值對數據,通常用來存儲一些簡單的配置信息。
其存儲位置在/data/data/< >/shared_prefs目錄下。
SharedPreferences對象本身只能獲取數據而不支持存儲和修改,存儲修改是通過Editor對象實現。

實現SharedPreferences存儲的步驟如下:
一、根據Context獲取SharedPreferences對象
二、利用edit()方法獲取Editor對象。
三、通過Editor對象存儲key-value鍵值對數據。
四、通過commit()方法提交數據。

下面是示例代碼:

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);
//存入數據
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"));
}
}

這段代碼執行過後,即在/data/data/com.test/shared_prefs目錄下生成了一個SP.xml文件,一個應用可以創建多個這樣的xml文件。
SharedPreferences對象與SQLite資料庫相比,免去了創建資料庫,創建表,寫SQL語句等諸多操作,相對而言更加方便,簡潔。
但是SharedPreferences也有其自身缺陷,比如其職能存儲boolean,int,float,long和String五種簡單的數據類型,比如其無法進行條件查詢等。
所以不論SharedPreferences的數據存儲操作是如何簡單,它也只能是存儲方式的一種補充,而無法完全替代如SQLite資料庫這樣的其他數據存儲方式。

第二種: 文件存儲數據
關於文件存儲,Activity提供了openFileOutput()方法可以用於把數據輸出到文件中,具體的實現過程與在J2SE環境中保存數據到文件中是一樣的。
文件可用來存放大量數據,如文本、圖片、音頻等。
默認位置:/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()方法的第一參數用於指定文件名稱,不能包含路徑分隔符「/」 ,如果文件不存在,Android 會自動創建它。
創建的文件保存在/data/data//files目錄,如: /data/data/cn.itcast.action/files/itcast.txt ,
通過點擊Eclipse菜單「Window」-「Show View」-「Other」,在對話窗口中展開android文件夾,
選擇下面的File Explorer視圖,然後在File Explorer視圖中展開/data/data//files目錄就可以看到該文件。

openFileOutput()方法的第二參數用於指定操作模式,有四種模式,分別為:
Context.MODE_PRIVATE = 0
Context.MODE_APPEND = 32768
Context.MODE_WORLD_READABLE = 1
Context.MODE_WORLD_WRITEABLE = 2
Context.MODE_PRIVATE:為默認操作模式,代表該文件是私有數據,只能被應用本身訪問,在該模式下,寫入的內容會覆蓋原文件的內容,如果想把新寫入的內容追加到原文件中。可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式會檢查文件是否存在,存在就往文件追加內容,否則就創建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用來控制其他應用是否有許可權讀寫該文件。
MODE_WORLD_READABLE:表示當前文件可以被其他應用讀取;
MODE_WORLD_WRITEABLE:表示當前文件可以被其他應用寫入。

如果希望文件被其他應用讀和寫,可以傳入: openFileOutput("itcast.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE); android有一套自己的安全模型,當應用程序(.apk)在安裝時系統就會分配給他一個userid,當該應用要去訪問其他資源比如文件的時候,就需要userid匹配。默認情況下,任何應用創建的文件,sharedpreferences,資料庫都應該是私有的(位於/data/data//files),其他程序無法訪問。
除非在創建時指定了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[1024];
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 ;
}
}

對於私有文件只能被創建該文件的應用訪問,
如果希望文件能被其他應用讀和寫,
可以在創建文件時,指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE許可權。

Activity還提供了getCacheDir()和getFilesDir()方法: g
etCacheDir()方法用於獲取/data/data//cache目錄 getFilesDir()方法用於獲取/data/data//files目錄。

把文件存入SDCard:
使用Activity的openFileOutput()方法保存文件,文件是存放在手機空間上,
一般手機的存儲空間不是很大,存放些小文件還行,如果要存放像視頻這樣的大文件,是不可行的。
對於像視頻這樣的大文件,我們可以把它存放在SDCard。
SDCard是干什麼的?你可以把它看作是移動硬碟或U盤。
在模擬器中使用SDCard,你需要先創建一張SDCard卡(當然不是真的SDCard,只是鏡像文件)。

創建SDCard可以在Eclipse創建模擬器時隨同創建,也可以使用DOS命令進行創建,
如下: 在Dos窗口中進入android SDK安裝路徑的tools目錄,
輸入以下命令創建一張容量為2G的SDCard,文件後綴可以隨便取,
建議使用.img: mksdcard 2048M D:\AndroidTool\sdcard.img 在程序中訪問SDCard,你需要申請訪問SDCard的許可權。

在AndroidManifest.xml中加入訪問SDCard的許可權如下:
<!-- 在SDCard中創建與刪除文件許可權 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard寫入數據許可權 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

要往SDCard存放文件,程序必須先判斷手機是否裝有SDCard,並且可以進行讀寫。
注意:訪問SDCard必須在AndroidManifest.xml中加入訪問SDCard的許可權。

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的狀態,如果手機裝有SDCard,並且可以進行讀寫,那麼方法返回的狀態等於Environment.MEDIA_MOUNTED。
Environment.getExternalStorageDirectory()方法用於獲取SDCard的目錄,當然要獲取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資料庫存儲數據

SQLite是輕量級嵌入式資料庫引擎,它支持 SQL 語言,
並且只利用很少的內存就有很好的性能。
此外它還是開源的,任何人都可以使用它。
許多開源項目((Mozilla, PHP, Python)都使用了 SQLite
SQLite 由以下幾個組件組成:SQL 編譯器、內核、後端以及附件。
SQLite 通過利用虛擬機和虛擬資料庫引擎(VDBE),使調試、修改和擴展 SQLite 的內核變得更加方便。

特點:
面向資源有限的設備,
沒有伺服器進程,
所有數據存放在同一文件中跨平台,
可自由復制。

SQLite 基本上符合 SQL-92 標准,和其他的主要 SQL 資料庫沒什麼區別。它的優點就是高效,Android 運行時環境包含了完整的 SQLite。

SQLite 和其他資料庫最大的不同就是對數據類型的支持,創建一個表時,可以在 CREATE TABLE 語句中指定某列的數據類型,但是你可以把任何數據類型放入任何列中。當某個值插入資料庫時,SQLite 將檢查它的類型。如果該類型與關聯的列不匹配,則 SQLite 會嘗試將該值轉換成該列的類型。如果不能轉換,則該值將作為其本身具有的類型存儲。比如可以把一個字元串(String)放入 INTEGER 列。SQLite 稱這為「弱類型」(manifest typing.)。 此外,SQLite 不支持一些標準的 SQL 功能,特別是外鍵約束(FOREIGN KEY constrains),嵌套 transcaction 和 RIGHT OUTER JOIN 和 FULL OUTER JOIN, 還有一些 ALTER TABLE 功能。 除了上述功能外,SQLite 是一個完整的 SQL 系統,擁有完整的觸發器,交易等等。

Android 集成了 SQLite 資料庫 Android 在運行時(run-time)集成了 SQLite,所以每個 Android 應用程序都可以使用 SQLite 資料庫。

對於熟悉 SQL 的開發人員來時,在 Android 開發中使用 SQLite 相當簡單。但是,由於 JDBC 會消耗太多的系統資源,所以 JDBC 對於手機這種內存受限設備來說並不合適。因此,Android 提供了一些新的 API 來使用 SQLite 資料庫,Android 開發中,程序員需要學使用這些 API。

資料庫存儲在 data/< 項目文件夾 >/databases/ 下。 Android 開發中使用 SQLite 資料庫 Activites 可以通過 Content Provider 或者 Service 訪問一個資料庫。

下面會詳細講解如果創建資料庫,添加數據和查詢資料庫。 創建資料庫 Android 不自動提供資料庫。在 Android 應用程序中使用 SQLite,必須自己創建資料庫,然後創建表、索引,填充數據。

Android 提供了 SQLiteOpenHelper 幫助你創建一個資料庫,你只要繼承 SQLiteOpenHelper 類,就可以輕松的創建資料庫。SQLiteOpenHelper 類根據開發應用程序的需要,封裝了創建和更新資料庫使用的邏輯。

SQLiteOpenHelper 的子類,至少需要實現三個方法:

1 構造函數,調用父類 SQLiteOpenHelper 的構造函數。這個方法需要四個參數:上下文環境(例如,一個 Activity),資料庫名字,一個可選的游標工廠(通常是 Null),一個代表你正在使用的資料庫模型版本的整數。

2 onCreate()方法,它需要一個 SQLiteDatabase 對象作為參數,根據需要對這個對象填充表和初始化數據。

3 onUpgrage() 方法,它需要三個參數,一個 SQLiteDatabase 對象,一個舊的版本號和一個新的版本號,這樣你就可以清楚如何把一個資料庫從舊的模型轉變到新的模型。

第四種 使用ContentProvider存儲數據 ContentProvider其實也是通過資料庫的方式來存儲數據的,因此這里不再做詳細介紹

第五種 網路存儲數據 也就是說將數據保存在伺服器,android上只需要通過httpclient發起一個請求,向伺服器獲取數據即可

② 提升Android手機運行內存教程

隨著智能手機的不斷發展以及用戶需求的不斷增加,手機的運行內存(RAM)的大小已經從MB過渡到了GB容量,作為用戶的我們只是知道運行內存越大越好,而運行內存到底有什麼用你知道么?接下來是我為大家收集的提升Android手機運行內存教程,希望能幫到大家。
提升Android手機運行內存教程
知識小科普

無應用運行時內存佔用已近半

這個時候就又到了筆者給大家科普的時候了。RAM全稱Random Access Memory,我們都習慣稱之為運行內存,又稱隨機存儲器。其是與CPU直接交換數據的內部存儲器,也叫主存(內存)。它可以隨時讀寫,並且速度很快,通常作為系統或正在運行程序的臨時數據存儲媒介。

為啥安卓手機更吃內存

看到這你可能深深的認為RAM還是越大越好,對沒錯筆者也是這么認為的。縱觀安卓手機的發展,RAM已經從最初的128MB發展到了現在的6GB(消息稱8GB已經在路上),而蘋果從最初的128MB至今RAM也不過才發展到2GB而已,但仍然可以流暢運行,這又是為何呢?

iOS VS Android(圖片引自antutu)

這就完全要歸結於安卓和蘋果不同的內存運行機制。安卓系統在運行一個程序時:CPU開始計算-內存開始緩存-再讀取目標文件開始計算,當結束程序時CPU計算完畢但內存仍然有部分緩存佔用。而蘋果就不同當CPU開始運算後就會收集所有內存為應用運行進行緩存,在結束應用時會釋放全部內存。

用戶的內存不足解決之道

對於一般用戶來說就是安裝各類清理軟體,卸載多餘不常用APP,軟體關閉後及時清理後台。目前許多手機中還加入了後台應用管理的功能並提供一鍵清理選項,實在受不了的時候就對手機進行一次出廠化設置。

手機中自帶的許可權管理應用

對於安卓有一定了解的用戶,則會選擇精簡版的ROM來進行刷機(一般情況下系統的精簡度是和流暢性成正比的),並通過ROOT獲取許可權,從根本控制軟體的自啟及對內存的佔用。

各類刷機軟體中都提供精簡版ROM一鍵刷機和一鍵ROOT(圖片引自romjd)

而那些動手能力極強的用戶還會選擇一些特別的方法,比如通過創建Swap(交換分區)來解決,當用戶的實體內存不足時便會調用這部分虛擬內存來運行應用。

Linux中的Swap即交換分區,類似於Windows的虛擬內存,就是當內存不足的時候,把一部分硬碟空間虛擬成內存使用,從而解決內存容量不足的情況。而Android正是基於Linux研發的操作系統,所以也可以使用Swap分區來提升系統運行效率。

對於安卓手機如何創建Swap的具體過程筆者就不做過多介紹,不過首先你的手機內核需要支持Swap,並且已ROOT,可以利用內置存儲或內存卡(需注意卡片讀寫速度)進行製作,詳細方法及所需軟體請執行網路。


看了“提升Android手機運行內存教程”還想看:

1. 安卓手機運行內存不夠用的解決方法

2. 怎樣能刷運行內存

3. 安卓手機運行內存太小怎麼優化

4. 怎樣擴大手機內部內存

5. 怎樣擴展手機最大內存

③ Android程序中涉及到存儲數據和讀取數據時總是閃退

大多數的app閃退都是因為代碼執行異常並且未被捕捉並處理導致的
看看是不是內存溢出了
可能是被系統殺掉進程,這是第三方的行為,不是程序本身的問題,被殺掉的程序肯定不會輸出任何信息。
文件存儲數據
文件存儲方式是一種較常用的方法,在Android中讀取/寫入文件的方法,與 Java中實現I/O的程序是完全一樣的,提供了openFileInput()和openFileOutput()方法來讀取設備上的文件。 FilterInputStream, FilterOutputStream等可以到Java io package說明中去詳細學習,不再此詳細說明,具體實例如下:
String fn = 「moandroid.log」;
FileInputStream fis = openFileInput(fn);
FileOutputStream fos = openFileOutput(fn,Context.MODE_PRIVATE);
除此之外,Android還提供了其他函數來操作文件,詳細說明請閱讀Android SDK。

④ 資料庫中的存儲過程怎麼用 啊!!求解.....

關鍵字:procere

例子:
SQL> create [or replace] procere procere_name is
begin
--開始執行
insert into test('10001','Visket');
end;
/

以上操作就能為test表添加一條信息
執行存儲過程procere用的命令是exec
記住存儲過程中,語句結尾一定要有分號

⑤ 什麼時候要用存儲過程,存儲過程的優點

使用存儲過程並沒有什麼時候的限制,說白了任何時候都可以使用存儲過程,因為存儲過程是經過編譯的程序片段,在資料庫啟動時已經載入在oracle的cache中了,並且任何人調用它都不會經過重新編譯,也不會進行語法分析及最近路徑選擇等耗時的操作,所以建議多使用。
存儲過程的優點:

1.存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。
2.當對資料庫進行復雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此復雜操作用存儲過程封裝起來與資料庫提供的事務處理結合一起使用。
3.存儲過程可以重復使用,可減少資料庫開發人員的工作量
4.安全性高,可設定只有某此用戶才具有對指定存儲過程的使用權
缺點:
1.如果更改范圍大到需要對輸入存儲過程的參數進行更改,或者要更改由其返回的數據,則您仍需要更新程序集中的代碼以添加參數、更新
GetValue()
調用,等等,這時候估計比較繁瑣了。
2.可移植性差
由於存儲過程將應用程序綁定到
SQL
Server,因此使用存儲過程封裝業務邏輯將限制應用程序的可移植性。

⑥ 存儲過程如何執行

存儲過程(Stored
Procere)是一組為了完成特定功能的SQL語句集,經編譯後存儲在資料庫中。用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程是資料庫中的一個重要對象,任何一個設計良好的資料庫應用程序都應該用到存儲過程。

⑦ 安卓數據會存本地嗎

安卓開發之數據存儲在本地的四種方式

本地數據存儲,在安卓開發過程中是不可避免的一個話題。這些本地的數據可能是用戶的設置,程序的設置,用戶的數據圖片, 也可能是網路傳輸的一些緩沖數據。

基本上我們有4種方法可以存儲安卓程序的數據。

第1種是Shared Preference(共享選項)。

這種方法適合於存儲一些基本數據類型的數據。他提供的是key-value(鍵值)的方式。鍵必須是字元串類型的,值可以是布爾型的,浮點型的,整型的,長整型的,或者字元串類型的。

這種方式是用一個xml文件在私有的目錄裡面存放這些數據的。一個程序可以有多個這樣的文件。

下面一段代碼用來描述寫入數據。

第2種是Internal Storage(內部存儲)。

這種方式用來存儲一些復雜的數據結構。因為是內部存儲方式,所以其他程序無法訪問。這樣可以保證數據的安全性。當你的程序卸載以後,這些內部存儲數據也會被清除掉。

這類數據一般包括像一些對象,或者本地需要一些類似文件系統訪問模式的數據。

下面一段代碼用來寫入數據。

第3種是External Storage(外部存儲)。

這種存儲方式用來存儲一些文件對象。這些文件可以被其他程序來訪問。要使用外部存儲,需要申請特別的寫許可權WRITE_EXTERNAL_STORAGE。如果其他程序需要訪問這些外部存儲數據的話,也需要申請讀許可權READ_EXTERNAL_STORAGE 。

從安卓4.4開始,用戶可以把自己的數據寫入一個私有的外部存儲文件夾中,如果這樣的話,用戶就不需要申請寫許可權WRITE_EXTERNAL_STORAGE。當用戶卸載程序的時候,這個文件夾也會被清除。

從安卓7.0開始, 安卓程序可以申請訪問特定的文件目錄,而不是申請訪問整個外部存儲空間。這樣可以保證數據的安全性,防止誤操作。用戶只可以訪問圖片目錄,或者文檔目錄。

第4種是SQLite database(資料庫)。

這種方式需要了解一些資料庫方面的知識。適合存儲相對結構化的數據。尤其是表結構。資料庫是跟當前程序綁定的其他程序無法訪問。

下面一段代碼用來展示寫入數據。

這里是丁哥開講,歡迎留言進行進一步的討論,謝謝。

與此同時請關注一下我們的合作夥伴。