android中SQLite使用及特點
1.SQLite的特點
- SQLite是一個輕量級數(shù)據庫,它設計目標是嵌入式的,而且占用資源非常低
- SQLite沒有服務器進程,通過文件保存數(shù)據,該文件是跨平臺的
- 支持null,integer,real,text,blob五種數(shù)據類型,實際上SQLite也接受varchar,char,decimal等數(shù)據類型,只不過在運算中或保存時會轉換成對應的5種數(shù)據類型,因此,可以將各種類型數(shù)據保存到任何字段中
2.SQLite的使用
2.1數(shù)據庫的創(chuàng)建
在android中,創(chuàng)建SQLite數(shù)據庫非常簡單。Android系統(tǒng)推薦使用SQLiteOpenHelper
的子類創(chuàng)建數(shù)據庫,因此需要創(chuàng)建一個類繼承自SQLiteOpenHelper
,并重寫該類的onCreate
和onUpgrade
方法即可
import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DBHelper extends SQLiteOpenHelper { /** * 作為SQLiteOpenHelper子類必須有的構造方法 * @param context 上下文參數(shù) * @param name 數(shù)據庫名字 * @param factory 游標工廠 ,通常是null * @param version 數(shù)據庫的版本 */ public DBHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } /** * 數(shù)據庫第一次被創(chuàng)建時調用該方法 * @param db */ @Override public void onCreate(SQLiteDatabase db) { // 初始化數(shù)據庫的表結構,執(zhí)行一條建表的SQL語句 db.execSQL("create table user(u_id int not null primary key,u_name varchar(50) not null,age int)"); } /** * 當數(shù)據庫的版本號增加調用 * @param db * @param oldVersion * @param newVersion */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
2.2新增(insert)
public void insert(String name,int age){ // 通過DBHelper類獲取一個讀寫的SQLiteDatabase對象 SQLiteDatabase db=dbHelper.getWritableDatabase(); // 創(chuàng)建ContentValue設置參數(shù) ContentValues contentValues=new ContentValues(); contentValues.put("name",name); contentValues.put("age",age); // 插入數(shù)據 // insert方法參數(shù)1:要插入的表名 // insert方法參數(shù)2:如果發(fā)現(xiàn)將要插入的行為空時,會將這個列名的值設為null // insert方法參數(shù)3:contentValue long i=db.insert("user",null ,contentValues); // 釋放連接 db.close(); }
2.3修改(update)
public void update(String name,int age){ // 通過DBHelper類獲取一個讀寫的SQLiteDatabase對象 SQLiteDatabase db=dbHelper.getWritableDatabase(); // 創(chuàng)建ContentValue設置參數(shù) ContentValues contentValues=new ContentValues(); contentValues.put("age",age); // 修改數(shù)據 // 參數(shù)1:tablename // 參數(shù)2:修改的值 // 參數(shù)3:修改的條件(SQL where語句) // 參數(shù)4:表示whereClause語句中的表達式的占位符參數(shù)列表,這些字符串會替換where條件中? db.update("user",contentValues,"name=?",new String[]{name}); // 釋放連接 db.close(); }
2.4刪除(delete)
public void delete(long id) { // 通過DBHelper類獲取一個讀寫的SQLiteDatabase對象 SQLiteDatabase db = dbHelper.getWritableDatabase(); // 參數(shù)1:tablename // 參數(shù)2:刪除的條件(SQL語句) // 參數(shù)3:給修改的條件注入參數(shù),一個或多個 db.delete("user", "u_id=?", new String[]{id + ""}); // 釋放連接 db.close(); }
2.5查詢(query)
public void query() { // 通過DBHelper類獲取一個讀寫的SQLiteDatabase對象 SQLiteDatabase db = dbHelper.getWritableDatabase(); // 參數(shù)1:table_name // 參數(shù)2:columns 要查詢出來的列名。相當于 select *** from table語句中的 ***部分 // 參數(shù)3:selection 查詢條件字句,在條件子句允許使用占位符“?”表示條件值 // 參數(shù)4:selectionArgs :對應于 selection參數(shù) 占位符的值 // 參數(shù)5:groupby 相當于 select *** from table where && group by ... 語句中 ... 的部分 // 參數(shù)6:having 相當于 select *** from table where && group by ...having %%% 語句中 %%% 的部分 // 參數(shù)7:orderBy :相當于 select ***from ?? where&& group by ...having %%% order by@@語句中的@@ 部分,如: personid desc(按person 降序) Cursor cursor = db.query("user", null, null, null, null, null, null); // 將游標移到開頭 cursor.moveToFirst(); while (!cursor.isAfterLast()) { // 游標只要不是在最后一行之后,就一直循環(huán) int id=cursor.getInt(0); String name=cursor.getString(1); // 將游標移到下一行 cursor.moveToNext(); } db.close(); }
3.使用SQL語句進行數(shù)據庫操作
// 通過DBHelper類獲取一個讀寫的SQLiteDatabase對象 SQLiteDatabase db = dbHelper.getWritableDatabase(); // insert db.execSQL("insert into user (id,name,age) values (?,?,?)",new Object[]{1,"張三",18}); // update db.execSQL("update user set name=? where id=?",new Object[]{"張三",1}); // delete db.execSQL("delete from user where id=1"); // query Cursor cursor = db.rawQuery("select * from user where id=?", new String[]{"1"});
4.SQLite事務
SQLite數(shù)據庫同樣支持事務
事務操作后一定要使用
endTransaction
()方法關閉事務,當執(zhí)行到endTransaction
()時,首先會檢查是否有事務執(zhí)行成功標記,有則提交數(shù)據庫,無則回滾數(shù)據
DBHelper dbHelper = new DBHelper(MainActivity.this, "test.db", null, 0); // 通過DBHelper類獲取一個讀寫的SQLiteDatabase對象 SQLiteDatabase db = dbHelper.getWritableDatabase(); // 開始事務 db.beginTransaction(); try { // 標記數(shù)據庫事務執(zhí)行成功 db.setTransactionSuccessful(); }catch (Exception e){ Log.i("事務處理失敗",e.getMessage()); }finally { db.endTransaction(); //關閉事務 db.close(); // 關閉數(shù)據庫 }
到此這篇關于android中SQLite使用及特點的文章就介紹到這了,更多相關android使用SQLite內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
android ListView和GridView拖拽移位實現(xiàn)代碼
有些朋友對android中ListView和GridView拖拽移位功能的實現(xiàn)不是很了解,接下來將詳細介紹,需要了解的朋友可以參考下2012-12-12Android自定義textview實現(xiàn)豎直滾動跑馬燈效果
這篇文章主要為大家詳細介紹了Android自定義textview實現(xiàn)豎直滾動跑馬燈效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06