Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android-使用嵌入式SQLite

Android-使用嵌入式SQLite

編輯:關於Android編程

Android平台上集成的一個嵌入式關系型數據庫,SQLite3支持 NULL,INTEGER,REAL(浮點數

字),TEXT(字符串文本)和BLOB(二進制對象)數據類型,雖然它支持的類型只有五種,但實際上

sqlite3也接受varchar(n),char(n),decimal(p,s) 等數據類型,只不過在運算或保存時會轉

成對應的五種數據類型.

SQLite最大的特點是你可以把各種類型的數據保存到任何字段中,而不用關心字段聲明的數據類型是

什麼. 但定義為INTEGER PRIMARY KEY的字段只能存儲64位整數, 當向這種字段保存除整數以外

的數據時,將會產生錯誤.

另外, SQLite在解析CREATE TABLE語句時,會忽略字段名後面的數據類型信息.

SQLite可以解析大部分標准SQL語句,如:

查詢語句:select * from .. where group by ..having ... order by 排序子句

SQLite分頁同mysql相同:

... limit 5 offset 3 | limit 3,5

首次使用數據庫需要創建表及初始化一些信息,升級時需要修改表信息,android提供了SQLiteOpenHelper完成此類功能

onCreate(SQLiteDatabase db)方法用於首次使用時創建庫,onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)方法檢測版本變化時更新庫

getWriteableDatabase()和getReadableDatabase()方法獲取一個用於操作數據庫的SQLiteDatabase實例。

getWriteableDatabase()方法一讀寫方式打開數據庫,一旦數據庫的磁盤空間滿了,數據庫只能讀而不能寫。倘若使用getWriteableDatabase()打開數據庫就會出錯。getReadableDatabase()方法以讀方式打開數據庫。

public class DatabaseHelper extends SQLiteOpenHelper {

private static final String name = "itcast";//數據庫名稱

private static final int version = 1;      //數據庫版本

public DatabaseHelper(Context context){

Super(context,name,null,version);

}

public void onCreate(){

//drop table if exists customers

//create table if not exists customers(...

db.execSQL("CREATE TABLE IF NOT EXISTS person (personid integer  primary                           key autoincrement, name varchar(20), age INTEGER)");

}

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

db.execSQL("  ALTER TABLE person ADD phone VARCHAR(12)  NULL");

}

}

在實際項目開發中,當數據庫表結構發生更新時,應該避免用戶存放於數據庫中的數據丟失。

使用SQLiteDataBase數據庫

SQLiteDatabase db = ....;

db.execSQL("insert into person(name,age) values(?,?)",new Object[]{..});

db.close();

//查詢操作

Cursor cursor = db.rawQuery("select * from person", null);

while(cursor.moveToNext){

int personid = cursor.getInt(0);

String name = cursor.getString(1);

int age = cursor.getInt(2);

cursor.close();

Db.close();

}

cursor.close();

db.close();

SQLiteDatabase db = databaseHelper.getWritableDatabase();

ContentValues values = new ContentValues();

Values.put("name","傳智播客");

.....

Long rowid = db.insert("person",null,values);

//刪除

SQLiteDatabase db = databaseHelper.getWritableDatabase();

db.delete("person","personid<?",new String[]{"2"}">");

db.close();

//更新

SQLiteDatabase db = databaseHelper.getWritableDatabase();

ContentValues values = new ContentValues();

//key為字段名,value為值

values.put("name","傳智播客");

db.update("person",values,"personid=?",new String[]{"1"});

db.close();

注:第一次調用getWritableDatabase()或getReadableDatabase()方法後,SQLiteOpenHelper

會緩存當前的SQLiteDatabase實例,SQLiteDatabase實例正常情況下會維持數據庫的打開狀態,所以在你不需要SQLiteDatabase實例時,請及時調用close()方法釋放資源,一旦SQLiteDatabase實例被緩存,多次調用getWritableDatabase()或getReadableDatabase()方法得到的都是同一實例。

事務處理:

SQLiteDatabase db = ...;

db.beginTransaction();

Try{

db.execSQL(...)

db.execSQL(...);

//設置成功標記

db.setTransactionSuccessful();

}catch(){

....

} finally {

db.endTransaction();//由事務的標志決定是提交事務,還是回滾事務。

}

db.close(); www.2cto.com

注意:創建表時,只能用integer類型,不能用int作為主鍵,否則不支持autoincrement.

create table customers(id integer primary key autoincrement,name text);


作者:toto1297488504
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved