久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Android中怎么連接數(shù)據(jù)庫

170次閱讀
沒有評論

共計 4735 個字符,預(yù)計需要花費 12 分鐘才能閱讀完成。

這篇文章給大家介紹 Android 中怎么連接數(shù)據(jù)庫,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

問題:用 Eclipse 開發(fā) android,怎么連接到數(shù)據(jù)庫,主要是連接到公司網(wǎng)站上的服務(wù)器上,從那里面的數(shù)據(jù)庫里讀數(shù)據(jù)?

Android 連接數(shù)據(jù)庫
Android 采用關(guān)系型數(shù)據(jù)庫 SQLite3,它是一個支持 SQL 輕量級的嵌入式數(shù)據(jù)庫,在嵌入式操作上有很廣泛的,WM 采用的也是 SQLite3

關(guān)于過于、原理方面的東西在這篇文章里不會提到,但是如果你想能夠快速的學(xué)會操作 SQLite3,那這就是你要找的文章!

首先,我們看一下 api,所有數(shù)據(jù)庫相關(guān)的接口、類都在.database 和 android.database.sqlite 兩個包下,雖然只有兩個包,但是如果你英文不好或是太懶的話也要迷茫一段時間,其實,我們真正用的到的沒有幾個!

1、SQLiteOpenHelper (android.database.sqlite.SQLiteOpenHelper)

這是一個抽象類,關(guān)于抽象類我們都知道,如果要使用它,一定是繼承它!

這個類的方法很少,有一個構(gòu)造方法

SQLiteOpenHelper(android.content.Context context, java.lang.String name,android.database.sqlite.SQLiteDatabase.CursorFactory factory, int version);

參數(shù)不做過多的解釋,CursorFactory 一般直接傳 null 就可以

public void onCreate(SQLiteDatabase db)

此方法在創(chuàng)建數(shù)據(jù)庫是被調(diào)用,所以,應(yīng)該把創(chuàng)建表的操作放到這個方法里面,一會兒在后面我們會再詳細的說如何創(chuàng)建表

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)

從方法名上我們就能知道這個方法是執(zhí)行更新的,沒錯,當(dāng) version 改變是系統(tǒng)會調(diào)用這個方法,所以在這個方法里應(yīng)該執(zhí)行刪除現(xiàn)有表,然后手動調(diào)用 onCreate 的操作

SQLiteDatabase getReadableDatabase()

可讀的 SQLiteDatabase 對象

SQLiteDatabase getWritableDatabase()

獲取可寫的 SQLiteDatabase 對象

2、SQLiteDatabase(android.database.sqlite.SQLiteDatabase)

關(guān)于操作數(shù)據(jù)庫的工作 (增、刪、查、改) 都在這個類里

execSQL(sql)

執(zhí)行 SQL 語句,用這個方法 +SQL 語句可以非常方便的執(zhí)行增、刪、查、改

除此之外,Android 還提供了功過方法實現(xiàn)增、刪、查、改

long insert(TABLE_NAME, null, contentValues)添加記錄

int delete(TABLE_NAME, where, whereValue)刪除記錄

int update(TABLE_NAME, contentValues, where, whereValue) 更新記錄

Cursor query(TABLE_NAME, null, null, null, null, null, null) 查詢記錄

除此之外,還有很多方法,如:beginTransaction()開始事務(wù)、endTransaction()結(jié)束事務(wù) … 有興趣的可以自己看 api,這里就不多贅述了

3、Cursor(android.database.Cursor)

游標(biāo)(接口),這個很熟悉了吧,Cursor 里的方法非常多,常用的有:

boolean moveToPosition(position)將指針移動到某記錄

getColumnIndex(Contacts.People.NAME)按列名獲取 id

int getCount()獲取記錄總數(shù)

boolean requery()重新查詢

boolean isAfterLast()指針是否在末尾

boolean isBeforeFirst()時候是開始位置

boolean isFirst()是否是第一條記錄

boolean isLast()是否是最后一條記錄

boolean moveToFirst()、boolean moveToLast()、boolean moveToNext()同 moveToPosition(position)

4、SimpleCursorAdapter(android.widget.SimpleCursorAdapter)

也許你會奇怪了,之前我還說過關(guān)于數(shù)據(jù)庫的操作都在 database 和 database.sqlite 包下,為什么把一個 Adapter 放到這里,如果你用過 Android 的 SQLite3,你一定會知道

,這是因為我們對數(shù)據(jù)庫的操作會經(jīng)常跟列表聯(lián)系起來

經(jīng)常有朋友會在這出錯,但其實也很簡單

SimpleCursorAdapter adapter = new SimpleCursorAdapter(

this,

R.layout.list,

myCursor,

new String[] {DB.TEXT1,DB. TEXT2},

new int[]{ R.id.list1,R.id.listText2});

my.setAdapter(adapter);

一共 5 個參數(shù),具體如下:

參數(shù) 1:Content

參數(shù) 2: 布局

參數(shù) 3:Cursor 游標(biāo)對象

參數(shù) 4: 顯示的字段,傳入 String[]

參數(shù) 5: 顯示字段使用的組件,傳入 int[],該數(shù)組中是 TextView 組件的 id

到這里,關(guān)于數(shù)據(jù)庫的操作就結(jié)束了,但是到目前為止我只做了翻譯的工作,有些同學(xué)可能還是沒有掌握,放心,下面我們一起順著正常開發(fā)的思路理清一下頭緒!

前面的只是幫沒做過的朋友做下普及,下面才是你真正需要的!

一、寫一個類繼承 SQLiteOpenHelpe

public class DatabaseHelper extends SQLiteOpenHelper

構(gòu)造方法:

DatabaseHelper(Context context) {

super(context, DATABASE_NAME, null, DATABASE_VERSION);

}

在 onCreate 方法里寫建表的操作

public void onCreate(SQLiteDatabase db) {

String sql = CREATE TABLE tb_test (_id INTEGER DEFAULT 1 NOT NULL PRIMARY KEY AUTOINCREMENT,class_jb TEXT NOT NULL,class_ysbj TEXT NOT NULL,title TEXT NOT NULL,content_ysbj TEXT NOT NULL)

db.execSQL(sql);// 需要異常捕獲

}

在 onUpgrade 方法里刪除現(xiàn)有表,然后手動調(diào)用 onCtreate 創(chuàng)建表

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

String sql = drop table +tbname;

db.execSQL(sql);

onCreate(db);

}

對表增、刪、查、改的方法,這里用的是 SQLiteOpenHelper 提供的方法,也可以用 sql 語句實現(xiàn),都是一樣的

關(guān)于獲取可讀 / 可寫 SQLiteDatabase,我不說大家也應(yīng)該會想到,只有查找才會用到可讀的 SQLiteDatabase

/**

* 添加數(shù)據(jù)

*/

public long insert(String tname, int tage, String ttel){

SQLiteDatabase db= getWritableDatabase();// 獲取可寫 SQLiteDatabase 對象

//ContentValues 類似 map,存入的是鍵值對

ContentValues contentValues = new ContentValues();

contentValues.put(tname , tname);

contentValues.put(tage , tage);

contentValues.put(ttel , ttel);

return db.insert(tbname, null, contentValues);

}

/**

* 刪除記錄

* @param _id

*/

public void delete(String _id){

SQLiteDatabase db= getWritableDatabase();

db.delete(tbname,

_id=? ,

new String[]{_id});

}

/**

* 更新記錄的,跟插入的很像

*/

public void update(String _id,String tname, int tage, String ttel){

SQLiteDatabase db= getWritableDatabase();

ContentValues contentValues = new ContentValues();

contentValues.put(tname , tname);

contentValues.put(tage , tage);

contentValues.put(ttel , ttel);

db.update(tbname, contentValues,

_id=? ,

new String[]{_id});

}

/**

* 查詢所有數(shù)據(jù)

* @return Cursor

*/

public Cursor select(){

SQLiteDatabase db = getReadableDatabase();

return db.query(

tbname,

new String[]{ _id , tname , tage , ttel , taddr},

null,

null, null, null, _id desc

}

關(guān)于 db.query 方法的參數(shù),有很多,為了防止大家弄亂,我簡單說一下

參數(shù) 1:表名

參數(shù) 2:返回數(shù)據(jù)包含的列信息,String 數(shù)組里放的都是列名

參數(shù) 3:相當(dāng)于 sql 里的 where,sql 里 where 后寫的內(nèi)容放到這就行了,例如:tage ?

參數(shù) 4:如果你在參數(shù) 3 里寫了?(知道我為什么寫 tage ? 了吧),那個這里就是代替? 的值 接上例:new String[]{ 30}

參數(shù) 5:分組,不解釋了,不想分組就傳 null

參數(shù) 6:having,想不起來的看看 SQL

參數(shù) 7:orderBy 排序

到這里,你已經(jīng)完成了最多的第一步! 我們來看看都用到了那些類:

SQLiteOpenHelper 我們繼承使用的

SQLiteDatabase 增刪查改都離不開它,即使你直接用 sql 語句,也要用到 execSQL(sql)

二、這里無非是對 DatabaseHelper 類定義方法的調(diào)用,沒什么可說的,不過我還是對查詢再嘮叨幾句吧

Android 查詢出來的結(jié)果一 Cursor 形式返回

cursor = sqLiteHelper.select();// 是不是很簡單?

查詢出來的 cursor 一般會顯示在 listView 中,這就要用到剛才提到的 SimpleCursorAdapter

SimpleCursorAdapter adapter = new SimpleCursorAdapter(

this,

R.layout.list_row,

cursor,

new String[]{ tname , ttel},

new int[]{R.id.TextView01,R.id.TextView02}

);

關(guān)于 Android 中怎么連接數(shù)據(jù)庫就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-04發(fā)表,共計4735字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 苏尼特右旗| 雷州市| 长宁区| 湖北省| 平山县| 华安县| 九江县| 东辽县| 平潭县| 明星| 海安县| 禹城市| 云浮市| 海伦市| 思南县| 巨鹿县| 沅江市| 晋州市| 临湘市| 永宁县| 乳山市| 乳源| 海门市| 保康县| 时尚| 金门县| 永州市| 定安县| 肥乡县| 临城县| 铁岭市| 漠河县| 黄浦区| 西藏| 通道| 伊川县| 铁力市| 石泉县| 万年县| 宁城县| 青龙|