編輯:關於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);
/***@author StormMaybin*@Date 2016-09-1*/ 生命不息,奮斗不止!WebView 對於,WebView 顧名思義,就是顯示各種各樣的
以前做的手機項目,並沒有要求混淆,一直沒時間去看,等到做了平板,有混淆的需求才要硬著頭皮去看混淆到底是如何工作的,以及如何混淆驗證成功,參考一篇博客,講的非常詳細,而且每
在Android中和我們打交道最多的就是Activity,因為我們會頻繁的與界面進行交互,而Activity內部關於界面方面的操作都是由Window來實現的,因此我們有必
Android實現屏蔽微信拉黑和刪除聯系人功能,廢話不多說,具體如下:實現效果:讓微信永遠彈不出那個刪除的對話框不就相當於屏蔽掉該功能了嗎?哈哈效果如圖:實現原理:1.我