欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

Android數(shù)據(jù)存儲實(shí)現(xiàn)的5大方式 - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運(yùn)營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏壧峁┍憬莸闹С郑?

您當(dāng)前位置>首頁 » 新聞資訊 » 技術(shù)分享 >

Android數(shù)據(jù)存儲實(shí)現(xiàn)的5大方式

發(fā)表時間:2020-10-19

發(fā)布人:葵宇科技

瀏覽次數(shù):59

數(shù)據(jù)存儲在開辟中是應(yīng)用最頻繁的,在這里重要介紹Android平臺中實(shí)現(xiàn)數(shù)據(jù)存儲的5種方法,加倍體系具體的介紹了5種存儲的辦法和異同。
第一種: 應(yīng)用SharedPreferences存儲數(shù)據(jù)
SharedPreferences是Android平臺上一個輕量級的存儲類,主如果保存一些常用的設(shè)備比如窗口狀況,一般在Activity中 重載窗口狀況onSaveInstanceState保存一般應(yīng)用SharedPreferences完成,它供給了Android平臺慣例的Long長 整形、Int整形、String字符串型的保存。
它是什么樣的處理方法呢? SharedPreferences類似以前Windows體系上的ini設(shè)備文件,然則它分為多種權(quán)限,可以全局共享拜訪,android123提示最終是以xml方法來保存,整體效力來看不是特其余高,對于慣例的輕量級而言比SQLite要好不少,如不雅真的存儲量不大年夜可以推敲本身定義文件格式。xml 處理時Dalvik會經(jīng)由過程自帶底層的本地XML Parser解析,比如XMLpull方法,如許對于內(nèi)存資本占用比較好。
它的本質(zhì)是基于XML文件存儲key-value鍵值對數(shù)據(jù),平日用來存儲一些簡單的設(shè)備信息。
其存儲地位在/data/data/<包名>/shared_prefs目次下。
SharedPreferences對象本身只能獲取數(shù)據(jù)而不支撐存儲和修改,存儲修改是經(jīng)由過程Editor對象實(shí)現(xiàn)。
實(shí)現(xiàn)SharedPreferences存儲的步調(diào)如下:
一、根據(jù)Context獲取SharedPreferences對象
二、應(yīng)用edit()辦法獲取Editor對象。
三、經(jīng)由過程Editor對象存儲key-value鍵值對數(shù)據(jù)。
四、經(jīng)由過程commit()辦法提交數(shù)據(jù)。
下面是示例代碼:
Java代碼
  • 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"));   
  •      }   
  •   
  • }  

這段代碼履行過后,即在/data/data/com.test/shared_prefs目次下生成了一個SP.xml文件,一個應(yīng)用可以創(chuàng)建多個如許的xml文件。
SharedPreferences對象與SQLite數(shù)據(jù)庫比擬,免除了創(chuàng)建數(shù)據(jù)庫,創(chuàng)建表,寫SQL語句等諸多操作,相對而言加倍便利,簡潔。然則SharedPreferences也有其自身缺點(diǎn),比如其本能機(jī)能存儲boolean,int,float,long和String五種簡單的數(shù)據(jù)類型,比如其無法進(jìn)行前提萌芽等。所以不論SharedPreferences的數(shù)據(jù)存儲操作是若何簡單,它也只能是存儲方法的一種彌補(bǔ),而無法完全替代如SQLite數(shù)據(jù)庫如許的其他數(shù)據(jù)存儲方法。
第二種: 內(nèi)部文件存儲數(shù)據(jù)
關(guān)于文件存儲,Activity供給了openFileOutput()辦法可以用于把數(shù)據(jù)輸出到文件中,具體的實(shí)現(xiàn)過程與在J2SE情況中保存數(shù)據(jù)到文件中是一樣的。
文件可用來存放大年夜量數(shù)據(jù),如文本、圖片、音頻等。
默認(rèn)地位:/data/data/<包>/files/***.***。
代碼示例:
Java代碼
  • 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/<package name>/files目次,如: /data/data/cn.itcast.action/files/itcast.txt ,經(jīng)由過程點(diǎn)擊Eclipse菜單“Window”-“Show View”-“Other”,在對話窗口中展開android文件夾,選擇下面的File Explorer視圖,然后在File Explorer視圖中展開/data/data/<package name>/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)操作模式,代表該文件是私稀有據(jù),只能被應(yīng)用本身拜訪,在該模式下,寫入的內(nèi)容會覆蓋原文件的內(nèi)容,如不雅想把新寫入的內(nèi)容追加到原文件中??梢詰?yīng)用Context.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)在安裝時體系就會分派給他一個userid,當(dāng)該應(yīng)用要去拜訪其他資本好交手件的時刻,就須要userid匹配。默認(rèn)情況下,任何應(yīng)用創(chuàng)建的文件,sharedpreferences,數(shù)據(jù)庫都應(yīng)當(dāng)是私有的(位于/data/data/<package name>/files),其他法度榜樣無法拜訪。
除非在創(chuàng)建時指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE ,只有如許其他法度榜樣才能精確拜訪。
攫取文件示例:
Java代碼
  • 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 ;   
  •     }   
  •   
  • }  

對于私有文件只能被創(chuàng)建該文件的應(yīng)用拜訪,如不雅欲望文件能被其他應(yīng)用讀和寫,可以在創(chuàng)建文件時,指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE權(quán)限。
Activity還供給了getCacheDir()和getFilesDir()辦法: getCacheDir()辦法用于獲取/data/data/<package name>/cache目次 getFilesDir()辦法用于獲取/data/data/<package name>/files目次。
第三種: 外部文件存儲數(shù)據(jù)

把文件存入SDCard:
應(yīng)用Activity的openFileOutput()辦法保存文件,文件是存放在手機(jī)空間上,一般手機(jī)的存儲空間不是很大年夜,存放些小文件還行,如不雅要存放像視潑魅如許的大年夜文件,是弗成行的。對于像視潑魅如許的大年夜文件,我們可以把它存放在SDCard。
SDCard是干什么的?你可以把它看作是移動硬盤或U盤。 在模仿器中應(yīng)用SDCard,你須要先創(chuàng)建一張SDCard卡(當(dāng)然不是真的SDCard,只是鏡像文件)。
創(chuàng)建SDCard可以在Eclipse創(chuàng)建模仿器時伴隨創(chuàng)建,也可以應(yīng)用DOS敕令進(jìn)行創(chuàng)建,如下: 在Dos窗口中進(jìn)入android SDK安裝路徑的tools目次,輸入以下敕令創(chuàng)建一張容量為2G的SDCard,文件后綴可以隨便取,建議應(yīng)用.img: mksdcard 2048M D:\AndroidTool\sdcard.img 在法度榜樣中拜訪SDCard,你須要申請拜訪SDCard的權(quán)限。
在AndroidManifest.xml中參加拜訪SDCard的權(quán)限如下:
Java代碼
  • <!-- 在SDCard中創(chuàng)建與刪除文件權(quán)限 -->   
  •     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>   
  •   
  •     <!-- 往SDCard寫入數(shù)據(jù)權(quán)限 -->   
  •     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  

要往SDCard存放文件,法度榜樣必須先斷定手機(jī)是否裝有SDCard,并且可以進(jìn)行讀寫。
留意:拜訪SDCard必須在AndroidManifest.xml中參加拜訪SDCard的權(quán)限。
Java代碼
  • 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的狀況,如不雅手機(jī)裝有SDCard,并且可以進(jìn)行讀寫,那么辦法返回的狀況等于Environment.MEDIA_MOUNTED。
Environment.getExternalStorageDirectory()辦法用于獲取SDCard的目次,當(dāng)然要獲取SDCard的目次,你也可以如許寫:
Java代碼
  • 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 說話,并且只應(yīng)用很少的內(nèi)存就有很好的機(jī)能。此外它照樣開源的,任何人都可以應(yīng)用它。很多開源項目((Mozilla, PHP, Python)都應(yīng)用了 SQLite.SQLite 由以下幾個組件構(gòu)成:SQL 編譯器、內(nèi)核、后端以及附件。SQLite 經(jīng)由過程應(yīng)用虛擬機(jī)和虛擬數(shù)據(jù)庫引擎(VDBE),使調(diào)試、修改和擴(kuò)大 SQLite 的內(nèi)核變得加倍便利。
特點(diǎn):
面向資本竽暌剮限的設(shè)備,
沒有辦事器過程,
所稀有據(jù)存放在同一文件中跨平臺,
可自由復(fù)制。
SQLite 內(nèi)部構(gòu)造:

[img]http://dl2.iteye.com/upload/attachment/0104/3780/9215176d-cf77-33f6-9b1c-885ea36d90f1.jpg

SQLite 根本上相符 SQL-92 標(biāo)準(zhǔn),和其他的重要 SQL 數(shù)據(jù)庫沒什么差別。它的長處就是高效,Android 運(yùn)行時情況包含了完全的 SQLite。
SQLite 和其他數(shù)據(jù)庫最大年夜的不合就是對數(shù)據(jù)類型的支撐,創(chuàng)建一個表時,可以在 CREATE TABLE 語句中指定某列的數(shù)據(jù)類型,然則你可以把任何數(shù)據(jù)類型放入任何列中。當(dāng)某個值插入數(shù)據(jù)庫時,SQLite 將檢查它的類型。如不雅該類型與接洽關(guān)系的列不匹配,則 SQLite 會測驗(yàn)測驗(yàn)將該值轉(zhuǎn)換成該列的類型。如不雅不克不及轉(zhuǎn)換,則該值將作為其本身具有的類型存儲。比如可以把一個字符串(String)放入 INTEGER 列。SQLite 稱這為“弱類型”(manifest typing.)。 此外,SQLite 不支撐一些標(biāo)準(zhǔn)的 SQL 功能,特別是外鍵束縛(FOREIGN KEY constrains),嵌套 transcaction 和 RIGHT OUTER JOIN 和 FULL OUTER JOIN, 還有一些 ALTER TABLE 功能。 除了上述功能外,SQLite 是一個完全的 SQL 體系,擁有完全的觸發(fā)器,交易等等。
Android 集成了 SQLite 數(shù)據(jù)庫 Android 在運(yùn)行時(run-time)集成了 SQLite,所以每個 Android 應(yīng)用法度榜樣都可以應(yīng)用 SQLite 數(shù)據(jù)庫。
對于熟悉 SQL 的開辟人員來時,在 Android 開辟中應(yīng)用 SQLite 相當(dāng)簡單。然則,因?yàn)?JDBC 會消費(fèi)太多的體系資本,所以 JDBC 對于手機(jī)這種內(nèi)存受限設(shè)備來說并不合適。是以,Android 供給了一些新的 API 來應(yīng)用 SQLite 數(shù)據(jù)庫,Android 開辟中,法度榜樣員須要學(xué)應(yīng)用這些 API。
數(shù)據(jù)庫存儲在 data/< 項目文件夾 >/databases/ 下。 Android 開辟中應(yīng)用 SQLite 數(shù)據(jù)庫 Activites 可以經(jīng)由過程 Content Provider 或者 Service 拜訪一個數(shù)據(jù)庫。
下面會具體講解如不雅創(chuàng)建數(shù)據(jù)庫,添加數(shù)據(jù)和萌芽數(shù)據(jù)庫。 創(chuàng)建數(shù)據(jù)庫 Android 不主動供給數(shù)據(jù)庫。在 Android 應(yīng)用法度榜樣中應(yīng)用 SQLite,必須本身創(chuàng)建數(shù)據(jù)庫,然后創(chuàng)建表、索引,填充數(shù)據(jù)。
Android 供給了 SQLiteOpenHelper 贊助你創(chuàng)建一個數(shù)據(jù)庫,你只要持續(xù) SQLiteOpenHelper 類,就可以輕松的創(chuàng)建數(shù)據(jù)庫。SQLiteOpenHelper 類根據(jù)開辟應(yīng)用法度榜樣的須要,封裝了創(chuàng)建和更新數(shù)據(jù)庫應(yīng)用的邏輯。
SQLiteOpenHelper 的子類,至少須要實(shí)現(xiàn)三個辦法:
1 構(gòu)造函數(shù),調(diào)用父類 SQLiteOpenHelper 的構(gòu)造函數(shù)。這個辦法須要四個參數(shù):高低文情況(例如,一個 Activity),數(shù)據(jù)庫名字,一個可選的游標(biāo)工廠(平日是 Null),一個代表你正在應(yīng)用的數(shù)據(jù)庫模型版本的┞符數(shù)。
2 onCreate()辦法,它須要一個 SQLiteDatabase 對象作為參數(shù),根據(jù)須要對這個對象填充表和初始化數(shù)據(jù)。
3 onUpgrage() 辦法,它須要三個參數(shù),一個 SQLiteDatabase 對象,一個舊的版本號和一個新的版本號,如許你就可以清跋假使何把一個數(shù)據(jù)庫大年夜舊的模型改變到新的模型。
下面示例代碼展示了若何持續(xù) SQLiteOpenHelper 創(chuàng)建數(shù)據(jù)庫:
Java代碼
  • public class DatabaseHelper extends SQLiteOpenHelper {      
  •   DatabaseHelper(Context context, String name, CursorFactory cursorFactory, int version)   
  •   {        
  •     super(context, name, cursorFactory, version);        
  •      }        
  •   
  •      @Override      
  •      public void onCreate(SQLiteDatabase db) {        
  •          // TODO 創(chuàng)建數(shù)據(jù)庫后,對數(shù)據(jù)庫的操作        
  •      }        
  •   
  •      @Override      
  • public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        
  •          // TODO 更改數(shù)據(jù)庫版本的操作        
  •      }        
  •   
  • @Override      
  • public void onOpen(SQLiteDatabase db) {        
  •          super.onOpen(db);         
  •          // TODO 每次成功打開數(shù)據(jù)庫后起首被履行        
  •      }        
  • }  

接下來評論辯論具體若何創(chuàng)建表、插入數(shù)據(jù)、刪除表等等。調(diào)用 getReadableDatabase() 或 getWriteableDatabase() 辦法,你可以獲得 SQLiteDatabase 實(shí)例,具體調(diào)用那個辦法,取決于你是否須要改變數(shù)據(jù)庫的內(nèi)容:
Java代碼
  • db=(new DatabaseHelper(getContext())).getWritableDatabase();   
  •        return (db == null) ? false : true;  

膳綾擎這段代碼會返回一個 SQLiteDatabase 類的實(shí)例,應(yīng)用這個對象,你就可以萌芽或者修改數(shù)據(jù)庫。 當(dāng)你完成了對數(shù)據(jù)庫的操作(例如你的 Activity 已經(jīng)封閉),須要調(diào)用 SQLiteDatabase 的 Close() 辦法來釋放掉落數(shù)據(jù)庫連接。 創(chuàng)建表和索引 為了創(chuàng)建表和索引,須要調(diào)用 SQLiteDatabase 的 execSQL() 辦法來履行 DDL 語句。如不雅沒有異常,這個辦法沒有返回值。
例如,你可以履行如下代碼:
db.execSQL(“CREATE TABLE mytable (_id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, value REAL);”);
這條語句會創(chuàng)建一個名為 mytable 的表,表有一個列名為 _id,并且是主鍵,這列的值是會主動增長的┞符數(shù)(例如,當(dāng)你插入一行時,SQLite 會給這列主動賦值),別的還有兩列:title( 字符 ) 和 value( 浮點(diǎn)數(shù) )。 SQLite 會主動為主鍵列創(chuàng)建索引。 平日情況下,第一次創(chuàng)建數(shù)據(jù)庫時創(chuàng)建了表和索引。
如不雅你不須要改變表的 schema,不須要刪除表和索引 . 刪除表和索引,須要應(yīng)用 execSQL() 辦法調(diào)用 DROP INDEX 和 DROP TABLE 語句。 給表添加數(shù)據(jù) 膳綾擎的代碼,已經(jīng)創(chuàng)建了數(shù)據(jù)庫和表,如今須要給表添加數(shù)據(jù)。有兩種辦法可以給表添加數(shù)據(jù)。
像膳綾擎創(chuàng)建表一樣,你可以應(yīng)用 execSQL() 辦法履行 INSERT, UPDATE, DELETE 等語句來更新表的數(shù)據(jù)。execSQL() 辦法實(shí)用于所有不返回結(jié)不雅的 SQL 語句。
例如: db.execSQL(“INSERT INTO widgets (name, inventory)”+ “VALUES (‘Sprocket’, 5)”);
另一種辦法是應(yīng)用 SQLiteDatabase 對象的 insert(), update(), delete() 辦法。這些辦法把 SQL 語句的一部分作為參數(shù)。
示例如下:
Java代碼
  • ContentValues cv=new ContentValues();   
  •   
  •     cv.put(Constants.TITLE, "example title");   
  •   
  •     cv.put(Constants.VALUE, SensorManager.GRAVITY_DEATH_STAR_I);   
  •   
  •     db.insert("mytable", getNullColumnHack(), cv);  

update()辦法有四個參數(shù),分別是表名,表示列名和值的 ContentValues 對象,可選的 WHERE 前提和可選的填充 WHERE 語句的字符串,這些字符串會調(diào)換 WHERE 前提中的“?”標(biāo)記。
update() 根據(jù)前提,更新指定列的值,所以用 execSQL() 辦法可以達(dá)到同樣的目標(biāo)。 WHERE 前提和其參數(shù)和用過的其他 SQL APIs 類似。
例如:
String[] parms=new String[] {“this is a string”};
db.update(“widgets”, WordStrments, “name=?”, parms);
delete() 辦法的應(yīng)用和 update() 類似,應(yīng)用表名,可選的 WHERE 前提和響應(yīng)的填充 WHERE 前提的字符串。 萌芽數(shù)據(jù)庫 類似 INSERT, UPDATE, DELETE,有兩種辦法應(yīng)用 SELECT 大年夜 SQLite 數(shù)據(jù)庫檢索數(shù)據(jù)。
1 .應(yīng)用 rawQuery() 直接調(diào)用 SELECT 語句; 應(yīng)用 query() 辦法構(gòu)建一個萌芽。
Raw Queries 正如 API 名字,rawQuery() 是最簡單的解決辦法。經(jīng)由過程這個辦法你就可聲調(diào)用 SQL SELECT 語句。
例如: Cursor c=db.rawQuery( “SELECT name FROM sqlite_master WHERE type=’table’ AND name=’mytable’”, null);
在膳綾擎例子中,我們萌芽 SQLite 體系表(sqlite_master)檢查 table 表是否存在。返回值是一個 cursor 對象,這個對象的辦法可以迭代萌芽結(jié)不雅。 如不雅萌芽是動態(tài)的,應(yīng)用這個辦法就會異常復(fù)雜。
例如,當(dāng)你須要萌芽的列在法度榜樣編譯的時刻不克不及肯定,這時刻應(yīng)用 query() 辦法會便利很多。
Regular Queries query() 辦法用 SELECT 語句段構(gòu)建萌芽。SELECT 語句內(nèi)容作為 query() 辦法的參數(shù),比如:要萌芽的表名,要獲取的字段名,WHERE 前提,包含可選的地位參數(shù),去替代 WHERE 前提中地位參數(shù)的值,GROUP BY 前提,HAVING 前提。 除了表名,其他參數(shù)可所以 null。所以,以前的代碼段可以可寫成:
String[] columns={“ID”, ”inventory”};
Java代碼
  • String[] parms={"snicklefritz"};   
  • Cursor result=db.query("widgets", columns, "name=?",parms, null, null, null);  

應(yīng)用游標(biāo)
不管你若何履行萌芽,都邑返回一個 Cursor,這是 Android 的 SQLite 數(shù)據(jù)庫游標(biāo),
應(yīng)用游標(biāo),你可以:
經(jīng)由過程應(yīng)用 getCount() 辦法獲得結(jié)不雅集中有若干記錄;
經(jīng)由過程 moveToFirst(), moveToNext(), 和 isAfterLast() 辦法遍歷所有記錄;
經(jīng)由過程 getColumnNames() 獲得字段名;
經(jīng)由過程 getColumnIndex() 轉(zhuǎn)換成字段號;
經(jīng)由過程 getString(),getInt() 等辦法獲得給定字段當(dāng)前記錄的值;
經(jīng)由過程 requery() 辦法從新履行萌芽獲得游標(biāo);
經(jīng)由過程 close() 辦法釋放游標(biāo)資本;
例如,下面代碼遍歷 mytable 表:
Java代碼
  • Cursor result=db.rawQuery("SELECT ID, name, inventory FROM mytable");        
  • result.moveToFirst();   
  •     while (!result.isAfterLast()) {   
  •         int id=result.getInt(0);   
  •         String name=result.getString(1);   
  •         int inventory=result.getInt(2);   
  •         // do something useful with these   
  •         result.moveToNext();   
  •       }   
  •   
  • result.close();  

在 Android 中應(yīng)用 SQLite 數(shù)據(jù)庫治理對象 在其他數(shù)據(jù)庫上作開辟,一般都應(yīng)用對象來檢查和處理數(shù)據(jù)庫的內(nèi)容,而不是僅僅應(yīng)用數(shù)據(jù)庫的 API。
應(yīng)用 Android 模仿器,有兩種可供選擇的辦法來治理數(shù)據(jù)庫。
起首,模仿器綁定了 sqlite3 控制臺法度榜樣,可以應(yīng)用 adb shell 敕令來調(diào)用他。只要你進(jìn)入了模仿器的 shell,在數(shù)據(jù)庫的路徑履行 sqlite3 敕令就可以了。
數(shù)據(jù)庫文件一般存放在: /data/data/your.app.package/databases/your-db-name 如不雅你愛好應(yīng)用更友愛的對象,你可以把數(shù)據(jù)庫拷貝到你的開辟機(jī)上,應(yīng)用 SQLite-aware 客戶妒攀來操作它。如許的話,你在一個數(shù)據(jù)庫的拷貝上操作,如不雅你想要你的修改能反竽暌鉤到設(shè)備上,你須要把數(shù)據(jù)庫備份歸去。
把數(shù)據(jù)庫大年夜設(shè)備上考出來,你可以應(yīng)用 adb pull 敕令(或者在 IDE 上做響應(yīng)操作)。
存儲一個修悛改的數(shù)據(jù)庫到設(shè)備上,應(yīng)用 adb push 敕令。 一個最便利的 SQLite 客戶端是 FireFox SQLite Manager 擴(kuò)大,它可以跨所有平臺應(yīng)用。
下圖是SQLite Manager對象:

[img]http://dl2.iteye.com/upload/attachment/0104/3785/e6fabbe0-0372-34ff-b96b-8ddbfc322f89.jpg

如不雅你想要開辟 Android 應(yīng)用法度榜樣,必定須要在 Android 上存儲數(shù)據(jù),應(yīng)用 SQLite 數(shù)據(jù)庫是一種異常好的選擇。
第五種: 收集存儲數(shù)據(jù)
前面介紹的幾種存儲都是將數(shù)據(jù)存儲在本地設(shè)備上,除此之外,還有一種存儲(獲取)數(shù)據(jù)的方法,經(jīng)由過程收集來實(shí)現(xiàn)數(shù)據(jù)的存儲和獲取。
我們可聲調(diào)用WebService返回的數(shù)據(jù)或是解析HTTP協(xié)定實(shí)現(xiàn)收集數(shù)據(jù)交互。
具體須要熟悉java.net.*,Android.net.*這兩個包的內(nèi)容,在這就不贅述了,請大年夜家參閱相干文檔。
下面是一個經(jīng)由過程地區(qū)名稱萌芽該地區(qū)的氣象預(yù)告,以POST發(fā)送的方法發(fā)送請求到webservicex.net站點(diǎn),拜訪WebService.webservicex.net站點(diǎn)上供給萌芽氣象預(yù)告的辦事。
代碼如下:
Java代碼
  • package com.android.weather;   
  •   
  • import java.util.ArrayList;   
  • import java.util.List;   
  •   
  • import org.apache.http.HttpResponse;   
  • import org.apache.http.NameValuePair;   
  • import org.apache.http.client.entity.UrlEncodedFormEntity;   
  • import org.apache.http.client.methods.HttpPost;   
  • import org.apache.http.impl.client.DefaultHttpClient;   
  • import org.apache.http.message.BasicNameValuePair;   
  • import org.apache.http.protocol.HTTP;   
  • import org.apache.http.util.EntityUtils;   
  •   
  • import android.app.Activity;   
  • import android.os.Bundle;   
  •   
  • public class MyAndroidWeatherActivity extends Activity {   
  •     //定義須要獲取的內(nèi)容來源地址   
  •     private static final String SERVER_URL =   
  •         "http://www.webservicex.net/WeatherForecast.asmx/GetWeatherByPlaceName";   
  •   
  •     /** Called when the activity is first created. */   
  •     @Override   
  •     public void onCreate(Bundle savedInstanceState) {   
  •         super.onCreate(savedInstanceState);   
  •         setContentView(R.layout.main);   
  •   
  •         HttpPost request = new HttpPost(SERVER_URL); //根據(jù)內(nèi)容來源地址創(chuàng)建一個Http請求   
  •         // 添加一個變量   
  •         List<NameValuePair> params = new ArrayList<NameValuePair>();   
  •         // 設(shè)置一個地區(qū)名稱   
  •         params.add(new BasicNameValuePair("PlaceName", "NewYork"));  //添加必須的參數(shù)   
  •   
  •         try {   
  •             //設(shè)置參數(shù)的編碼   
  •             request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));   
  •             //發(fā)送請求并獲取反饋   
  •             HttpResponse httpResponse = new DefaultHttpClient().execute(request);   
  •   
  •             // 解析返回的內(nèi)容   
  •             if(httpResponse.getStatusLine().getStatusCode() != 404){   
  •                String result = EntityUtils.toString(httpResponse.getEntity());   
  •                System.out.println(result);   
  •             }   
  •         } catch (Exception e) {   
  •             e.printStackTrace();   
  •        }   
  •     }  

別忘記了在設(shè)備文件中設(shè)置拜訪收集權(quán)限:
Java代碼
  • <uses-permission android:name="android.permission.INTERNET" />

相關(guān)案例查看更多