国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

android SQLite數據庫總結

2019-12-12 04:04:53
字體:
來源:轉載
供稿:網友

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);//執行插入操作

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持武林網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 历史| 隆子县| 神农架林区| 建瓯市| 辽中县| 汉沽区| 英山县| 砀山县| 乌兰浩特市| 句容市| 高淳县| 泰安市| 龙游县| 福清市| 武冈市| 防城港市| 巴林右旗| 蒲江县| 南阳市| 昌邑市| 白玉县| 诸城市| 天水市| 阿城市| 正阳县| 永嘉县| 大埔县| 吴川市| 青龙| 越西县| 泉州市| 云梦县| 龙门县| 修水县| 清远市| 凉山| 抚州市| 盐亭县| 寻乌县| 浑源县| 察隅县|