一、SQLite簡介 Google為Andriod的較大的數據處理提供了SQLite,他在數據存儲、管理、維護等各方面都相當出色,功能也非常的強大。 二、SQLite的特點 1.輕量級使用 SQLite 只需要帶一個動態庫,就可以享受它的全部功能,而且那個動態庫的尺寸想當小。2.獨立性SQLite ...
一、SQLite簡介
Google為Andriod的較大的數據處理提供了SQLite,
他在數據存儲、管理、維護等各方面都相當出色,
功能也非常的強大。
二、SQLite的特點
1.輕量級
使用 SQLite 只需要帶一個動態庫,就可以享受它的全部功能,
而且那個動態庫的尺寸想當小。
2.獨立性
SQLite 資料庫的核心引擎不需要依賴第三方軟體,也不需要所謂的“安裝”。
3.隔離性
SQLite 資料庫中所有的信息(比如表、視圖、觸發器等)
都包含在一個文件夾內,方便管理和維護。
4.跨平臺
SQLite 目前支持大部分操作系統,不至電腦操作系統更在眾多的手機系統
也是能夠運行,比如:Android。
5.多語言介面
SQLite 資料庫支持多語言編程介面。
6.安全性
SQLite 資料庫通過資料庫級上的獨占性和共用鎖來實現獨立事務處理。
這意味著多個進程可以在同一時間從同一資料庫讀取數據,
但只能有一個可以寫入數據。
三、SQLite的數據類型
·關於SQLite的數據類型:
-SQLite支持NULL、INTEGER、REAL、TEXT和BLOB數據類型
-依次代表:空值、整型值、浮點值、字元串值、二進位對象
·動態數據類型(弱引用)
-當某個值插入到資料庫時,SQLite將會檢查它的類型,如果該類型與關聯的列不匹配,
SQLite則會嘗試將該值轉換成該列的類型,如果不能轉換,則該值將作為本身的類型存儲
四、SQLiteDatabase類
·SQLiteDatabase類
-提供創建、刪除、執行的SQL命令,並執行其他常見的資料庫管理任務的方法
-每個程式的資料庫名字是唯一的
·SQLiteDatabase類為我們提供了很多種方法,而較常用的方法如下
(int) delete(String table,String whereClause,String[] whereArgs)
刪除數據行的便捷方法
(long) insert(String table,String nullColumnHack,ContentValues values)
添加數據行的便捷方法
(int) update(String table, ContentValues values, String whereClause, String[] whereArgs)
更新數據行的便捷方法
(void) execSQL(String sql)
執行一個SQL語句,可以是一個select或其他的sql語句
(void) close()
關閉資料庫
(Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
查詢指定的數據表返回一個帶游標的數據集
(Cursor) rawQuery(String sql, String[] selectionArgs)
運行一個預置的SQL語句,返回帶游標的數據集(與上面的語句最大的區別就是防止SQL註入)
·數據的添加
//使用insert方法 ContentValues cv = new ContentValues(); //實例化一個ContentValues用來裝載待插入的數據 cv.put("username","Jack Johnson");//添加用戶名 cv.put("password","iLovePopMusic"); //添加密碼 db.insert("user",null,cv);//執行插入操作 使用execSQL方式來實現 String sql = "insert into user(username,password) values ('Jack Johnson','iLovePopMuisc');//插入操作的SQL語句 db.execSQL(sql);//執行SQL語句
·數據的刪除
//使用delete方法 String whereClause = "username=?";//刪除的條件 String[] whereArgs = {"Jack Johnson"};//刪除的條件參數 db.delete("user",whereClause,whereArgs);//執行刪除 String sql = "delete from user where username='Jack Johnson'";//刪除操作的SQL語句 db.execSQL(sql);//執行刪除操作
·數據的修改
//使用update方法 ContentValues cv = new ContentValues();//實例化ContentValues cv.put("password","iHatePopMusic");//添加要更改的欄位及內容 String whereClause = "username=?";//修改條件 String[] whereArgs = {"Jack Johnson"};//修改條件的參數 db.update("user",cv,whereClause,whereArgs);//執行修改 String sql = "update [user] set password = 'iHatePopMusic' where username='Jack Johnson'";//修改的SQL語句 db.execSQL(sql);//執行修改
·數據的查詢
通過query實現查詢的
public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
table:表名稱
colums:列名稱數組
selection:條件子句,相當於where
selectionArgs:條件語句的參數數組
groupBy:分組
having:分組條件
orderBy:排序類
limit:分頁查詢的限制
Cursor:返回值,相當於結果集ResultSet
游標(Cursor)
getCount()總記錄條數
isFirst()判斷是否第一條記錄
isLast()判斷是否最後一條記錄
moveToFirst()移動到第一條記錄
moveToLast()移動到最後一條記錄
move(int offset)移動[是指偏移量而不是指移到指定位置]
moveToNext()移動到嚇一條記錄
moveToPrevious()移動到上一條記錄
getColumnIndex(String columnName)獲得指定列索引的int類型值
//游標(Cursor) Cursor c = db.query("user",null,null,null,null,null,null);//查詢並獲得游標 if(c.moveToFirst()){//判斷游標是否為空 for(int i=0;i<c.getCount();i++){ c.moveToNext(); String username = c.getString(c.getColumnIndex("username"); String password = c.getString(c.getColumnIndex("password")); }
//rawQuery實現的帶參數查詢 Cursor c = db.rawQuery("select * from user where username=?",new Stirng[]{"Jack Johnson"}); if(cursor.moveToFirst()) { String password = c.getString(c.getColumnIndex("password")); }
四、SQLiteOpenHelper
·SQLiteOpenHelper
-SQLiteOpenHelper是SQLiteDatabase的一個幫助類,
用來管理資料庫的創建和版本的更新。
一般是建立一個類繼承它,
並實現它的onCreate和onUpgrade方法。
-onCreate(SQLiteDatabase db)
創建資料庫時調用
-onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion)
版本更新時調用
-getReadableDatabase()
創建或打開一個只讀資料庫
-getWritableDatabase()
創建或打開一個讀寫資料庫
·創建SQLiteOpenHelper類
public class MyDatabaseOpenHelper extends SQLiteOpenHelper { private static final String db_name = "mydata.db"; // 資料庫名稱 private static final int version = 1; // 資料庫版本 public MyDatabaseOpenHelper(Context context) { super(context, db_name, null, version); } //該方法沒有資料庫存在才會執行 public void onCreate(SQLiteDatabase db) { //沒有資料庫列印日記 Log.i("Log","沒有資料庫,創建資料庫"); //建表語句 String sql_message="create table t_message (id int primary key,userName varchar(50),lastMessage varchar(50),datetime varchar(50))"; //執行建表語句 db.execSQL(sql_message); } //資料庫存更新才會執行 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.i("updateLog","資料庫更新了!"); } }
·調用了SQLiteOpenHelper類的getWritableDatabase()方法來獲取一個資料庫
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); DatabaseOpenHelper helper = new DatabaseOpenHelper(MainActivity.this); //獲取一個可寫的資料庫 SQLiteDatabase db = helper.getWritableDatabase(); } }