android SQLite資料庫總結,androidsqlite

來源:互聯網
上載者:User

android SQLite資料庫總結,androidsqlite

SQLite

  SQLite是一種超輕量級的嵌入式資料庫,大小隻有幾百KB,但是其文法支援標準SQL文法,同時還遵循了資料庫的ACID事務,所以學過其他資料庫的開發人員都很容易掌握其使用。

  sql文法就不介紹了,直接看在android中的使用

 

SQLiteOpenHelper——封裝好的資料庫操作輔助類,需重寫

  重寫方法

    onCreate:初始化資料庫,建立表,添加初始資料

    onUpgrade:資料庫版本升級時的資料庫操作,如備份刪除資料庫等

  常用方法

    getReadableDatabase()    擷取SQLiteDatabase對象,操作資料庫

    getWritableDatabase()        擷取SQLiteDatabase對象,操作資料庫

    區別:在磁碟空間滿或不可寫時,1方法將獲得唯讀資料庫物件,而2方法會報錯,在正常情況下,擷取到的都是可讀寫的資料庫物件。

import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class DBHelper extends SQLiteOpenHelper {    private static final String name="my";//資料庫名    private static final int version=1;//版本號碼    //重寫構造方法的時候選擇參數少的一項    public DBHelper(Context context) {        //1:上下文 2:資料庫名稱 3:遊標建立工廠 4:資料庫版本 版本只能是整數 1 2 3..        super(context, name, null, version);    }    //資料庫的初始化 SQLiteDatabase資料庫操作對象    //一般只在第一次運行和版本更新的時候調用    @Override    public void onCreate(SQLiteDatabase db) {        //建立資料庫  主鍵預設自增        db.execSQL("create table student(" +                "_id integer not null primary key autoincrement," +                "name varchar(20)," +                "phone varchar(11)," +                "gender varchar(2))");        //添加一條測試資料        db.execSQL("insert into student values(null,?,?,?)"                ,new Object[]{"小黑","12345678901","男"});    }    /**     * 在版本升級的時候調用     * 修改version 為2 表示版本升級 就會調用這個方法     * @param db 資料庫操作對象     * @param oldVersion 舊版本號碼     * @param newVersion 新版本號碼     */    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {    }}

 

在android資料庫的建立是需要建立對象才能建立的

在activity類中建立出一個資料庫類對象

建立好資料對象就可以操作資料了 通過SQLiteDatabase擷取   兩種擷取方法的區別上面已經提到過了

     //建立資料        DBHelper helper =new DBHelper(this);        //調用資料操作對象        SQLiteDatabase dbWrite=helper.getWritableDatabase();        SQLiteDatabase dbRead=helper.getReadableDatabase();

SQLiteDatabase給我們提供了很多操作資料的方法 

 

刪除:(int) delete(String table,String whereClause,String[] whereArgs) 

   table: 表名

   whereClause:where條件  列名 預留位置  id=?

   whereArgs:參數值數組

添加:(long) insert(String table,String nullColumnHack,ContentValues values)  

    nullColumnHack:為空白列

    ContentValues values:通過索引值對儲存添加的資料  key為列 value為值

    insert方法 底層是通過拼接字串的方式 如果ContentValues是空的 拼接成的sql語句無法執行會報錯 所以給一個可以為空白的列 當ContentValues為空白時也可以執行 有興趣的可以看一下源碼

更新:(int) update(String table, ContentValues values, String whereClause, String[] whereArgs)

    參數意思同上

查詢:(Cursor) query(boolean distinct,String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

    傳回值是一個遊標   這個query參數較多 簡單的查詢就還是寫一條sql語句簡單點

      boolean distinct 去重複

      String table 表名

      String[] columns要查詢的列

      String selection查詢條件

      String[] selectionArgs查詢參數值

      String groupBy分組

      String having分組條件

      String orderBy排序

      String limit分頁查詢限制

關閉資料庫:(void) close()

執行一條sql語句:(void) execSQL(String sql) 增刪改查

查詢查詢sql:(Cursor) rawQuery(String sql, String[] selectionArgs)

 

事務

        try {            db.beginTransaction();//開啟事務            // db.update();            // db.insert();            db.setTransactionSuccessful(); //沒有設定事物成功 finally就會復原        } catch (Exception e) {            e.printStackTrace();        }finally {            db.endTransaction();        }    

 

貼代碼咯  執行sql語句 和封裝好的方法

查詢

   private void query() {        StringBuffer sb=new StringBuffer("select * from student where 1=1");        //參數集合        List<String> params=new ArrayList<>();        if(!TextUtils.isEmpty(id)){            sb.append(" and _id=?");            params.add(id);        }        if(!TextUtils.isEmpty(phone)){            sb.append(" and phone=?");            params.add(phone);        }        if(!TextUtils.isEmpty(name)){            sb.append(" and name=?");            params.add(name);        }        if(!TextUtils.isEmpty(gender)){            sb.append(" and gender=?");            params.add(gender);        }        SQLiteDatabase db=helper.getReadableDatabase();        String [] projection=new String [params.size()];        params.toArray(projection);        //傳回值 遊標        Cursor cursor=db.rawQuery(sb.toString(),projection);
    //判斷遊標是否為空白,是否有一個值 while(cursor!=null&&cursor.moveToNext()){ // getColumnIndex擷取列的下標 cursor.getXXXX()擷取指定列的值 String name=cursor.getString(cursor.getColumnIndex("name")); Integer id=cursor.getInt(cursor.getColumnIndex("_id")); } }

用不到的參數就讓它為空白吧   遍曆資料就while迴圈就好咯

Cursor c = db.query("student",null,null,null,null,null,null);//查詢並獲得遊標

 

更新

  private void update() {        StringBuffer sb=new StringBuffer("update student set ");        List params=new ArrayList();        if(!TextUtils.isEmpty(phone)){            sb.append("phone=?,");            params.add(phone);        }        if(!TextUtils.isEmpty(name)){            sb.append("name=?,");            params.add(name);        }        if(!TextUtils.isEmpty(gender)){            sb.append("gender=?,");            params.add(gender);        }        if (params.size()!=0){            //更新操作拼接字串末尾有一個","需要去除            //刪除最後一位的“,”            sb.setLength(sb.length()-1);            sb.append(" where 1=1");            //通過id指定 更新那行資料            if(!TextUtils.isEmpty(id)){                sb.append(" and _id=?");                params.add(id);            }else{                Toast.makeText(this,"請填寫id",Toast.LENGTH_SHORT).show();                return;            }            SQLiteDatabase db=helper.getWritableDatabase();            Object [] o=new Object[params.size()];            params.toArray(o);//將資料存放到指定的數組中            db.execSQL(sb.toString(),o);        }    }
ContentValues cv = new ContentValues();//執行個體化ContentValuescv.put("name","123");//添加要更改的欄位及內容String whereClause = "phone=?";//修改條件String[] whereArgs = {"12312313213"};//修改條件的參數db.update("student",cv,whereClause,whereArgs);//執行修改

 

 

刪除

   private void delete() {        getAllText();        //拼接sql語句        StringBuffer sb=new StringBuffer("delete from student where 1=1");        //儲存參數的list        List params=new ArrayList();        //判斷條件  動態拼接        if(!TextUtils.isEmpty(id)){            sb.append(" and _id=?");            params.add(id);        }        if(!TextUtils.isEmpty(phone)){            sb.append(" and phone=?");            params.add(phone);        }        if(!TextUtils.isEmpty(name)){            sb.append(" and name=?");            params.add(name);        }        if(!TextUtils.isEmpty(gender)){            sb.append(" and gender=?");            params.add(gender);        }        SQLiteDatabase db=helper.getWritableDatabase();        if (params.size()!=0){            Object [] o=new Object[params.size()];            params.toArray(o);//將資料存放到指定的數組中            //執行刪除            db.execSQL(sb.toString(),o);        }else{            db.execSQL(sb.toString());        }        Toast.makeText(this,"刪除完成",Toast.LENGTH_SHORT).show();    }
String whereClause = "name=?";//刪除的條件String[] whereArgs = {"123"};//刪除的條件參數db.delete("student",whereClause,whereArgs);//執行刪除

增加

  private void insert() {//儲存資料到object數組        Object [] o=new Object[]{name,phone,gender};        //擷取資料庫操作對象        SQLiteDatabase db=helper.getWritableDatabase();        //sql:sql語句  bingArgs:參數數組        db.execSQL("insert into student values(null,?,?,?)",o);        //關閉串連        db.close();        Toast.makeText(this,"增加成功",Toast.LENGTH_SHORT).show();    }
ContentValues cv = new ContentValues();//執行個體化一個ContentValues用來裝載待插入的資料cv.put("name","123"); db.insert("student",null,cv);//執行插入操作

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.