導航:首頁 > 操作系統 > android資料庫操作類

android資料庫操作類

發布時間:2023-04-08 10:55:32

① 如何在android自帶的sqlite3中創建一個資料庫文件,請大蝦門詳細指導

Android中提供4種數據存儲的方法:(1)SharedPreferences,用鍵值對的方式來存儲數據,是一種輕量級的存儲機制,可以存儲一些屬性等。(2)Files:文件輸入輸出流的方式存儲數據,FileInputStream和FileOutputStream。在Android中,文件是一個應用程序私有的,一個應用程序無法讀寫其他應用程序的文件。寫入SD卡除外。(3)SQLite(4)網路(這個不算吧~~~--!)。
SQLite:
(1)創建和打開資料庫可以使用方法openOrCreateDatabase,它會自動去檢測是否存在資料庫,如果存在則打開,如果不存在則創建一個資料庫;成功返回一個SQliteDatabase對象。(2)創建一張表通過SQL語句實現,調用sqliteDatabase對象的execSQL方法,執行創建表的SQL語句。
(3)向數據表中添加一條記錄可以直接通過SQL語句實現,也可以使用ContentValue對象,ContentValue對象是一個Map,Key是欄位名,Value是值。Cv.put(key,value);然後調用sqliteDatabase對象的
insert(tableName,null,cv)方法插入數據。
(4)刪除數據可以直接執行SQL,也可以執行sqliteDatabase的delete方法。
(5)同理修改數據也是執行SQL或調用update方法,需要傳入ContenValue的對象表示修改的內容。
(6)關閉資料庫sqliteDatabase.close();
(7)刪除指定表調用SQL語句即可。
(8)查詢:在Android中查詢數據是通過Cursor類來實現的,當我們使用SQLiteDatabase.query()方法時,會得到一個Cursor對象,Cursor對象指向的是每條數據。例如cur.moveToFirst();cur.moveToNext();等。在實際開發中,為了能夠更好地管理和維護資料庫,我們會封裝一個繼承自SQLiteOpenHelper類的資料庫操作類。SQLiteOpenHelper的構造方法中分別需要傳入Context、資料庫名稱、CursorFactory(一般默認null)、資料庫版本號。在SQLiteOpenHelper中首先執行的是onCreate方法(當資料庫第一次被創建時)。在構造函數中並沒有真正創建資料庫,而是調用getWriteableDatabase或者getReadableDatabase方法時才真正去創建資料庫,並且返回一個SQLiteDatabase對象。

② Android 聯系人資料庫介紹以及對聯系人的基本操作

您好,很高興為您解答。


一、 聯系人資料庫
 聯系人的資料庫文件的位置
/data/data/com.android.providers.contacts/databases.contacts2.db
 資料庫中重要的幾張表
1、contacts表
該表保存了所有的手機測聯系人,每個聯系人佔一行,該表保存了聯系人的
ContactID、聯系次數、最後一次聯系的時間、是否含有號碼、是否被添加
到收藏夾等信息。
2、raw_contacts表
該表保存了所有創建過的手機測聯系人,每個聯系人佔一行,表裡有一列標
識該聯系人是否被刪除,該表保存了兩個ID:RawContactID和ContactID,
從而將contacts表和raw_contacts表聯系起來。該表保存了聯系人的
RawContactID、ContactID、聯系次數、最後一次聯系的時間、是否被添
加到收藏夾、顯示的名字、用於排序的漢語拼音等信息。

3、 mimetypes
該表定義了所有的MimeTypeID,即聯系人的各個欄位的唯一標志。

4、data表
 該表保存了所有創建過的手機測聯系人的所有信息,每個欄位佔一行 ,該表
保存了兩個ID:MimeTypeID和RawContactID,從而將data表和
raw_contacts表聯系起來。
 聯系人的所有信息保存在列data1至data15中,各列中保存的內容根據
MimeTypeID的不同而不同。如保存號碼(MimeTypeID=5)的那行數據中,
data1列保存號碼,data2列保存號碼類型(手機號碼/家庭號碼/工作號碼等)。


二、對聯系人的基本操作
 這里的基本操作只是針對手機測的聯系人,(U)SIM側的聯系人的操
作後續介紹。
 如果對聯系人的基本操作,我們必須得到許可。
方法就是在AndroidManifest.xml文件中配置如下許可權:

<uses-permissionandroid:name="android.permission.READ_CONTACTS"
/>
<uses-permissionandroid:name="android.permission.WRITE_CONTACTS"
/>


讀取聯系人
分為以下步驟:
1、先讀取contacts表,獲取ContactsID;
2、再在raw_contacts表中根據ContactsID獲取RawContactsID;
3、然後就可以在data表中根據RawContactsID獲取該聯系人的各數據了。

//獲取用來操作數據的類的對象,對聯系人的基本操作都是使用這個對象
ContentResolvercr=getContentResolver();
//查詢contacts表的所有記錄
Cursorcur=cr.query(ContactsContract.Contacts.CONTENT_URI,null,null,
null,null);
//如果記錄不為空
if(cur.getCount()>0)
{
//游標初始指向查詢結果的第一條記錄的上方,執行moveToNext函數會判斷
//下一條記錄是否存在,如果存在,指向下一條記錄。否則,返回false。
while(cur.moveToNext())
{
StringrawContactsId="";
Stringid=
cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
str+="ID:"+id+" ";二、對聯系人的基本操作(4)
//讀取rawContactsId
CursorrawContactsIdCur=cr.query(RawContacts.CONTENT_URI,
null,
RawContacts.CONTACT_ID+"=?",
newString[]{id},null);
//該查詢結果一般只返回一條記錄,所以我們直接讓游標指向第一條記錄
if(rawContactsIdCur.moveToFirst())
{
//讀取第一條記錄的RawContacts._ID列的值
rawContactsId=
rawContactsIdCur.getString(rawContactsIdCur.getColumnIndex(
RawContacts._ID));
}
rawContactsIdCur.close();
//讀取號碼
If(Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.
Contacts.HAS_PHONE_NUMBER)))>0)
{
//根據查詢RAW_CONTACT_ID查詢該聯系人的號碼
CursorPhoneCur=
cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID+"=
?",
newString[]{rawContactsId},null);
//上面的ContactsContract.CommonDataKinds.Phone.CONTENT_URI
//可以用下面的phoneUri代替
//UriphoneUri=Uri.parse("content://com.android.contacts/data/phones");二、對聯系人的基本操作(6)
//一個聯系人可能有多個號碼,需要遍歷
while(PhoneCur.moveToNext())
{
//號獲取碼
Stringnumber=
PhoneCur.getString(PhoneCur.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.NUMBER));
//獲取號碼類型
StringnumberType=
PhoneCur.getString(PhoneCur.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.TYPE));
}
PhoneCur.close();

新建聯系人
新建聯系人時, 根據contacts、raw_ contacts兩張表中ID的使用情況,自動
生成ContactID和RawContactID。
Android源碼新建重復姓名的聯系人的ContactID是不重復的,所以會重復顯
示。
用下面的代碼新建聯系人,如果多次新建的聯系人的姓名是一樣的,生成的
ContactID也會重復,RawContactID不會重復,我們在讀取聯系人的時候可
以獲取所有同姓名聯系人的號碼等信息,在顯示聯系人的時候,重復姓名的
聯系人的所有欄位信息都會合並起來顯示為一個聯系人。

ContentValuesvalues=newContentValues();
UrirawContactUri=
getContentResolver().insert(RawContacts.CONTENT_URI,values);
longrawContactId=ContentUris.parseId(rawContactUri);二、對聯系人的基本操作(8)
//向data表插入姓名數據
if(name!="")
{
values.clear();
values.put(Data.RAW_CONTACT_ID,rawContactId);
values.put(Data.MIMETYPE,
StructuredName.CONTENT_ITEM_TYPE);
values.put(StructuredName.GIVEN_NAME,name);
getContentResolver().insert(ContactsContract.Data.CONTENT_URI,
values);
}

//向data表插入電話數據
if(phoneNum!="")
{
values.clear();
values.put(Data.RAW_CONTACT_ID,rawContactId);
values.put(Data.MIMETYPE,Phone.CONTENT_ITEM_TYPE);
values.put(Phone.NUMBER,phoneNum);
values.put(Phone.TYPE,Phone.TYPE_MOBILE);
getContentResolver().insert(ContactsContract.Data.CONTENT_URI,
values);
}

刪除聯系人
我們只需要將raw_contacts表中指定RawContactID的

行刪除,其他表中與之關聯的數據都會自動刪除。


publicvoiddelete(longrawContactId)
{
getContentResolver().delete(ContentUris.withAppendedId(RawContac
ts.CONTENT_URI,rawContactId),null,null);
}


更新聯系人
聯系人的所有信息都是保存在data表中,所以要更新聯系人,我們只需要根
據RawContactID和MIMETYPE修改data表中的內容。

ContentValuesvalues=newContentValues();
values.put(Phone.NUMBER,「123");
values.put(Phone.TYPE,Phone.TYPE_MOBILE);
StringWhere=ContactsContract.Data.RAW_CONTACT_ID+"=?AND
"+ContactsContract.Data.MIMETYPE+"=?";
String[]WhereParams=newString[]{"5",Phone.CONTENT_ITEM_TYPE};
getContentResolver().update(ContactsContract.Data.CONTENT_URI,
values,Where,WhereParams);

如若滿意,請點擊右側【採納答案】,如若還有問題,請點擊【追問】


希望我的回答對您有所幫助,望採納!


~O(∩_∩)O~

③ 如何操作android中的資料庫

Android 不自動提供資料庫。在 Android 應用程序中使用 SQLite,必須自己創建資料庫,然後創建表、索引,填充數據。Android 提供了 SQLiteOpenHelper 幫助你創建一個資料庫,你只要繼承 SQLiteOpenHelper 類,就可以輕松的創建資料庫。SQLiteOpenHelper 類根據開發應用程序的需要,封裝了創建和更新資料庫使用的邏輯。SQLiteOpenHelper 的子類,至少需要實現三個方法:
構造函數,調用父類 SQLiteOpenHelper 的構造函數
onCreate()方法;// TODO 創建資料庫後,對資料庫的操作
onUpgrage()方法。// TODO 更改資料庫版本的操作
當你完成了對資料庫的操作(例如你的 Activity 已經關閉),需要調用 SQLiteDatabase 的 Close() 方法來釋放掉資料庫連接。

④ 如何進行Android資料庫操作

Android資料庫操作類實例
實體類:UserInfo.java
package my.db;
import java.io.Serializable;
import android.graphics.drawable.Drawable;
public class UserInfo implements Serializable {
public static final String ID = "_id";
public static final String USERID = "userId";
public static final String TOKEN = "token";
public static final String TOKENSECRET = "tokenSecret";
public static final String USERNAME = "userName";
public static final String USERICON = "userIcon";
private String id;
private String userId; // 用戶id
private String token;
private String tokenSecret;
private String userName;
private Drawable userIcon;
//getter and setter省略
}
SqliteHelper類:
package my.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class SqliteHelper extends SQLiteOpenHelper{
//用來保存UserID、Access Token、Access Secret的表名
public static final String TB_NAME= "users";
public SqliteHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
//創建表
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL( "CREATE TABLE IF NOT EXISTS "+
TB_NAME+ "("+
UserInfo. ID+ " integer primary key,"+
UserInfo. USERID+ " varchar,"+
UserInfo. TOKEN+ " varchar,"+
UserInfo. TOKENSECRET+ " varchar,"+
UserInfo. USERNAME+ " varchar,"+
UserInfo. USERICON+ " blob"+
")"
);
Log. e("Database" ,"onCreate" );
}
//更新表
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL( "DROP TABLE IF EXISTS " + TB_NAME );
onCreate(db);
Log. e("Database" ,"onUpgrade" );
}
//更新列
public void updateColumn(SQLiteDatabase db, String oldColumn, String newColumn, String typeColumn){
try{
db.execSQL( "ALTER TABLE " +
TB_NAME + " CHANGE " +
oldColumn + " "+ newColumn +
" " + typeColumn
);
} catch(Exception e){
e.printStackTrace();
}
}
}
CRUD類DataHelper:
package my.db;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.util.Log;
public class DataHelper {
// 資料庫名稱
private static String DB_NAME = "weibo.db";
// 資料庫版本
private static int DB_VERSION = 2;
private SQLiteDatabase db;
private SqliteHelper dbHelper;
public DataHelper(Context context) {
dbHelper = new SqliteHelper(context, DB_NAME, null, DB_VERSION );
db = dbHelper.getWritableDatabase();
}
public void Close() {
db.close();
dbHelper.close();
}
// 獲取users表中的UserID、Access Token、Access Secret的記錄
public List<UserInfo> GetUserList(Boolean isSimple) {
List<UserInfo> userList = new ArrayList<UserInfo>();
Cursor cursor = db.query(SqliteHelper. TB_NAME, null, null , null, null,
null, UserInfo. ID + " DESC");
cursor.moveToFirst();
while (!cursor.isAfterLast() && (cursor.getString(1) != null )) {
UserInfo user = new UserInfo();
user.setId(cursor.getString(0));
user.setUserId(cursor.getString(1));
user.setToken(cursor.getString(2));
user.setTokenSecret(cursor.getString(3));
if (!isSimple) {
user.setUserName(cursor.getString(4));
ByteArrayInputStream stream = new ByteArrayInputStream(cursor.getBlob(5));
Drawable icon = Drawable.createFromStream(stream, "image");
user.setUserIcon(icon);
}
userList.add(user);
cursor.moveToNext();
}
cursor.close();
return userList;
}
// 判斷users表中的是否包含某個UserID的記錄
public Boolean HaveUserInfo(String UserId) {
Boolean b = false;
Cursor cursor = db.query(SqliteHelper. TB_NAME, null, UserInfo.USERID
+ "=?", new String[]{UserId}, null, null, null );
b = cursor.moveToFirst();
Log. e("HaveUserInfo", b.toString());
cursor.close();
return b;
}
// 更新users表的記錄,根據UserId更新用戶昵稱和用戶圖標
public int UpdateUserInfo(String userName, Bitmap userIcon, String UserId) {
ContentValues values = new ContentValues();
values.put(UserInfo. USERNAME, userName);
// BLOB類型
final ByteArrayOutputStream os = new ByteArrayOutputStream();
// 將Bitmap壓縮成PNG編碼,質量為100%存儲
userIcon.compress(Bitmap.CompressFormat. PNG, 100, os);
// 構造SQLite的Content對象,這里也可以使用raw
values.put(UserInfo. USERICON, os.toByteArray());
int id = db.update(SqliteHelper. TB_NAME, values, UserInfo.USERID + "=?" , new String[]{UserId});
Log. e("UpdateUserInfo2", id + "");
return id;
}
// 更新users表的記錄
public int UpdateUserInfo(UserInfo user) {
ContentValues values = new ContentValues();
values.put(UserInfo. USERID, user.getUserId());
values.put(UserInfo. TOKEN, user.getToken());
values.put(UserInfo. TOKENSECRET, user.getTokenSecret());
int id = db.update(SqliteHelper. TB_NAME, values, UserInfo.USERID + "="
+ user.getUserId(), null);
Log. e("UpdateUserInfo", id + "");
return id;
}
// 添加users表的記錄
public Long SaveUserInfo(UserInfo user) {
ContentValues values = new ContentValues();
values.put(UserInfo. USERID, user.getUserId());
values.put(UserInfo. TOKEN, user.getToken());
values.put(UserInfo. TOKENSECRET, user.getTokenSecret());
Long uid = db.insert(SqliteHelper. TB_NAME, UserInfo.ID, values);
Log. e("SaveUserInfo", uid + "");
return uid;
}
// 添加users表的記錄
public Long SaveUserInfo(UserInfo user, byte[] icon) {
ContentValues values = new ContentValues();
values.put(UserInfo. USERID, user.getUserId());
values.put(UserInfo. USERNAME, user.getUserName());
values.put(UserInfo. TOKEN, user.getToken());
values.put(UserInfo. TOKENSECRET, user.getTokenSecret());
if(icon!= null){
values.put(UserInfo. USERICON, icon);
}
Long uid = db.insert(SqliteHelper. TB_NAME, UserInfo.ID, values);
Log. e("SaveUserInfo", uid + "");
return uid;
}
// 刪除users表的記錄
public int DelUserInfo(String UserId) {
int id = db.delete(SqliteHelper. TB_NAME,
UserInfo. USERID + "=?", new String[]{UserId});
Log. e("DelUserInfo", id + "");
return id;
}
public static UserInfo getUserByName(String userName,List<UserInfo> userList){
UserInfo userInfo = null;
int size = userList.size();
for( int i=0;i<size;i++){
if(userName.equals(userList.get(i).getUserName())){
userInfo = userList.get(i);
break;
}
}
return userInfo;
}
}

⑤ Android一般採用什麼資料庫

用的Eclipse,數據量的話還可以把,因為是初學,所以就打算先少弄幾個景點先試試,我想的是能不能做到應用去鏈接一個遠端的資料庫,就是比方說點開一個景點信息,它是從資料庫中下載出來的。。額。。專業的我也不會說。。

⑥ 在android中對資料庫做增刪改查有兩種方式分別是sqlitedatabase這個類中的哪幾個

一、使用嵌入式關系型SQLite資料庫存儲數據
在Android平台上,集成了一個嵌入式關系型資料庫——SQLite,SQLite3支持NULL、INTEGER、REAL(浮點數字)、 TEXT(字元串文本)和BLOB(二進制對象)數據類型,雖然它支持的類型只有五種,但實際上sqlite3也接受varchar(n)、 char(n)、decimal(p,s) 等數據類型,只不過在運算或保存時會轉成對應的五種數據類型。 SQLite最大的特點是你可以把各種類型的數據保存到任何欄位中,而不用關心欄位聲明的數據類型是什麼。例如:可以在Integer類型的欄位中存放字元串,或者在布爾型欄位中存放浮點數,或者在字元型欄位中存放日期型值。 但有一種情況例外:定義為INTEGER PRIMARY KEY的欄位只能存儲64位整數, 當向這種欄位保存除整數以外的數據時,將會產生錯誤。 另外,在編寫CREATE TABLE 語句時,你可以省略跟在欄位名稱後面的數據類型信息,如下面語句你可以省略name欄位的類型信息:
CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))
SQLite可以解析大部分標准SQL語句,如:
復制代碼 代碼如下:

查詢語句:select * from 表名 where 條件子句 group by 分組字句 having ... order by 排序子句
如: select * from person
select * from person order by id desc
select name from person group by name having count(*)>1
分頁SQL與mysql類似,下面SQL語句獲取5條記錄,跳過前面3條記錄
select * from Account limit 5 offset 3 或者 select * from Account limit 3,5
插入語句:insert into 表名(欄位列表) values(值列表)。如: insert into person(name, age) values(『傳智',3)
更新語句:update 表名 set 欄位名=值 where 條件子句。如:update person set name=『傳智『 where id=10
刪除語句:delete from 表名 where 條件子句。如:delete from person where id=10

二、使用SQLiteOpenHelper對資料庫進行版本管理
我們在編寫資料庫應用軟體時,需要考慮這樣的問題:因為我們開發的軟體可能會安裝在很多用戶的手機上,如果應用使用到了SQLite資料庫,我們必須在用戶初次使用軟體時創建出應用使用到的資料庫表結構及添加一些初始化記錄,另外在軟體升級的時候,也需要對數據表結構進行更新。那麼,我們如何才能實現在用戶初次使用或升級軟體時自動在用戶的手機上創建出應用需要的資料庫表呢?總不能讓我們在每個需要安裝此軟體的手機上通過手工方式創建資料庫表吧?因為這種需求是每個資料庫應用都要面臨的,所以在Android系統,為我們提供了一個名為SQLiteOpenHelper的抽象類,必須繼承它才能使用,它是通過對資料庫版本進行管理來實現前面提出的需求。

為了實現對資料庫版本進行管理,SQLiteOpenHelper類提供了兩個重要的方法,分別是onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion),前者用於初次使用軟體時生成資料庫表,後者用於升級軟體時更新資料庫表結構。當調用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法獲取用於操作資料庫的SQLiteDatabase實例的時候,如果資料庫不存在,Android系統會自動生成一個資料庫,接著調用onCreate()方法,onCreate()方法在初次生成資料庫時才會被調用,在onCreate()方法里可以生成資料庫表結構及添加一些應用使用到的初始化數據。onUpgrade()方法在資料庫的版本發生變化時會被調用,一般在軟體升級時才需改變版本號,而資料庫的版本是由程序員控制的,假設資料庫現在的版本是1,由於業務的變更,修改了資料庫表結構,這時候就需要升級軟體,升級軟體時希望更新用戶手機里的資料庫表結構,為了實現這一目的,可以把原來的資料庫版本設置為2(有同學問設置為3行不行?當然可以,如果你願意,設置為100也行),並且在 onUpgrade()方法裡面實現表結構的更新。當軟體的版本升級次數比較多,這時在onUpgrade()方法裡面可以根據原版號和目標版本號進行判斷,然後作出相應的表結構及數據更新。

getWritableDatabase()和 getReadableDatabase()方法都可以獲取一個用於操作資料庫的SQLiteDatabase實例。但 getWritableDatabase() 方法以讀寫方式打開資料庫,一旦資料庫的磁碟空間滿了,資料庫就只能讀而不能寫,倘若使用getWritableDatabase()打開資料庫就會出錯。getReadableDatabase()方法先以讀寫方式打開資料庫,如果資料庫的磁碟空間滿了,就會打開失敗,當打開失敗後會繼續嘗試以只讀方式打開資料庫。
注意:getWritableDatabase(),getReadableDatabase的區別是當資料庫寫滿時,調用前者會報錯,調用後者不會,所以如果不是更新資料庫的話,最好調用後者來獲得資料庫連接。
代碼:
復制代碼 代碼如下:

public class DatabaseHelper extends SQLiteOpenHelper {
//類沒有實例化,是不能用作父類構造器的參數,必須聲明為靜態
private static final String name = "ljqdb"; //資料庫名稱
private static final int version = 1; //資料庫版本
public DatabaseHelper(Context context) {
//第三個參數CursorFactory指定在執行查詢時獲得一個游標實例的工廠類,設置為null,代表使用系統默認的工廠類
super(context, name, null, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS person (
personid integer primary key autoincrement, name varchar(20), age INTEGER)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(" ALTER TABLE person ADD phone VARCHAR(12) NULL "); //往表中增加一列
// DROP TABLE IF EXISTS person 刪除表
}
}

在實際項目開發中,當資料庫表結構發生更新時,應該避免用戶存放於資料庫中的數據丟失。
三、使用SQLiteDatabase操作SQLite資料庫
Android提供了一個名為SQLiteDatabase的類,該類封裝了一些操作資料庫的API,使用該類可以完成對數據進行添加(Create)、查詢(Retrieve)、更新(Update)和刪除(Delete)操作(這些操作簡稱為CRUD)。對SQLiteDatabase的學習,我們應該重點掌握execSQL()和rawQuery()方法。execSQL()方法可以執行insert、delete、update和CREATE TABLE之類有更改行為的SQL語句; rawQuery()方法用於執行select語句。
execSQL()方法的使用例子:
復制代碼 代碼如下:

SQLiteDatabase db = ....;
db.execSQL("insert into person(name, age) values('林計欽', 24)");
db.close();

執行上面SQL語句會往person表中添加進一條記錄,在實際應用中, 語句中的「林計欽」這些參數值會由用戶輸入界面提供,如果把用戶輸入的內容原樣組拼到上面的insert語句, 當用戶輸入的內容含有單引號時,組拼出來的SQL語句就會存在語法錯誤。要解決這個問題需要對單引號進行轉義,也就是把單引號轉換成兩個單引號。有些時候用戶往往還會輸入像「 & 」這些特殊SQL符號,為保證組拼好的SQL語句語法正確,必須對SQL語句中的這些特殊SQL符號都進行轉義,顯然,對每條SQL語句都做這樣的處理工作是比較煩瑣的。 SQLiteDatabase類提供了一個重載後的execSQL(String sql, Object[] bindArgs)方法,使用這個方法可以解決前面提到的問題,因為這個方法支持使用佔位符參數(?)。使用例子如下:
復制代碼 代碼如下:

SQLiteDatabase db = ....;
db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"傳智播客", 4});
db.close();

execSQL(String sql, Object[] bindArgs)方法的第一個參數為SQL語句,第二個參數為SQL語句中佔位符參數的值,參數值在數組中的順序要和佔位符的位置對應。
SQLiteDatabase的rawQuery()用於執行select語句,使用例子如下:
復制代碼 代碼如下:

SQLiteDatabase db = ....;
Cursor cursor = db.rawQuery("select * from person", null);
while (cursor.moveToNext()) {
int personid = cursor.getInt(0); //獲取第一列的值,第一列的索引從0開始
String name = cursor.getString(1);//獲取第二列的值
int age = cursor.getInt(2);//獲取第三列的值
}
cursor.close();
db.close();

rawQuery()方法的第一個參數為select語句;第二個參數為select語句中佔位符參數的值,如果select語句沒有使用佔位符,該參數可以設置為null。帶佔位符參數的select語句使用例子如下:
復制代碼 代碼如下:

Cursor cursor = db.rawQuery("select * from person where name like ? and age=?", new String[]{"%林計欽%", "4"});

Cursor是結果集游標,用於對結果集進行隨機訪問,如果大家熟悉jdbc, 其實Cursor與JDBC中的ResultSet作用很相似。使用moveToNext()方法可以將游標從當前行移動到下一行,如果已經移過了結果集的最後一行,返回結果為false,否則為true。另外Cursor 還有常用的moveToPrevious()方法(用於將游標從當前行移動到上一行,如果已經移過了結果集的第一行,返回值為false,否則為true )、moveToFirst()方法(用於將游標移動到結果集的第一行,如果結果集為空,返回值為false,否則為true )和moveToLast()方法(用於將游標移動到結果集的最後一行,如果結果集為空,返回值為false,否則為true ) 。

除了前面給大家介紹的execSQL()和rawQuery()方法, SQLiteDatabase還專門提供了對應於添加、刪除、更新、查詢的操作方法: insert()、delete()、update()和query() 。這些方法實際上是給那些不太了解SQL語法的菜鳥使用的,對於熟悉SQL語法的程序員而言,直接使用execSQL()和rawQuery()方法執行SQL語句就能完成數據的添加、刪除、更新、查詢操作。

閱讀全文

與android資料庫操作類相關的資料

熱點內容
pdf閱讀器刪除 瀏覽:979
考研人如何緩解壓力 瀏覽:822
買電暖壺哪個app便宜 瀏覽:505
洛克王國忘記伺服器了怎麼辦 瀏覽:782
為什麼cf登錄伺服器沒反應 瀏覽:695
伺服器如何獲取文件列表 瀏覽:672
creo五軸編程光碟 瀏覽:14
蘋果app網路驗證在哪裡 瀏覽:14
博科清空命令 瀏覽:384
簡愛英文pdf 瀏覽:376
cnc編程有前途嗎 瀏覽:586
聯想app怎麼聯網 瀏覽:722
linuxftp命令登錄 瀏覽:1000
android獲取圖片縮略圖 瀏覽:646
神戶制鋼螺桿壓縮機 瀏覽:29
差分演化演算法 瀏覽:567
中山市加密軟體 瀏覽:446
mc反編譯源碼 瀏覽:141
企業商城網站源碼 瀏覽:411
shell腳本編程是什麼 瀏覽:762