亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

android SQLite數(shù)據(jù)庫總結(jié)

Original 2017-01-13 10:14:02 409
abstrakt:本文主要介紹了android SQLite數(shù)據(jù)庫的相關(guān)知識(shí)。SQLiteSQLite是一種超輕量級(jí)的嵌入式數(shù)據(jù)庫,大小只有幾百KB,但是其語法支持標(biāo)準(zhǔn)SQL語法,同時(shí)還遵循了數(shù)據(jù)庫的ACID事務(wù),所以學(xué)過其他數(shù)據(jù)庫的開發(fā)人員都很容易掌握其使用。sql語法就不介紹了,直接看在android中的使用SQLiteOpenHelper——封裝好的數(shù)據(jù)庫操作輔助類,需重寫重寫方法onCreate:初始化數(shù)據(jù)

本文主要介紹了android SQLite數(shù)據(jù)庫的相關(guān)知識(shí)。

SQLite

SQLite是一種超輕量級(jí)的嵌入式數(shù)據(jù)庫,大小只有幾百KB,但是其語法支持標(biāo)準(zhǔn)SQL語法,同時(shí)還遵循了數(shù)據(jù)庫的ACID事務(wù),所以學(xué)過其他數(shù)據(jù)庫的開發(fā)人員都很容易掌握其使用。

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

SQLiteOpenHelper——封裝好的數(shù)據(jù)庫操作輔助類,需重寫

重寫方法

onCreate:初始化數(shù)據(jù)庫,創(chuàng)建表,添加初始數(shù)據(jù)

onUpgrade:數(shù)據(jù)庫版本升級(jí)時(shí)的數(shù)據(jù)庫操作,如備份刪除數(shù)據(jù)庫等

常用方法

getReadableDatabase()    獲取SQLiteDatabase對(duì)象,操作數(shù)據(jù)庫

getWritableDatabase()        獲取SQLiteDatabase對(duì)象,操作數(shù)據(jù)庫

區(qū)別:在磁盤空間滿或不可寫時(shí),1方法將獲得只讀的數(shù)據(jù)庫對(duì)象,而2方法會(huì)報(bào)錯(cuò),在正常情況下,獲取到的都是可讀寫的數(shù)據(jù)庫對(duì)象。

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";//數(shù)據(jù)庫名
 private static final int version=1;//版本號(hào)
 //重寫構(gòu)造方法的時(shí)候選擇參數(shù)少的一項(xiàng)
 public DBHelper(Context context) {
  //1:上下文 2:數(shù)據(jù)庫名稱 3:游標(biāo)創(chuàng)建工廠 4:數(shù)據(jù)庫版本 版本只能是整數(shù) 1 2 3..
  super(context, name, null, version);
 }
 //數(shù)據(jù)庫的初始化 SQLiteDatabase數(shù)據(jù)庫操作對(duì)象
 //一般只在第一次運(yùn)行和版本更新的時(shí)候調(diào)用
 @Override
 public void onCreate(SQLiteDatabase db) {
  //創(chuàng)建數(shù)據(jù)庫 主鍵默認(rèn)自增
  db.execSQL("create table student(" +
    "_id integer not null primary key autoincrement," +
    "name varchar(20)," +
    "phone varchar(11)," +
    "gender varchar(2))");
  //添加一條測試數(shù)據(jù)
  db.execSQL("INSERT into student values(null,?,?,?)"
    ,new Object[]{"小黑","12345678901","男"});
 }
 /**
  * 在版本升級(jí)的時(shí)候調(diào)用
  * 修改version 為2 表示版本升級(jí) 就會(huì)調(diào)用這個(gè)方法
  * @param db 數(shù)據(jù)庫操作對(duì)象
  * @param oldVersion 舊版本號(hào)
  * @param newVersion 新版本號(hào)
  */
 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 }
}

在android數(shù)據(jù)庫的創(chuàng)建是需要?jiǎng)?chuàng)建對(duì)象才能創(chuàng)建的

在activity類中創(chuàng)建出一個(gè)數(shù)據(jù)庫類對(duì)象

創(chuàng)建好數(shù)據(jù)對(duì)象就可以操作數(shù)據(jù)了 通過SQLiteDatabase獲取   兩種獲取方法的區(qū)別上面已經(jīng)提到過了

   //創(chuàng)建數(shù)據(jù)
DBHelper helper =new DBHelper(this);
//調(diào)用數(shù)據(jù)操作對(duì)象
SQLiteDatabase dbWrite=helper.getWritableDatabase();
SQLiteDatabase dbRead=helper.getReadableDatabase();

SQLiteDatabase給我們提供了很多操作數(shù)據(jù)的方法 

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

   table: 表名

   whereClause:where條件  列名 占位符  id=?

   whereArgs:參數(shù)值數(shù)組

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

    nullColumnHack:為空列

    ContentValues values:通過鍵值對(duì)存儲(chǔ)添加的數(shù)據(jù)  key為列 value為值

    INSERT方法 底層是通過拼接字符串的方式 如果ContentValues是空的 拼接成的sql語句無法執(zhí)行會(huì)報(bào)錯(cuò) 所以給一個(gè)可以為空的列當(dāng)ContentValues為空時(shí)也可以執(zhí)行 有興趣的可以看一下源碼

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

   參數(shù)意思同上

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

    返回值是一個(gè)游標(biāo)   這個(gè)query參數(shù)較多 簡單的查詢就還是寫一條sql語句簡單點(diǎn)

      boolean distinct 去重復(fù)

      String table 表名

      String[] columns要查詢的列

      String SELECTion查詢條件

      String[] SELECTionArgs查詢參數(shù)值

      String groupBy分組

      String having分組條件

      String orderBy排序

      String limit分頁查詢限制

關(guān)閉數(shù)據(jù)庫:(void) close()

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

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

事務(wù)

try {
   db.beginTransaction();//開啟事務(wù)
   // db.UPDATE();
   // db.INSERT();
   db.setTransactionSuccessful(); //沒有設(shè)置事物成功 finally就會(huì)回滾
  } catch (Exception e) {
   e.printStackTrace();
  }finally {
   db.endTransaction();
  }

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

查詢

private void query() {
  StringBuffer sb=new StringBuffer("SELECT * from student where 1=1");
  //參數(shù)集合
  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);
  //返回值 游標(biāo)
  Cursor cursor=db.rawQuery(sb.toString(),projection);
    //判斷游標(biāo)是否為空,是否有一個(gè)值
  while(cursor!=null&&cursor.moveToNext()){
   // getColumnIndex獲取列的下標(biāo) cursor.getXXXX()獲取指定列的值
   String name=cursor.getString(cursor.getColumnIndex("name"));
   Integer id=cursor.getInt(cursor.getColumnIndex("_id"));
  }
 }

用不到的參數(shù)就讓它為空吧   遍歷數(shù)據(jù)就while循環(huán)就好咯

Cursor c = db.query("student",null,null,null,null,null,null);//查詢并獲得游標(biāo)

更新

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){
   //更新操作拼接字符串末尾有一個(gè)","需要去除
   //刪除最后一位的“,”
   sb.setLength(sb.length()-1);
   sb.append(" where 1=1");
   //通過id指定 更新那行數(shù)據(jù)
   if(!TextUtils.isEmpty(id)){
    sb.append(" and _id=?");
    params.add(id);
   }else{
    Toast.makeText(this,"請(qǐng)?zhí)顚慽d",Toast.LENGTH_SHORT).show();
    return;
   }
   SQLiteDatabase db=helper.getWritableDatabase();
   Object [] o=new Object[params.size()];
   params.toArray(o);//將數(shù)據(jù)存放到指定的數(shù)組中
   db.execSQL(sb.toString(),o);
  }
 }

   

ContentValues cv = new ContentValues();//實(shí)例化ContentValues
cv.put("name","123");//添加要更改的字段及內(nèi)容
String whereClause = "phone=?";//修改條件
String[] whereArgs = {"12312313213"};//修改條件的參數(shù)
db.UPDATE("student",cv,whereClause,whereArgs);//執(zhí)行修改

   

刪除

private void DELETE() {
  getAllText();
  //拼接sql語句
  StringBuffer sb=new StringBuffer("DELETE from student where 1=1");
  //保存參數(shù)的list
  List params=new ArrayList();
  //判斷條件 動(dòng)態(tài)拼接
  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);//將數(shù)據(jù)存放到指定的數(shù)組中
   //執(zhí)行刪除
   db.execSQL(sb.toString(),o);
  }else{
   db.execSQL(sb.toString());
  }
  Toast.makeText(this,"刪除完成",Toast.LENGTH_SHORT).show();
 }

   

String whereClause = "name=?";//刪除的條件
String[] whereArgs = {"123"};//刪除的條件參數(shù)
db.DELETE("student",whereClause,whereArgs);//執(zhí)行刪除

   

增加

private void INSERT() {//保存數(shù)據(jù)到object數(shù)組
  Object [] o=new Object[]{name,phone,gender};
  //獲取數(shù)據(jù)庫操作對(duì)象
  SQLiteDatabase db=helper.getWritableDatabase();
  //sql:sql語句 bingArgs:參數(shù)數(shù)組
  db.execSQL("INSERT into student values(null,?,?,?)",o);
  //關(guān)閉連接
  db.close();
  Toast.makeText(this,"增加成功",Toast.LENGTH_SHORT).show();
 }

   

ContentValues cv = new ContentValues();//實(shí)例化一個(gè)ContentValues用來裝載待插入的數(shù)據(jù)
cv.put("name","123");
db.INSERT("student",null,cv);//執(zhí)行插入操作

 更多關(guān)于android SQLite數(shù)據(jù)庫總結(jié)請(qǐng)關(guān)注PHP中文網(wǎng)(ipnx.cn)其他文章!  


Versionshinweise

Beliebte Eintr?ge