SQLite簡介:
SQLite是用C語言編寫的開源嵌入式數據庫引擎。它支持大多數的SQL92標準,並且可以在所有主要的操作系統上運行。
--支持高達2TB大小的數據庫
--以單個文件的形式存在
--以B-Tree的數據結構形式存儲在磁盤
特點主要包括:
1.輕量級 一個動態庫 單文件
2.獨立性 沒有依賴,無需安裝
3.隔離性 全部在一個文件夾中
4.跨平臺 支持衆多操作系統
5.多語言接口 支持衆多編程語言
6.安全性 事務
關於事務處理的安全性問題:
--通過數據庫上的獨佔性和共享鎖來實現獨立事務處理。
--多個進程可以再同一時間從同一數據庫讀取數據,但只有一個可以寫入數據。
關於SQLite的數據類型:
--SQLite支持 NULL,INTEGER,REAL,TEXT和BLOB數據類型
--依次代表:空值,整型值,浮點值,字符串值,二進制對象
動態數據類型(弱引用)
--當某個值插入到數據庫時,SQLite將會檢查它的類型,如果該類型與關聯的列不匹配,SQLite則會嘗試將該值轉換成該列的類型,如果不能轉換,則該值將作爲本身的類型存儲。
在Android中如何使用SQLite:
--SQLiteDataBase
--SQLiteOpenHelper
public class MainActivity extends Activity {
private static final String TABLENAME ="stutb";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SQLiteDatabase db = openOrCreateDatabase("stu.db", MODE_PRIVATE, null);
db.execSQL("create table if not exists stutb (_id integer primary key autoincrement, name text not null,sex text not null, age integer not null)");
ContentValues values = new ContentValues();
values.put("name", "張三");
values.put("sex", "男");
values.put("age", 18);
long rowId = db.insert("stutb", null, values);
values.clear();
values.put("name", "張三feng");
values.put("sex", "男");
values.put("age", 108);
db.insert("stutb", null, values);
values.clear();
values.put("name", "張三豐");
values.put("sex", "男");
values.put("age", 108);
db.insert("stutb", null, values);
values.clear();
values.put("name", "張三feng");
values.put("sex", "男");
values.put("age", 108);
db.insert("stutb", null, values);
values.clear();
values.put("sex", "女");
db.update("stutb", values, "_id>?", new String[]{"3"});//將全部id>3的人的性別改成女
db.delete("stutb", "name like?", new String[]{"%豐%"});//刪除所有名字中帶豐的人
Cursor c = db.query("stutb", null, "_id>?", new String[]{"0"}, null, null, "name");
if (c != null) {
String[] columns = c.getColumnNames();
while (c.moveToNext()) {
for (String columnName:columns) {
Log.i("info", c.getString(c.getColumnIndex(columnName)));
}
}
c.close();
}
}
SQLiteOpenHelper:
>SQLiteDatabase的幫助類,用於管理數據庫的創建和版本更新
>一般是建立一個類繼承它,並重寫onCreate()和onUpgrade()方法
>方法說明:
* onCreate(SQLiteDataBase db) 創建數據庫時調用
*onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) 版本更新時調用
*getReadableDatabase() 創建或打開一個只讀數據庫
*getWritableDatabase() 創建或打開一個讀寫數據庫
代碼示例:
public class DBOpenHelper extends SQLiteOpenHelper{
public DBOpenHelper(Context context, String name) {
super(context, name, null, 1);
// TODO Auto-generated constructor stub
}
public DBOpenHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
//首次創建數據庫的時候調用 可以建庫,建表的操作
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("create table if not exists stutb(_id integer primary key autoincrement,name text not null,sex text not null,age integer not null)");
db.execSQL("insert into stutb(name, sex, age)values('張三','女',18)");
}
//當數據庫的版本發生變化的時候,會自動執行
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
========================
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DBOpenHelper helper = new DBOpenHelper(MainActivity.this, "stu.db");
SQLiteDatabase db = helper.getWritableDatabase();
Cursor c = db.rawQuery("select*from stutb", null);
if (c!= null) {
String[] cols = c.getColumnNames();
while (c.moveToNext()) {
for (String ColumnName:cols) {
Log.i("info", ColumnName+":"+c.getString(c.getColumnIndex(ColumnName)));
}
}
c.close();
}
db.close();
}
}