国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Android存儲(chǔ)方式之SQLite

rainyang / 412人閱讀

摘要:前言數(shù)據(jù)庫操作在開發(fā)中非常常用今天我將帶大家全面了解關(guān)于數(shù)據(jù)庫的操作增刪查改目錄數(shù)據(jù)庫介紹是內(nèi)置的一個(gè)小型關(guān)系型屬于文本型的數(shù)據(jù)庫。提供了對(duì)數(shù)據(jù)庫的完全支持,應(yīng)用程序中的任何類都可以通過名稱來訪問任何的數(shù)據(jù)庫,但是應(yīng)用程序之外的就不能訪問。

前言

SQLite數(shù)據(jù)庫操作在Android開發(fā)中非常常用

今天我將帶大家全面了解關(guān)于SQLite數(shù)據(jù)庫的操作(增、刪、查、改)

目錄

1. SQLite數(shù)據(jù)庫介紹

SQLite是Android內(nèi)置的一個(gè)小型、關(guān)系型、屬于文本型的數(shù)據(jù)庫。

> Android提供了對(duì) SQLite數(shù)據(jù)庫的完全支持,應(yīng)用程序中的任何類都可以通過名稱來訪問任何的數(shù)據(jù)庫,但是應(yīng)用程序之外的就不能訪問。

Android中,通過SQLiteOpenHelper類來實(shí)現(xiàn)對(duì)SQLite數(shù)據(jù)庫的操作。

2. SQLiteOpenHelper類介紹

定義:SQLiteOpenHelper是一個(gè)輔助類

作用:管理數(shù)據(jù)庫(創(chuàng)建、增、修、刪) & 版本的控制。

使用過程:通過創(chuàng)建子類繼承SQLiteOpenHelper類,實(shí)現(xiàn)它的一些方法來對(duì)數(shù)據(jù)庫進(jìn)行操作。

> 在實(shí)際開發(fā)中,為了能夠更好的管理和維護(hù)數(shù)據(jù)庫,我們會(huì)封裝一個(gè)繼承自SQLiteOpenHelper類的數(shù)據(jù)庫操作類,然后以這個(gè)類為基礎(chǔ),再封裝我們的業(yè)務(wù)邏輯方法。

SQLiteOpenHelper類的數(shù)據(jù)庫操作方法介紹

方法名 作用 備注
onCreate() 創(chuàng)建數(shù)據(jù)庫 創(chuàng)建數(shù)據(jù)庫時(shí)自動(dòng)調(diào)用
onUpgrade() 升級(jí)數(shù)據(jù)庫
close() 關(guān)閉所有打開的數(shù)據(jù)庫對(duì)象
execSQL() 可進(jìn)行增刪改操作, 不能進(jìn)行查詢操作
query()、rawQuery() 查詢數(shù)據(jù)庫
insert() 插入數(shù)據(jù)
delete() 刪除數(shù)據(jù)
getWritableDatabase() 創(chuàng)建或打開可以讀/寫的數(shù)據(jù)庫 通過返回的SQLiteDatabase對(duì)象對(duì)數(shù)據(jù)庫進(jìn)行操作
getReadableDatabase() 創(chuàng)建或打開可讀的數(shù)據(jù)庫 同上

*

3. 常見數(shù)據(jù)庫使用

數(shù)據(jù)庫操作無外乎:“增刪查改”:

對(duì)于“增、刪、改(更新)”這類對(duì)表內(nèi)容變換的操作,需先調(diào)用getWritableDatabase()獲得一個(gè)可寫數(shù)據(jù)庫對(duì)象,在執(zhí)行的時(shí)候調(diào)用通用的execSQL(String sql)或或?qū)?yīng)的操作API方法:insert()、delete()、update()

對(duì)“查”,需要調(diào)用getReadableDatabase()獲得一個(gè)可讀的數(shù)據(jù)庫對(duì)象,然后使用query()或rawQuery()方法

> 查詢數(shù)據(jù)庫**不能使用execSQL方法**

下面我將一一介紹。

3.1 創(chuàng)建數(shù)據(jù)庫

涉及的方法有onCreate()、getWritableDatabase()、getReadableDatabase()

具體代碼如下:

> 假設(shè)DatabaseHelper類是SQLiteOpenHelper的子類

DatabaseHelper.java

//第一次創(chuàng)建數(shù)據(jù)庫的時(shí)候回調(diào)該方法
//當(dāng)使用getReadableDatabase()方法獲取數(shù)據(jù)庫實(shí)例的時(shí)候, 如果數(shù)據(jù)庫不存在, 就會(huì)調(diào)用這個(gè)方法;

//作用:創(chuàng)建數(shù)據(jù)庫表:將創(chuàng)建數(shù)據(jù)庫表的 execSQL()方法 和 初始化表數(shù)據(jù)的一些 insert()方法寫在里面;
    @Override  
    public void onCreate(SQLiteDatabase db) {  

        //SQLite數(shù)據(jù)創(chuàng)建支持的數(shù)據(jù)類型: 整型數(shù)據(jù),字符串類型,日期類型,二進(jìn)制的數(shù)據(jù)類型  
        //創(chuàng)建了一個(gè)名為person的表
        String sql = "create table person(id integer primary key autoincrement,name varchar(64),address varchar(64))";  
        //execSQL用于執(zhí)行SQL語句
        //完成數(shù)據(jù)庫的創(chuàng)建   
        db.execSQL(sql); 
        //數(shù)據(jù)庫實(shí)際上是沒有被創(chuàng)建或者打開的,直到getWritableDatabase() 或者 getReadableDatabase() 方法中的一個(gè)被調(diào)用時(shí)才會(huì)進(jìn)行創(chuàng)建或者打開 
        //見下代碼

MainActivity.java

// 創(chuàng)建DatabaseHelper對(duì)象
// 只執(zhí)行這句話是不會(huì)創(chuàng)建或打開連接的
            SQLiteOpenHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,
                    "test_carson");
            // 調(diào)用getReadableDatabase()或getWritableDatabase()才算真正創(chuàng)建或打開數(shù)據(jù)庫
            SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase();

//SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase() ;
3.2 插入數(shù)據(jù)

步驟:創(chuàng)建并打開數(shù)據(jù)庫(可讀/寫)、插入數(shù)據(jù)

涉及方法:getWritableDatabase()、insert()

> insert()也可以使用excelSQL()代替

具體代碼如下:

//1. 創(chuàng)建并打開數(shù)據(jù)庫

// 創(chuàng)建DatabaseHelper對(duì)象(記得傳入最新版本的數(shù)據(jù)庫)
// 只執(zhí)行這句話是不會(huì)創(chuàng)建或打開連接的
//注意,一定要傳入最新的數(shù)據(jù)庫版本號(hào)
            SQLiteOpenHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,
                    "test_carson",2);
           // 調(diào)用getWritableDatabase()方法創(chuàng)建或打開一個(gè)可以讀的數(shù)據(jù)庫
          //通過返回的SQLiteDatabase對(duì)象對(duì)數(shù)據(jù)庫進(jìn)行操作
            SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase();

//2. 創(chuàng)建并打開數(shù)據(jù)庫
            // 創(chuàng)建ContentValues對(duì)象
            ContentValues values = new ContentValues();

            // 向該對(duì)象中插入鍵值對(duì)
            values.put("id", 1);
            values.put("name", "yangyz");
          //其中,key代表列名,value代表該列要插入的值
          //注:ContentValues內(nèi)部實(shí)現(xiàn)就是HashMap,但是兩者還是有差別的
          //ContenValues Key只能是String類型,Value只能存儲(chǔ)基本類型數(shù)據(jù),不能存儲(chǔ)對(duì)象

            // 調(diào)用insert()方法將數(shù)據(jù)插入到數(shù)據(jù)庫當(dāng)中
            sqliteDatabase.insert("user", null, values);
            // 第一個(gè)參數(shù):要操作的表名稱
            // 第二個(gè)參數(shù):SQl不允許一個(gè)空列,如果ContentValues是空的,那么這一列被明確的指明為NULL值
            // 第三個(gè)參數(shù):ContentValues對(duì)象

////db.execSQL("insert into user (id,name) values (1,"張三")")  也可以

        }
3.3 修改數(shù)據(jù)(升級(jí)數(shù)據(jù)庫)

涉及的方法有onUpgrade()、getWritableDatabase()、update()

具體代碼如下:

DatabaseHelper.java

//數(shù)據(jù)庫版本號(hào)
 private static final int DATABASE_VERSION = 1; 

//作用:更新數(shù)據(jù)庫表結(jié)構(gòu)
//調(diào)用時(shí)機(jī):數(shù)據(jù)庫版本發(fā)生變化的時(shí)候回調(diào)(取決于數(shù)據(jù)庫版本)
// 創(chuàng)建SQLiteOpenHelper子類對(duì)象的時(shí)候,必須傳入一個(gè)version參數(shù)
//該參數(shù)就是當(dāng)前數(shù)據(jù)庫版本, 只要這個(gè)版本高于之前的版本, 就會(huì)觸發(fā)這個(gè)onUpgrade()方法,如下面代碼
@Override  
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
        //使用SQL的ALTER語句
        String sql = "alter table person add sex varchar(8)";  
        db.execSQL(sql);  
    }  
//參數(shù)說明: 
// db : 數(shù)據(jù)庫 
//oldVersion : 舊版本數(shù)據(jù)庫 
//newVersion : 新版本數(shù)據(jù)庫 
//注意:這里的刪除等操作必須要保證新的版本必須要比舊版本的版本號(hào)要大才行。[即 Version 2.0 > Version 1.0 ] 所以這邊我們不需要對(duì)其進(jìn)行操作。

MainActivity.java

            // 創(chuàng)建一個(gè)DatabaseHelper對(duì)象
            // 創(chuàng)建SQLiteOpenHelper子類對(duì)象的時(shí)候,必須傳入一個(gè)version參數(shù)
//該參數(shù)就是當(dāng)前數(shù)據(jù)庫版本, 只要這個(gè)版本高于之前的版本, 就會(huì)觸發(fā)這個(gè)onUpgrade()方法,如下面代碼
////注意,一定要傳入最新的數(shù)據(jù)庫版本號(hào)
            // 傳入版本號(hào)為2,大于舊版本(1),所以會(huì)調(diào)用onUpgrade()升級(jí)數(shù)據(jù)庫
            DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,
                    "test_carson", 2);

            // 調(diào)用getWritableDatabase()得到一個(gè)可寫的SQLiteDatabase對(duì)象
            SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase();

            // 創(chuàng)建一個(gè)ContentValues對(duì)象
            ContentValues values = new ContentValues();
            values.put("name", "zhangsan");

            // 調(diào)用update方法修改數(shù)據(jù)庫
            sqliteDatabase.update("user", values, "id=?", new String[] { "1" });
            // 第一個(gè)參數(shù)String:表名
            // 第二個(gè)參數(shù)ContentValues:ContentValues對(duì)象(需要修改的)
            // 第三個(gè)參數(shù)String:WHERE表達(dá)式,where選擇語句, 選擇那些行進(jìn)行數(shù)據(jù)的更新, 如果該參數(shù)為 null, 就會(huì)修改所有行;?號(hào)是占位符
            // 第四個(gè)參數(shù)String[]:where選擇語句的參數(shù), 逐個(gè)替換 whereClause 中的占位符;
3.4 刪除數(shù)據(jù)

步驟:創(chuàng)建并打開數(shù)據(jù)庫(可讀/寫)、刪除數(shù)據(jù)

涉及方法:getWritableDatabase()、delete()

> delete()也可以使用excelSQL()代替

具體代碼如下:

//1. 創(chuàng)建并打開數(shù)據(jù)庫

// 創(chuàng)建DatabaseHelper對(duì)象
// 只執(zhí)行這句話是不會(huì)創(chuàng)建或打開連接的
////注意,一定要傳入最新的數(shù)據(jù)庫版本號(hào)
            SQLiteOpenHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,
                    "test_carson",2);
           // 調(diào)用getWritableDatabase()方法創(chuàng)建或打開一個(gè)可以讀的數(shù)據(jù)庫
          //通過返回的SQLiteDatabase對(duì)象對(duì)數(shù)據(jù)庫進(jìn)行操作
            SQLiteDatabase sqliteDatabase = dbHelper.getWritableDatabase();

//2. 刪除數(shù)據(jù)

            //調(diào)用delete方法進(jìn)行刪除操作
            sqliteDatabase.delete("user", "id=?", new String[]{"1"});

            //第一個(gè)參數(shù)String:需要操作的表名
            //第二個(gè)參數(shù)String:where選擇語句, 選擇哪些行要被刪除, 如果為null, 就刪除所有行;
            //第三個(gè)參數(shù)String[]: where語句的參數(shù), 逐個(gè)替換where語句中的 "?" 占位符;
3.5 查詢數(shù)據(jù)

步驟:創(chuàng)建并打開數(shù)據(jù)庫(可讀)、查詢數(shù)據(jù)

涉及方法:getReadableDatabase()、query() 或 rawQuery(),介紹如下:

//第一種最為簡單
//將所有的SQL語句都組織到一個(gè)字符串中,使用占位符代替實(shí)際參數(shù)(selectionArgs)
db.rawQuery(String sql, String[] selectionArgs);  

db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy);  
db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);  
db.query(String distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);  

//參數(shù)說明
//table:要操作的表明
//columns:查詢的列所有名稱集
//selection:WHERE之后的條件語句,可以使用占位符
//groupBy:指定分組的列名
//having指定分組條件,配合groupBy使用
//orderBy指定排序的列名
//limit指定分頁參數(shù)
//distinct可以指定“true”或“false”表示要不要過濾重復(fù)值

//所有方法將返回一個(gè)Cursor對(duì)象,代表數(shù)據(jù)集的游標(biāo)

//Cursor對(duì)象常用方法如下:
c.move(int offset); //以當(dāng)前位置為參考,移動(dòng)到指定行  
c.moveToFirst();    //移動(dòng)到第一行  
c.moveToLast();     //移動(dòng)到最后一行  
c.moveToPosition(int position); //移動(dòng)到指定行  
c.moveToPrevious(); //移動(dòng)到前一行  
c.moveToNext();     //移動(dòng)到下一行  
c.isFirst();        //是否指向第一條  
c.isLast();     //是否指向最后一條  
c.isBeforeFirst();  //是否指向第一條之前  
c.isAfterLast();    //是否指向最后一條之后  
c.isNull(int columnIndex);  //指定列是否為空(列基數(shù)為0)  
c.isClosed();       //游標(biāo)是否已關(guān)閉  
c.getCount();       //總數(shù)據(jù)項(xiàng)數(shù)  
c.getPosition();    //返回當(dāng)前游標(biāo)所指向的行數(shù)  
c.getColumnIndex(String columnName);//返回某列名對(duì)應(yīng)的列索引值  
c.getString(int columnIndex);   //返回當(dāng)前行指定列的值

具體代碼如下:

//1. 創(chuàng)建并打開數(shù)據(jù)庫

// 創(chuàng)建DatabaseHelper對(duì)象
// 只執(zhí)行這句話是不會(huì)創(chuàng)建或打開連接的
////注意,一定要傳入最新的數(shù)據(jù)庫版本號(hào)
            SQLiteOpenHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,
                    "test_carson",2);
           // 調(diào)用getReadableDatabase()方法創(chuàng)建或打開一個(gè)可以讀的數(shù)據(jù)庫
          //通過返回的SQLiteDatabase對(duì)象對(duì)數(shù)據(jù)庫進(jìn)行操作
            SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase();

//2. 查詢數(shù)據(jù)

// 調(diào)用SQLiteDatabase對(duì)象的query方法進(jìn)行查詢
// 返回一個(gè)Cursor對(duì)象:由數(shù)據(jù)庫查詢返回的結(jié)果集對(duì)象
            Cursor cursor = sqliteDatabase.query("user", new String[] { "id",
                    "name" }, "id=?", new String[] { "1" }, null, null, null);

             // 第一個(gè)參數(shù)String:表名
            // 第二個(gè)參數(shù)String[]:要查詢的列名
            // 第三個(gè)參數(shù)String:查詢條件
            // 第四個(gè)參數(shù)String[]:查詢條件的參數(shù)
            // 第五個(gè)參數(shù)String:對(duì)查詢的結(jié)果進(jìn)行分組
            // 第六個(gè)參數(shù)String:對(duì)分組的結(jié)果進(jìn)行限制
            // 第七個(gè)參數(shù)String:對(duì)查詢的結(jié)果進(jìn)行排序

// 將光標(biāo)移動(dòng)到下一行,從而判斷該結(jié)果集是否還有下一條數(shù)據(jù)
//如果有則返回true,沒有則返回false
            while (cursor.moveToNext()) {
                id = cursor.getString(cursor.getColumnIndex("id"));
                name = cursor.getString(cursor.getColumnIndex("name"));
            }

//也可將Cursor中的數(shù)據(jù)轉(zhuǎn)為 ArrayList> 類型數(shù)據(jù)
private ArrayList> cursor2list(Cursor cursor) {  
    ArrayList> list = new ArrayList>();  

    //遍歷Cursor  
    while(cursor.moveToNext()){  
        Map map = new HashMap();  
        map.put("tittle", cursor.getString(1));  
        map.put("content", cursor.getString(2));  
        list.add(map);  
    }  
    return list;  
}
3.6 關(guān)閉數(shù)據(jù)庫

當(dāng)我們完成了對(duì)數(shù)據(jù)庫的操作后,記得調(diào)用SQLiteDatabase的close()方法釋放數(shù)據(jù)庫連接,否則容易出現(xiàn)SQLiteException。

  SQLiteOpenHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,
                    "test_carson");
           // 調(diào)用getReadableDatabase()方法創(chuàng)建或打開一個(gè)可以讀的數(shù)據(jù)庫
          //通過返回的SQLiteDatabase對(duì)象對(duì)數(shù)據(jù)庫進(jìn)行操作
            SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase();

//關(guān)閉當(dāng)前數(shù)據(jù)庫  
        sqliteDatabase.close();
3.7 刪除數(shù)據(jù)庫
  SQLiteOpenHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,
                    "test_carson");
           // 調(diào)用getReadableDatabase()方法創(chuàng)建或打開一個(gè)可以讀的數(shù)據(jù)庫
          //通過返回的SQLiteDatabase對(duì)象對(duì)數(shù)據(jù)庫進(jìn)行操作
            SQLiteDatabase sqliteDatabase = dbHelper.getReadableDatabase();

      //刪除名為test.db數(shù)據(jù)庫  
      deleteDatabase("test.db");
特別注意

其實(shí)對(duì)于上述所有的數(shù)據(jù)庫操作(除了“查詢”),我們都可以使用下列方法代替:

db.executeSQL(String sql);  
db.executeSQL(String sql, Object[] bindArgs);
//sql語句中使用占位符,然后第二個(gè)參數(shù)是實(shí)際的參數(shù)集

個(gè)人建議都使用SQL語句,因?yàn)椋?/p>

SQL語句較為通用;

使用insert()、delete()、query()方法具備多個(gè)參數(shù),使用復(fù)雜

4. 實(shí)例Demo

Demo描述:創(chuàng)建數(shù)據(jù)庫并對(duì)數(shù)據(jù)庫進(jìn)行操作(增、刪、查、改)

實(shí)現(xiàn)步驟:

實(shí)現(xiàn)子類繼承SQLiteOpenHelper類(復(fù)寫onCreat()、onUpgrade())

在MainActivity里實(shí)現(xiàn)需要進(jìn)行的數(shù)據(jù)庫操作(增、刪、查、改)

4.1 具體代碼如下:

建議先下載Demo再進(jìn)行閱讀:Carson的Github:DataBase_Demo

步驟1:實(shí)現(xiàn)子類繼承SQLiteOpenHelper類(復(fù)寫onCreat()、onUpgrade())

MySQLiteOpenHelper.java

package scut.carson_ho.database_demo;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class MySQLiteOpenHelper extends SQLiteOpenHelper {

    //數(shù)據(jù)庫版本號(hào)
    private static Integer Version = 1;

    //在SQLiteOpenHelper的子類當(dāng)中,必須有該構(gòu)造函數(shù)
    public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,
                          int version) {
        //必須通過super調(diào)用父類當(dāng)中的構(gòu)造函數(shù)
        super(context, name, factory, version);
    }
    //參數(shù)說明
    //context:上下文對(duì)象
    //name:數(shù)據(jù)庫名稱
    //param:factory
    //version:當(dāng)前數(shù)據(jù)庫的版本,值必須是整數(shù)并且是遞增的狀態(tài)

    public MySQLiteOpenHelper(Context context,String name,int version)
    {
        this(context,name,null,version);
    }

    public MySQLiteOpenHelper(Context context,String name)
    {
        this(context, name, Version);
    }

    //當(dāng)數(shù)據(jù)庫創(chuàng)建的時(shí)候被調(diào)用
    @Override
    public void onCreate(SQLiteDatabase db) {

        System.out.println("創(chuàng)建數(shù)據(jù)庫和表");
        //創(chuàng)建了數(shù)據(jù)庫并創(chuàng)建一個(gè)叫records的表
        //SQLite數(shù)據(jù)創(chuàng)建支持的數(shù)據(jù)類型: 整型數(shù)據(jù),字符串類型,日期類型,二進(jìn)制的數(shù)據(jù)類型
        String sql = "create table user(id int primary key,name varchar(200))";
        //execSQL用于執(zhí)行SQL語句
        //完成數(shù)據(jù)庫的創(chuàng)建
        db.execSQL(sql);
        //數(shù)據(jù)庫實(shí)際上是沒有被創(chuàng)建或者打開的,直到getWritableDatabase() 或者 getReadableDatabase() 方法中的一個(gè)被調(diào)用時(shí)才會(huì)進(jìn)行創(chuàng)建或者打開

    }

    //數(shù)據(jù)庫升級(jí)時(shí)調(diào)用
    //如果DATABASE_VERSION值被改為2,系統(tǒng)發(fā)現(xiàn)現(xiàn)有數(shù)據(jù)庫版本不同,即會(huì)調(diào)用onUpgrade()方法
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        System.out.println("更新數(shù)據(jù)庫版本為:"+newVersion);
    }

}

步驟2:在MainActivity里實(shí)現(xiàn)需要進(jìn)行的數(shù)據(jù)庫操作(增、刪、查、改)

MainActivity.java

package scut.carson_ho.database_demo;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button instablish;
    private Button insert;
    private Button upgrade;
    private Button modify;
    private Button delete;
    private Button query;
    private Button delete_database;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //綁定按鈕
        instablish = (Button) findViewById(R.id.instablish);
        insert = (Button) findViewById(R.id.insert);
        upgrade = (Button) findViewById(R.id.upgrade);
        modify = (Button) findViewById(R.id.modify);
        delete = (Button) findViewById(R.id.delete);
        query = (Button) findViewById(R.id.query);
        delete_database = (Button) findViewById(R.id.delete_database);

        //設(shè)置監(jiān)聽器
        instablish.setOnClickListener(this);
        insert.setOnClickListener(this);
        upgrade.setOnClickListener(this);
        modify.setOnClickListener(this);
        delete.setOnClickListener(this);
        query.setOnClickListener(this);
        delete_database.setOnClickListener(this);

    }

//設(shè)置每個(gè)按鈕對(duì)數(shù)據(jù)庫的操作進(jìn)行控制
    @Override
    public void onClick(View v) {
        switch (v.getId()) {

            //點(diǎn)擊創(chuàng)建數(shù)據(jù)庫庫
            case R.id.instablish:

                // 創(chuàng)建SQLiteOpenHelper子類對(duì)象
                MySQLiteOpenHelper dbHelper = new MySQLiteOpenHelper(this,"test_carson");
                //數(shù)據(jù)庫實(shí)際上是沒有被創(chuàng)建或者打開的,直到getWritableDatabase() 或者 getReadableDatabase() 方法中的一個(gè)被調(diào)用時(shí)才會(huì)進(jìn)行創(chuàng)建或者打開
                SQLiteDatabase  sqliteDatabase = dbHelper.getWritableDatabase();
                // SQLiteDatabase  sqliteDatabase = dbHelper.getReadbleDatabase();

                break;

            //點(diǎn)擊更新數(shù)據(jù)
            case R.id.upgrade:

                // 創(chuàng)建SQLiteOpenHelper子類對(duì)象
                MySQLiteOpenHelper dbHelper_upgrade = new MySQLiteOpenHelper(this,"test_carson",2);
                // 調(diào)用getWritableDatabase()方法創(chuàng)建或打開一個(gè)可以讀的數(shù)據(jù)庫
                SQLiteDatabase  sqliteDatabase_upgrade = dbHelper_upgrade.getWritableDatabase();
                // SQLiteDatabase  sqliteDatabase = dbHelper.getReadbleDatabase();

                break;

            //點(diǎn)擊插入數(shù)據(jù)到數(shù)據(jù)庫
            case R.id.insert:

                System.out.println("插入數(shù)據(jù)");

                // 創(chuàng)建SQLiteOpenHelper子類對(duì)象
                ////注意,一定要傳入最新的數(shù)據(jù)庫版本號(hào)
                MySQLiteOpenHelper dbHelper1 = new MySQLiteOpenHelper(this,"test_carson",2);
                // 調(diào)用getWritableDatabase()方法創(chuàng)建或打開一個(gè)可以讀的數(shù)據(jù)庫
                SQLiteDatabase  sqliteDatabase1 = dbHelper1.getWritableDatabase();

                // 創(chuàng)建ContentValues對(duì)象
                ContentValues values1 = new ContentValues();

                // 向該對(duì)象中插入鍵值對(duì)
                values1.put("id", 1);
                values1.put("name", "carson");

                // 調(diào)用insert()方法將數(shù)據(jù)插入到數(shù)據(jù)庫當(dāng)中
                sqliteDatabase1.insert("user", null, values1);

                // sqliteDatabase.execSQL("insert into user (id,name) values (1,"carson")");

                //關(guān)閉數(shù)據(jù)庫
                sqliteDatabase1.close();

                break;

            //點(diǎn)擊查詢數(shù)據(jù)庫
            case R.id.query:

                System.out.println("查詢數(shù)據(jù)");

                // 創(chuàng)建DatabaseHelper對(duì)象
                MySQLiteOpenHelper dbHelper4 = new MySQLiteOpenHelper(MainActivity.this,"test_carson",2);

                // 調(diào)用getWritableDatabase()方法創(chuàng)建或打開一個(gè)可以讀的數(shù)據(jù)庫
                SQLiteDatabase sqliteDatabase4 = dbHelper4.getReadableDatabase();

                // 調(diào)用SQLiteDatabase對(duì)象的query方法進(jìn)行查詢
                // 返回一個(gè)Cursor對(duì)象:由數(shù)據(jù)庫查詢返回的結(jié)果集對(duì)象
                Cursor cursor = sqliteDatabase4.query("user", new String[] { "id",
                        "name" }, "id=?", new String[] { "1" }, null, null, null);

                String id = null;
                String name = null;

                //將光標(biāo)移動(dòng)到下一行,從而判斷該結(jié)果集是否還有下一條數(shù)據(jù)
                //如果有則返回true,沒有則返回false
                while (cursor.moveToNext()) {
                    id = cursor.getString(cursor.getColumnIndex("id"));
                    name = cursor.getString(cursor.getColumnIndex("name"));
                    //輸出查詢結(jié)果
                    System.out.println("查詢到的數(shù)據(jù)是:"+"id: "+id+"  "+"name: "+name);

                }
                //關(guān)閉數(shù)據(jù)庫
                sqliteDatabase4.close();

                break;

            //點(diǎn)擊修改數(shù)據(jù)
            case R.id.modify:
                System.out.println("修改數(shù)據(jù)");

                // 創(chuàng)建一個(gè)DatabaseHelper對(duì)象
                // 將數(shù)據(jù)庫的版本升級(jí)為2
                // 傳入版本號(hào)為2,大于舊版本(1),所以會(huì)調(diào)用onUpgrade()升級(jí)數(shù)據(jù)庫
                MySQLiteOpenHelper dbHelper2 = new MySQLiteOpenHelper(MainActivity.this,"test_carson", 2);

                // 調(diào)用getWritableDatabase()得到一個(gè)可寫的SQLiteDatabase對(duì)象
                SQLiteDatabase sqliteDatabase2 = dbHelper2.getWritableDatabase();

                // 創(chuàng)建一個(gè)ContentValues對(duì)象
                ContentValues values2 = new ContentValues();
                values2.put("name", "zhangsan");

                // 調(diào)用update方法修改數(shù)據(jù)庫
                sqliteDatabase2.update("user", values2, "id=?", new String[]{"1"});

                //關(guān)閉數(shù)據(jù)庫
                sqliteDatabase2.close();
                break;

            //點(diǎn)擊刪除數(shù)據(jù)
            case R.id.delete:

                System.out.println("刪除數(shù)據(jù)");

                // 創(chuàng)建DatabaseHelper對(duì)象
                MySQLiteOpenHelper dbHelper3 = new MySQLiteOpenHelper(MainActivity.this,"test_carson",2);

                // 調(diào)用getWritableDatabase()方法創(chuàng)建或打開一個(gè)可以讀的數(shù)據(jù)庫
                SQLiteDatabase sqliteDatabase3 = dbHelper3.getWritableDatabase();

                //刪除數(shù)據(jù)
                sqliteDatabase3.delete("user", "id=?", new String[]{"1"});

                //關(guān)閉數(shù)據(jù)庫
                sqliteDatabase3.close();
                break;

            //點(diǎn)擊刪除數(shù)據(jù)庫
            case R.id.delete_database:

                System.out.println("刪除數(shù)據(jù)庫");

                MySQLiteOpenHelper dbHelper5 = new MySQLiteOpenHelper(MainActivity.this,
                        "test_carson",2);

                // 調(diào)用getReadableDatabase()方法創(chuàng)建或打開一個(gè)可以讀的數(shù)據(jù)庫
                SQLiteDatabase sqliteDatabase5 = dbHelper5.getReadableDatabase();

                //刪除名為test.db數(shù)據(jù)庫
                deleteDatabase("test_carson");
                break;

            default:
                break;

        }
    }
}

步驟3:在主布局文件設(shè)置按鈕控制數(shù)據(jù)庫的操作
activity_main.xml




    
4.2 測試結(jié)果

界面顯示

按順序點(diǎn)擊:創(chuàng)建 - 更新 - 插入 - 查詢 - 修改 - 查詢 - 刪除數(shù)據(jù)

4.3 Demo下載地址

DataBase_Demo

5. 總結(jié)

通過閱讀本文,你將全面了解Android SQLite數(shù)據(jù)庫中的所有操作

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/70581.html

相關(guān)文章

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<