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

首頁 > 系統 > Android > 正文

Android使用SQLite數據庫的示例

2019-12-12 03:57:08
字體:
來源:轉載
供稿:網友

一. 簡介

SQLite數據庫是一個輕量級的DBMS(數據庫管理系統)。SQLite使用單個文件存儲數據,Android標準庫包含SQLite庫以及配套使用的一些Java輔助類。主要特點:輕量級,單一文件,跨平臺,開源。

二. Android中SQLite數據庫的使用

1、創建SQLite數據庫

SQLiteDatabase db=SQLiteDatabase.openOrCreateDatabase("/data/data/" + getPackageName() + "/test.db", null);

執行完這條語句,可以在adb shell下進入/data/data/package-name/下看到剛才創建的數據庫文件

這里寫圖片描述 

在Android中使用SQLiteDatabase的靜態方法
openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)打開或者創建一個數據庫。

它會自動去檢測是否存在這個數據庫,如果存在則打開,反之不存在就創建一個數據庫;創建成功則返回一個SQLiteDatabase對象,失敗拋出FileNotFoundException異常。

除了以上方法,Android還提供了SQLiteOpenHelper這個類來創建數據庫,首先繼承SQLiteOpenHelper,重寫onCreate和onUpgrade方法及構造方法

public class MySqliteHelper extends SQLiteOpenHelper{public MySqliteHelper(Context context) {  super(context, "mysqlite.db", null, 1);  //傳入四個參數  //第一個參數context 上下文對象  //第二個參數mysqlite.db 數據庫名稱(文件名)  //第三個參數一般為null  //第四個參數數據庫版本號,這里寫1}@Overridepublic void onCreate(SQLiteDatabase db) {  /* 數據庫創建的時候會回調此方法,可以用db對象執行SQL語   * 句,創建所需要的表   */}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//當數據庫升級時調用此方法}}

接著在需要創建數據庫的時候調用

SQLiteOpenHelper dbHelper = new MySqliteHelper(this);SQLiteDatabase db = dbHelper.getWritableDatabase();

使用SQLiteOpenHelper創建的數據庫,保存在/data/data/package-name/databases/目錄下,通過adb shell可以看到創建的數據庫文件

這里寫圖片描述

2、創建數據庫中的數據表

數據庫創建完成后,要創建保存數據的表,表是存放在數據庫中的。示例代碼入下

  private void createTable(SQLiteDatabase db){    //SQL語句    String sql =     "create table stutable(_id integer primary key autoincrement,name text,age integer)";    db.execSQL(sql);  }

這里附上SQLite數據類型

NULL: 這個值可為空值

VARCHAR(n):長度不固定且其最大長度為 n 的字串,n不能超過 4000。

CHAR(n):長度固定為n的字串,n不能超過 254。

INTEGER: 值被標識為整數,依據值的大小可以依次被存儲為1,2,3,4,5,6,7,8….

REAL: 所有值都是浮動的數值,被存儲為8字節的IEEE浮動標記序號.

TEXT: 值為文本字符串,使用數據庫編碼存儲(TUTF-8, UTF-16BE or UTF-16-LE).

BLOB: 值是BLOB數據塊,以輸入的數據格式進行存儲。如何輸入就如何存儲,不改變格式。

DATA :包含了 年份、月份、日期

執行完上述語句,可以通過ADM將數據庫文件導出到電腦上

這里寫圖片描述 

通過可視化工具打開數據庫文件可以看到之前創建的表,以及定義的表字段

 這里寫圖片描述

除了執行定義創建表的方法外,還可以在繼承SQLiteOpenHelper類中的onCreate方法來初始化表結構,在后面的例子使用繼承SQLiteOpenHelper方式創建表。

3、對表進行操作(數據表的增刪改查)

增:在表中增加數據,可以使用SQLiteDatabase類中提供的execSQL(String sql)執行一條插入數據的SQL語句來插入數據,不過,AndroidSQLiteDatabase類提供了更為簡單的方法來執行插入數據操作

  //SQLiteDatabase類中提供的方法  public long insert(     String table,//要操作表名      String nullColumnHack,//空列的默認值      ContentValues values//ContentValues封裝了列名稱和列值的Map     );   private void insertToTable(SQLiteDatabase db){    ContentValues cv = new ContentValues();    cv.put("name","wxq");    cv.put("age",11);    db.insert("stutable",null,cv);   }

執行insertTable方法,再次導出數據庫可以看到stutable表中增加了一條數據

這里寫圖片描述

刪:好吧,剛插入一條數據。。。

同樣Android提供了delete方法

  //SQLiteDatabase類中提供的方法  public int delete(      String table,//表名稱      String whereClause,//刪除條件      String[] whereArgs); //刪除條件值數組  private void deleteToTable(SQLiteDatabase db){    //刪除條件,這里以name為條件,也可以是age = ?    String whereClasuse = "name = ?";    //刪除條件參數,    String[] whereArgs = new String[]{"wxq"};    //執行刪除    db.delete("stutable",whereClasuse,whereArgs);  }

執行上述語句,將會刪除stutable表中剛才插入的數據。

改:

  //SQLiteDatabase類中提供的方法  public int update(  //表名稱  String table,  //和行列ContentValues鍵值對應的key-value  ContentValues values,  //更新條件  String whereClause,  //更新條件數組  String[] whereArgs  );  private void updateToTable(SQLiteDatabase db){    //實例化ContentValues    ContentValues cv= new ContentValues();    cv.put("age",23);    //更新條件    String whereClause = "name = ?";    //更新條件數組    String[] whereArgs = new String[]{"wxq"};    db.update("stutable",cv,whereClause,whereArgs);  }

執行完更新語句,導出數據庫文件,在可視化工具中查看

這里寫圖片描述

查:在Android中查詢數據是通過Cursor類來實現的,可以使用SQLiteDatabase.query()方法時,這里使用別一個方法rawQuery

  public Cursor rawQuery(  String sql,//查詢的SQL語句  String[] selectionArgs//當SQL語句中含有?,這里代表值  );  public void queryToTable(SQLiteDatabase db){    String sql = "select * from stutable";//全查    Cursor c = db.rawQuery(sql,null);//這里會返回一個Cursor(游標)對象  }

這里寫圖片描述

使用SQLite的一個Demo(英雄管理系統)

這里寫圖片描述 

主要操作數據庫的代碼

public class HeroSqliteManager {  private SQLiteOpenHelper dbHelper;  private SQLiteDatabase db;  private static HeroSqliteManager instance;  private static final String TABLE_NAME = "hero";  private static final String NAME_FIELD = "name";  private static final String ICOID_FIELD = "icoId";  private static final String ATTACK_FIELD = "attack";  private static final String DEFENSE_FIELD = "defense";  public static HeroSqliteManager getInstance() {    if (instance == null) {      synchronized (HeroSqliteManager.class) {        if (instance == null) {          instance = new HeroSqliteManager();        }      }    }    return instance;  }  private HeroSqliteManager() {    dbHelper = new HeroSqliteHelper(HeroApplication.getContext());    db = dbHelper.getWritableDatabase();  }  /**   * 插入記錄   * @param hero   */  public void insertData(Hero hero) {    ContentValues cv = new ContentValues();    cv.put(NAME_FIELD, hero.name);    cv.put(ICOID_FIELD, hero.icoId);    cv.put(ATTACK_FIELD, hero.attack);    cv.put(DEFENSE_FIELD, hero.defense);    db.insert(TABLE_NAME, null, cv);  }  /**   * 刪除記錄   * @param   */  public void deleteData(int id) {    String whereClasuse = "_id = ?";    String[] whereArgs = new String[]{String.valueOf(id)};    db.delete(TABLE_NAME, whereClasuse, whereArgs);  }  /**   * 修改記錄   * @param hero   */  public void updateData(Hero hero) {    ContentValues cv = new ContentValues();    cv.put(NAME_FIELD, hero.name);    cv.put(ICOID_FIELD, hero.icoId);    cv.put(ATTACK_FIELD, hero.attack);    cv.put(DEFENSE_FIELD, hero.defense);    String whereClasuse = "_id = ?";    String[] whereArgs = new String[]{String.valueOf(hero.id)};    db.update(TABLE_NAME, cv, whereClasuse, whereArgs);  }  /**   * 查詢所有的英雄   * @return   */  public List<Hero> selectData() {    List<Hero> heroList = new ArrayList<>();    Cursor c = db.rawQuery("select * from " + TABLE_NAME, null);    while (c.moveToNext()) {      Hero hero = new Hero();      hero.id = c.getInt(c.getColumnIndex("_id"));      hero.name = c.getString(c.getColumnIndex(NAME_FIELD));      hero.icoId = c.getInt(c.getColumnIndex(ICOID_FIELD));      hero.attack = c.getInt(c.getColumnIndex(ATTACK_FIELD));      hero.defense = c.getInt(c.getColumnIndex(DEFENSE_FIELD));      heroList.add(hero);    }    c.close();    return heroList;  }  /**   * 按name查詢   * @param name   * @return   */  public Hero selectForName(String name) {    Cursor c = db.rawQuery("select * from " + TABLE_NAME + " where name = ?", new String[]{name});    Hero hero = null;    if (c.moveToNext()) {      hero = new Hero();      hero.id = c.getInt(c.getColumnIndex("_id"));      hero.name = c.getString(c.getColumnIndex(NAME_FIELD));      hero.icoId = c.getInt(c.getColumnIndex(ICOID_FIELD));      hero.attack = c.getInt(c.getColumnIndex(ATTACK_FIELD));      hero.defense = c.getInt(c.getColumnIndex(DEFENSE_FIELD));    }    c.close();    return hero;  }  public void destroy() {//    if (db != null) {//      db.close();//    }//    db = null;  }}

SQLiteDemo  

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 友谊县| 若羌县| 尖扎县| 鹰潭市| 砚山县| 临湘市| 璧山县| 桦南县| 宝兴县| 阿巴嘎旗| 荔浦县| 乌拉特中旗| 什邡市| 南宫市| 东阳市| 饶河县| 理塘县| 聊城市| 兴宁市| 达尔| 龙南县| 乃东县| 福州市| 香格里拉县| 旬阳县| 新营市| 宁波市| 泊头市| 普陀区| 五原县| 左权县| 莫力| 怀化市| 长岛县| 平阳县| 盐源县| 竹山县| 陇川县| 阜宁县| 涟水县| 婺源县|