欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Android SQLite詳解

在項目開(kāi)發(fā)中,我們或多或少都會(huì )用到數據庫。在A(yíng)ndroid中,我們一般使用SQLite,因為Android在android.database.sqlite包封裝了很多SQLite操作的API。我自己寫(xiě)了一個(gè)Demo來(lái)總結SQLite的使用,托管在Github上,大家可以點(diǎn)擊下載APK,也可以點(diǎn)擊下載源碼。Demo截圖如下:

 
 

在使用SQLite時(shí),我建議先下載一個(gè)本地SQLite客戶(hù)端來(lái)驗證操作,在本地寫(xiě)的SQL語(yǔ)句運行正確后,再轉移到Android中。我用的是SQLite Expert Personal。
首先創(chuàng )建一個(gè)繼承在SQLiteOpenHelper的類(lèi),并重寫(xiě)onCreate()onUpgrade()方法。

public class OrderDBHelper extends SQLiteOpenHelper{    private static final int DB_VERSION = 1;    private static final String DB_NAME = "myTest.db";    public static final String TABLE_NAME = "Orders";    public OrderDBHelper(Context context) {        super(context, DB_NAME, null, DB_VERSION);    }    @Override    public void onCreate(SQLiteDatabase sqLiteDatabase) {        // create table Orders(Id integer primary key, CustomName text, OrderPrice integer, Country text);        String sql = "create table if not exists " + TABLE_NAME + " (Id integer primary key, CustomName text, OrderPrice integer, Country text)";        sqLiteDatabase.execSQL(sql);    }    @Override    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {        String sql = "DROP TABLE IF EXISTS " + TABLE_NAME;        sqLiteDatabase.execSQL(sql);        onCreate(sqLiteDatabase);    }}

這個(gè)類(lèi)主要用于建數據庫和建表用,我們再創(chuàng )建一個(gè)OrderDao用于處理所有的數據操作方法。在OrderDao鐘實(shí)例化OrderDBHelper:

public OrderDao(Context context) {    this.context = context;    ordersDBHelper = new OrderDBHelper(context);}

數據庫操作無(wú)外乎:“增刪查改”。對于“增刪改”這類(lèi)對表內容變換的操作,我們需先調用getWritableDatabase(),在執行的時(shí)候可以調用通用的execSQL(String sql)方法或對應的操作API:insert()、delete()、update()。而對“查”,需要調用getReadableDatabase(),這時(shí)就不能使用execSQL方法了,得使用query()rawQuery()方法。下面開(kāi)始一一介紹。

增加數據

在我的Demo中,有兩種增加數據操作:
初始化數據
在進(jìn)入Demo程序時(shí),先判斷表中是否有數據,如果表中沒(méi)有數據,我將先添加一些數據。在初始化數據時(shí),因為一次性要添加的數據比較多,所以我直接采用的是execSQL方法:

db = ordersDBHelper.getWritableDatabase();db.beginTransaction();db.execSQL("insert into " + OrderDBHelper.TABLE_NAME + " (Id, CustomName, OrderPrice, Country) values (1, 'Arc', 100, 'China')");db.execSQL("insert into " + OrderDBHelper.TABLE_NAME + " (Id, CustomName, OrderPrice, Country) values (2, 'Bor', 200, 'USA')");db.execSQL("insert into " + OrderDBHelper.TABLE_NAME + " (Id, CustomName, OrderPrice, Country) values (3, 'Cut', 500, 'Japan')");db.execSQL("insert into " + OrderDBHelper.TABLE_NAME + " (Id, CustomName, OrderPrice, Country) values (4, 'Bor', 300, 'USA')");db.execSQL("insert into " + OrderDBHelper.TABLE_NAME + " (Id, CustomName, OrderPrice, Country) values (5, 'Arc', 600, 'China')");db.execSQL("insert into " + OrderDBHelper.TABLE_NAME + " (Id, CustomName, OrderPrice, Country) values (6, 'Doom', 200, 'China')");db.setTransactionSuccessful();

插入一條新數據
我們還可以使用insert(String table,String nullColumnHack,ContentValues values)方法來(lái)插入,ContentValues內部實(shí)現就是HashMap,但是兩者還是有差別的,ContenValuesKey只能是String類(lèi)型,Value只能存儲基本類(lèi)型的數據,像string,int之類(lèi)的,不能存儲對象這種東西:

public ContentValues() {    // Choosing a default size of 8 based on analysis of typical    // consumption by applications.     mValues = new HashMap<String, Object>(8);}

使用insert()方法我們插入一條新數據(7, "Jne", 700, "China"),對于修改數據的操作我們一般當作事務(wù)(Transaction)處理:

db = ordersDBHelper.getWritableDatabase();db.beginTransaction();// insert into Orders(Id, CustomName, OrderPrice, Country) values (7, "Jne", 700, "China");ContentValues contentValues = new ContentValues();contentValues.put("Id", 7);contentValues.put("CustomName", "Jne");contentValues.put("OrderPrice", 700);contentValues.put("Country", "China");db.insertOrThrow(OrderDBHelper.TABLE_NAME, null, contentValues);db.setTransactionSuccessful();

刪除數據

刪除數據的方法除了execSQL還有delete(String table,String whereClause,String[] whereArgs),whereClause是刪除條件,whereArgs是刪除條件值數組。

db = ordersDBHelper.getWritableDatabase();db.beginTransaction();// delete from Orders where Id = 7db.delete(OrderDBHelper.TABLE_NAME, "Id = ?", new String[]{String.valueOf(7)});db.setTransactionSuccessful();

再看刪除的源碼,里面會(huì )拼裝刪除條件和刪除條件值數組:

public int delete(String table, String whereClause, String[] whereArgs) {    acquireReference();    try {        SQLiteStatement statement =  new SQLiteStatement(this, "DELETE FROM " + table +                (!TextUtils.isEmpty(whereClause) ? " WHERE " + whereClause : ""), whereArgs);        try {            return statement.executeUpdateDelete();        } finally {            statement.close();        }    } finally {        releaseReference();    }}

修改數據

修改數據和插入數據很相似,調用的方法除了execSQL還可以是update(String table,ContentValues values,String whereClause, String[] whereArgs)

db = ordersDBHelper.getWritableDatabase();db.beginTransaction();// update Orders set OrderPrice = 800 where Id = 6ContentValues cv = new ContentValues();cv.put("OrderPrice", 800);db.update(OrderDBHelper.TABLE_NAME,        cv,        "Id = ?",        new String[]{String.valueOf(6)});db.setTransactionSuccessful();

查找數據

查找數據有兩個(gè)方法,一是public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit);,另外一個(gè)是public Cursor rawQuery(String sql, String[] selectionArgs)。rawQuery的寫(xiě)法類(lèi)似上面的execSQL,在此不做介紹,query方法中的參數如下:

  • table:表名稱(chēng)
  • columns:列名稱(chēng)數組
  • selection:條件字句,相當于where
  • selectionArgs:條件字句,參數數組
  • groupBy:分組列
  • having:分組條件
  • orderBy:排序列
  • limit:分頁(yè)查詢(xún)限制
  • Cursor:返回值,相當于結果集ResultSet

我們可以看到返回的類(lèi)型都是Cursor,Cursor是一個(gè)游標接口,提供了遍歷查詢(xún)結果的方法,如移動(dòng)指針?lè )椒╩ove(),獲得列值方法。Cursor游標常用方法如下:

 
 

我們先來(lái)查一查用戶(hù)名為"Bor"的信息:

db = ordersDBHelper.getReadableDatabase();// select * from Orders where CustomName = 'Bor'cursor = db.query(OrderDBHelper.TABLE_NAME,        ORDER_COLUMNS,        "CustomName = ?",        new String[] {"Bor"},        null, null, null);if (cursor.getCount() > 0) {    List<Order> orderList = new ArrayList<Order>(cursor.getCount());    while (cursor.moveToNext()) {        Order order = parseOrder(cursor);        orderList.add(order);    }    return orderList;}

當然我們也可以查詢(xún)總數、最大值最小值之類(lèi)的,以查詢(xún)Country為China的用戶(hù)總數為例:

db = ordersDBHelper.getReadableDatabase();// select count(Id) from Orders where Country = 'China'cursor = db.query(OrderDBHelper.TABLE_NAME,        new String[]{"COUNT(Id)"},        "Country = ?",        new String[] {"China"},        null, null, null);if (cursor.moveToFirst()) {    count = cursor.getInt(0);}

至此SQLite就介紹完了,大家可以下載Demo詳細查看。Demo中還有一些其他比較干貨的東西,大家可以挖掘挖掘。當然Demo中也有些不足,我還會(huì )更新,盡量做到讓用戶(hù)通過(guò)Demo就能學(xué)會(huì )如何使用SQLite。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Android Sqlite 使用
Androide SQLiteDatabase數據庫操作(轉)
android?sqlite?編程
androidsqlite
SQLite數據庫以及增刪改查的案例
Android從零開(kāi)始(7)(SQLite數據庫)(新)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久