新聞中心
在安卓開發(fā)中,使用數(shù)據(jù)庫是很常見的操作之一。在使用數(shù)據(jù)庫時,我們需要對數(shù)據(jù)庫中的數(shù)據(jù)類型進(jìn)行判斷,以便正確地處理和顯示數(shù)據(jù)。本文將深入探討安卓數(shù)據(jù)庫數(shù)據(jù)類型的判斷方法。

一、SQLite數(shù)據(jù)類型
SQLiteDatabase是安卓中常見的數(shù)據(jù)庫,其使用的數(shù)據(jù)庫是SQLite。SQLite支持五種不同的數(shù)據(jù)類型:NULL、INTEGER、REAL、TEXT和BLOB。其中,NULL表示空值;INTEGER表示整數(shù)值;REAL表示浮點數(shù)值;TEXT表示文本字符串;BLOB表示二進(jìn)制數(shù)據(jù)。
在Android開發(fā)中,我們通常使用SQLiteDatabase類進(jìn)行數(shù)據(jù)庫操作。該類提供了許多方法來處理不同的數(shù)據(jù)類型。例如,我們可以使用getBlob()方法獲取BLOB類型數(shù)據(jù),使用getInt()方法獲取INTEGER類型數(shù)據(jù)等等。
二、如何判斷數(shù)據(jù)類型
1.使用getColumnType(int columnIndex)方法
SQLiteDatabase提供了getColumnType(int columnIndex)方法,我們可以使用該方法來獲取指定列的數(shù)據(jù)類型。該方法的參數(shù)是列的索引值。
例如,下面的代碼可以獲取之一列的數(shù)據(jù)類型:
“`
Cursor cursor = db.rawQuery(“SELECT * FROM table_name”, null);
String type = cursor.getType(0) == 0 ? “NULL” :
cursor.getType(0) == 1 ? “INTEGER” :
cursor.getType(0) == 2 ? “FLOAT” :
cursor.getType(0) == 3 ? “STRING” :
cursor.getType(0) == 4 ? “BLOB” : “”;
“`
通過使用getType()方法,我們可以將getColumnType()方法返回的int值轉(zhuǎn)換為對應(yīng)的數(shù)據(jù)類型。
2.使用getColumnTypeName(int columnIndex)方法
除了getColumnType()方法,我們還可以使用getColumnTypeName(int columnIndex)方法來獲取列的數(shù)據(jù)類型名稱。
例如,下面的代碼可以獲取之一列的數(shù)據(jù)類型名稱:
“`
Cursor cursor = db.rawQuery(“SELECT * FROM table_name”, null);
String typeName = cursor.getColumnTypeName(0);
“`
getColumnTypeName()方法返回一個字符串,表示該列的數(shù)據(jù)類型名稱。例如,如果該列的數(shù)據(jù)類型是INTEGER,則該方法返回”INTEGER”。
3.使用DatabaseUtils類中的getTypeOfObject(Object obj)方法
除了上述兩種方法外,我們還可以使用DatabaseUtils類中的getTypeOfObject(Object obj)方法來獲取對象的數(shù)據(jù)類型。該方法的參數(shù)是要獲取數(shù)據(jù)類型的對象。
例如,下面的代碼可以獲取obj對象的數(shù)據(jù)類型:
“`
Object obj = 123;
String type = DatabaseUtils.getTypeOfObject(obj);
“`
getTypeOfObject()方法返回一個字符串,表示obj對象的數(shù)據(jù)類型名稱。如果obj是整數(shù),則該方法返回”INTEGER”。
三、判斷數(shù)據(jù)類型的應(yīng)用場景
在安卓開發(fā)中,判斷數(shù)據(jù)庫中的數(shù)據(jù)類型通常用于以下兩個方面:
1.數(shù)據(jù)導(dǎo)出
在使用SQLite數(shù)據(jù)庫時,我們可能需要將數(shù)據(jù)庫中的某些數(shù)據(jù)導(dǎo)出到其他文件格式中。例如,我們可能需要將數(shù)據(jù)導(dǎo)出為CSV、Excel或PDF等格式。在導(dǎo)出數(shù)據(jù)時,需要用到正確的數(shù)據(jù)類型。
例如,如果將BLOB類型的數(shù)據(jù)導(dǎo)出到CSV文件中,則需要將BLOB類型的數(shù)據(jù)轉(zhuǎn)換為十六進(jìn)制字符串。
2.數(shù)據(jù)顯示
在應(yīng)用程序中顯示數(shù)據(jù)時,需要用正確的方式來顯示各種數(shù)據(jù)類型。例如,如果我們想要顯示一個整數(shù)值,則需要將其轉(zhuǎn)換為字符串類型,然后在應(yīng)用程序中顯示。
四、
在安卓開發(fā)中,使用數(shù)據(jù)庫時,數(shù)據(jù)類型是一個重要的概念。我們需要正確地判斷和處理不同的數(shù)據(jù)類型,以便準(zhǔn)確地處理和顯示數(shù)據(jù)。這篇文章深入探討了安卓數(shù)據(jù)庫數(shù)據(jù)類型的判斷方法,并說明了判斷數(shù)據(jù)類型的應(yīng)用場景。希望對安卓開發(fā)者有所幫助。
相關(guān)問題拓展閱讀:
- android數(shù)據(jù)存儲
- 如何查找數(shù)據(jù)庫表字段的類型?。?!
android數(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ù)邏輯,或者需求,用不同的實現(xiàn)方式
以下是這幾中數(shù)據(jù)存儲方式的說明用及法,
之一種: 使用SharedPreferences存儲數(shù)據(jù)
SharedPreferences是Android平臺上一個輕量級的存儲類,主要是保存一些常用的配置比如窗口狀態(tài),
一般在Activity中 重載窗口狀態(tài)onSaveInstanceState保存一般使用SharedPreferences完成,
它提供了Android平臺常規(guī)的Long長 整形、Int整形、String字符串型的保存。
它是什么樣的處理方式呢? SharedPreferences類似過去Windows系統(tǒng)上的ini配置文件,但是它分為多種權(quán)限,
可以全局共享訪問,android123提示最終是以xml方式來保存,整體效率來看不是特別的高,
對于常規(guī)的輕量級而言比SQLite要好不少,如果真的存儲量不大可以考慮自己定義文件格式。
xml 處理時Dalvik會通過自帶底層的本地XML Parser解析,比如XMLpull方式,這樣對于內(nèi)存資源占用比較好。
它的本質(zhì)是基于XML文件存儲key-value鍵值對數(shù)據(jù),通常用來存儲一些簡單的配置信息。
其存儲位置在/data/data//shared_prefs目錄下。
SharedPreferences對象本身只能獲取數(shù)據(jù)而不支持存儲和修改,存儲修改是通過Editor對象實現(xiàn)。
實現(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目錄下生成了一個SP.xml文件,一個應(yīng)用可以創(chuàng)建多個這樣的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ù)輸出到文件中,具體的實現(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 ,
通過點擊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)在安裝時系統(tǒng)就會分配給他一個userid,當(dāng)該應(yīng)用要去訪問其他資源比如文件的時候,就需要userid匹配。默認(rèn)情況下,任何應(yīng)用創(chuàng)建的文件,sharedpreferences,數(shù)據(jù)庫都應(yīng)該是私有的(位于/data/data//files),其他程序無法訪問。
除非在創(chuàng)建時指定了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)建文件時,指定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)建模擬器時隨同創(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,你需要申請訪問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)存就有很好的性能。
此外它還是開源的,任何人都可以使用它。
許多開源項目((Mozilla, PHP, Python)都使用了 SQLite
SQLite 由以下幾個組件組成:SQL 編譯器、內(nèi)核、后端以及附件。
SQLite 通過利用虛擬機(jī)和虛擬數(shù)據(jù)庫引擎(VDBE),使調(diào)試、修改和擴(kuò)展 SQLite 的內(nèi)核變得更加方便。
特點:
面向資源有限的設(shè)備,
沒有服務(wù)器進(jìn)程,
所有數(shù)據(jù)存放在同一文件中跨平臺,
可自由復(fù)制。
SQLite 基本上符合 SQL-92 標(biāo)準(zhǔn),和其他的主要 SQL 數(shù)據(jù)庫沒什么區(qū)別。它的優(yōu)點就是高效,Android 運行時環(huán)境包含了完整的 SQLite。
SQLite 和其他數(shù)據(jù)庫更大的不同就是對數(shù)據(jù)類型的支持,創(chuàng)建一個表時,可以在 CREATE TABLE 語句中指定某列的數(shù)據(jù)類型,但是你可以把任何數(shù)據(jù)類型放入任何列中。當(dāng)某個值插入數(shù)據(jù)庫時,SQLite 將檢查它的類型。如果該類型與關(guān)聯(lián)的列不匹配,則 SQLite 會嘗試將該值轉(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 系統(tǒng),擁有完整的觸發(fā)器,交易等等。
Android 集成了 SQLite 數(shù)據(jù)庫 Android 在運行時(run-time)集成了 SQLite,所以每個 Android 應(yīng)用程序都可以使用 SQLite 數(shù)據(jù)庫。
對于熟悉 SQL 的開發(fā)人員來時,在 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 訪問一個數(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)建一個數(shù)據(jù)庫,你只要繼承 SQLiteOpenHelper 類,就可以輕松的創(chuàng)建數(shù)據(jù)庫。SQLiteOpenHelper 類根據(jù)開發(fā)應(yīng)用程序的需要,封裝了創(chuàng)建和更新數(shù)據(jù)庫使用的邏輯。
SQLiteOpenHelper 的子類,至少需要實現(xiàn)三個方法:
1 構(gòu)造函數(shù),調(diào)用父類 SQLiteOpenHelper 的構(gòu)造函數(shù)。這個方法需要四個參數(shù):上下文環(huán)境(例如,一個 Activity),數(shù)據(jù)庫名字,一個可選的游標(biāo)工廠(通常是 Null),一個代表你正在使用的數(shù)據(jù)庫模型版本的整數(shù)。
2 onCreate()方法,它需要一個 SQLiteDatabase 對象作為參數(shù),根據(jù)需要對這個對象填充表和初始化數(shù)據(jù)。
3 onUpgrage() 方法,它需要三個參數(shù),一個 SQLiteDatabase 對象,一個舊的版本號和一個新的版本號,這樣你就可以清楚如何把一個數(shù)據(jù)庫從舊的模型轉(zhuǎn)變到新的模型。
第四種 使用ContentProvider存儲數(shù)據(jù) ContentProvider其實也是通過數(shù)據(jù)庫的方式來存儲數(shù)據(jù)的,因此這里不再做詳細(xì)介紹
如何查找數(shù)據(jù)庫表字段的類型?。?!
這三弊姿個表對你有用
sysobjects和syscolumns和systypes
第侍衫一個可以查到表,第二個表可以查到列,第老卜腔三個表可以查到數(shù)據(jù)類型
關(guān)聯(lián)起來用就可以得到某個表中所有列的數(shù)據(jù)類型了
SELECT t.column_name, t.data_type
FROM all_tab_cols t
where t.table_name = ‘吵判表名枯碰纖沒仿’
你棚隱襲建表的時候不指定類型鏈兄么?
哦,我攜培知道oracle可以打
desc 表名;
SQL Server 不知道,呵呵.
是什么數(shù)據(jù)啊 MSSQLSERVER的話方法態(tài)啟絕很多帆姿啊 企業(yè)管理器和查詢分析器都可以看啊 或者用SP_HELP 表名 ,======太多旁山了
安卓怎么判斷數(shù)據(jù)庫是否有數(shù)據(jù)類型的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于安卓怎么判斷數(shù)據(jù)庫是否有數(shù)據(jù)類型,安卓數(shù)據(jù)庫數(shù)據(jù)類型判斷方法解析,android數(shù)據(jù)存儲,如何查找數(shù)據(jù)庫表字段的類型?。?!的信息別忘了在本站進(jìn)行查找喔。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
本文標(biāo)題:安卓數(shù)據(jù)庫數(shù)據(jù)類型判斷方法解析(安卓怎么判斷數(shù)據(jù)庫是否有數(shù)據(jù)類型)
網(wǎng)站地址:http://m.fisionsoft.com.cn/article/djsedeh.html


咨詢
建站咨詢
