欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android使用SQLite數(shù)據(jù)庫的示例

 更新時(shí)間:2017年01月21日 10:59:08   作者:這個(gè)殺手不太累  
本篇文章主要介紹了Android使用SQLite數(shù)據(jù)庫的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

一. 簡介

SQLite數(shù)據(jù)庫是一個(gè)輕量級的DBMS(數(shù)據(jù)庫管理系統(tǒng))。SQLite使用單個(gè)文件存儲(chǔ)數(shù)據(jù),Android標(biāo)準(zhǔn)庫包含SQLite庫以及配套使用的一些Java輔助類。主要特點(diǎn):輕量級,單一文件,跨平臺(tái),開源。

二. Android中SQLite數(shù)據(jù)庫的使用

1、創(chuàng)建SQLite數(shù)據(jù)庫

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

執(zhí)行完這條語句,可以在adb shell下進(jìn)入/data/data/package-name/下看到剛才創(chuàng)建的數(shù)據(jù)庫文件

這里寫圖片描述 

在Android中使用SQLiteDatabase的靜態(tài)方法
openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)打開或者創(chuàng)建一個(gè)數(shù)據(jù)庫。

它會(huì)自動(dòng)去檢測是否存在這個(gè)數(shù)據(jù)庫,如果存在則打開,反之不存在就創(chuàng)建一個(gè)數(shù)據(jù)庫;創(chuàng)建成功則返回一個(gè)SQLiteDatabase對象,失敗拋出FileNotFoundException異常。

除了以上方法,Android還提供了SQLiteOpenHelper這個(gè)類來創(chuàng)建數(shù)據(jù)庫,首先繼承SQLiteOpenHelper,重寫onCreate和onUpgrade方法及構(gòu)造方法

public class MySqliteHelper extends SQLiteOpenHelper{

public MySqliteHelper(Context context) {
  super(context, "mysqlite.db", null, 1);
  //傳入四個(gè)參數(shù)
  //第一個(gè)參數(shù)context 上下文對象
  //第二個(gè)參數(shù)mysqlite.db 數(shù)據(jù)庫名稱(文件名)
  //第三個(gè)參數(shù)一般為null
  //第四個(gè)參數(shù)數(shù)據(jù)庫版本號,這里寫1
}

@Override
public void onCreate(SQLiteDatabase db) {
  /* 數(shù)據(jù)庫創(chuàng)建的時(shí)候會(huì)回調(diào)此方法,可以用db對象執(zhí)行SQL語
   * 句,創(chuàng)建所需要的表
   */
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//當(dāng)數(shù)據(jù)庫升級時(shí)調(diào)用此方法
}
}

接著在需要?jiǎng)?chuàng)建數(shù)據(jù)庫的時(shí)候調(diào)用

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

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

這里寫圖片描述

2、創(chuàng)建數(shù)據(jù)庫中的數(shù)據(jù)表

數(shù)據(jù)庫創(chuàng)建完成后,要?jiǎng)?chuàng)建保存數(shù)據(jù)的表,表是存放在數(shù)據(jù)庫中的。示例代碼入下

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

這里附上SQLite數(shù)據(jù)類型

NULL: 這個(gè)值可為空值

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

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

INTEGER: 值被標(biāo)識為整數(shù),依據(jù)值的大小可以依次被存儲(chǔ)為1,2,3,4,5,6,7,8….

REAL: 所有值都是浮動(dòng)的數(shù)值,被存儲(chǔ)為8字節(jié)的IEEE浮動(dòng)標(biāo)記序號.

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

BLOB: 值是BLOB數(shù)據(jù)塊,以輸入的數(shù)據(jù)格式進(jìn)行存儲(chǔ)。如何輸入就如何存儲(chǔ),不改變格式。

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

執(zhí)行完上述語句,可以通過ADM將數(shù)據(jù)庫文件導(dǎo)出到電腦上

這里寫圖片描述 

通過可視化工具打開數(shù)據(jù)庫文件可以看到之前創(chuàng)建的表,以及定義的表字段

 這里寫圖片描述

除了執(zhí)行定義創(chuàng)建表的方法外,還可以在繼承SQLiteOpenHelper類中的onCreate方法來初始化表結(jié)構(gòu),在后面的例子使用繼承SQLiteOpenHelper方式創(chuàng)建表。

3、對表進(jìn)行操作(數(shù)據(jù)表的增刪改查)

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

  //SQLiteDatabase類中提供的方法
  public long insert(
     String table,//要操作表名 
     String nullColumnHack,//空列的默認(rèn)值 
     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); 
  }

執(zhí)行insertTable方法,再次導(dǎo)出數(shù)據(jù)庫可以看到stutable表中增加了一條數(shù)據(jù)

這里寫圖片描述

刪:好吧,剛插入一條數(shù)據(jù)。。。

同樣Android提供了delete方法

  //SQLiteDatabase類中提供的方法
  public int delete(
      String table,//表名稱
      String whereClause,//刪除條件
      String[] whereArgs); //刪除條件值數(shù)組

  private void deleteToTable(SQLiteDatabase db){
    //刪除條件,這里以name為條件,也可以是age = ?
    String whereClasuse = "name = ?";
    //刪除條件參數(shù),
    String[] whereArgs = new String[]{"wxq"};
    //執(zhí)行刪除
    db.delete("stutable",whereClasuse,whereArgs);
  }

執(zhí)行上述語句,將會(huì)刪除stutable表中剛才插入的數(shù)據(jù)。

改:

  //SQLiteDatabase類中提供的方法
  public int update(
  //表名稱
  String table,
  //和行列ContentValues鍵值對應(yīng)的key-value
  ContentValues values,
  //更新條件
  String whereClause,
  //更新條件數(shù)組
  String[] whereArgs
  );

  private void updateToTable(SQLiteDatabase db){
    //實(shí)例化ContentValues
    ContentValues cv= new ContentValues();
    cv.put("age",23);
    //更新條件
    String whereClause = "name = ?";
    //更新條件數(shù)組
    String[] whereArgs = new String[]{"wxq"};
    db.update("stutable",cv,whereClause,whereArgs);
  }

執(zhí)行完更新語句,導(dǎo)出數(shù)據(jù)庫文件,在可視化工具中查看

這里寫圖片描述

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

  public Cursor rawQuery(
  String sql,//查詢的SQL語句
  String[] selectionArgs//當(dāng)SQL語句中含有?,這里代表值
  );

  public void queryToTable(SQLiteDatabase db){
    String sql = "select * from stutable";//全查
    Cursor c = db.rawQuery(sql,null);//這里會(huì)返回一個(gè)Cursor(游標(biāo))對象
  }

這里寫圖片描述

使用SQLite的一個(gè)Demo(英雄管理系統(tǒng))

這里寫圖片描述 

主要操作數(shù)據(jù)庫的代碼

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  

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android編程之高效開發(fā)App的10個(gè)建議

    Android編程之高效開發(fā)App的10個(gè)建議

    這篇文章主要介紹了Android編程之高效開發(fā)App的10個(gè)建議,較為詳細(xì)的分析了Android開發(fā)中的常見問題與注意事項(xiàng),具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • Android 微信圖片分享功能

    Android 微信圖片分享功能

    本文主要介紹的是,Anroid 分享本地帶二維碼的圖片給微信好友和朋友圈的功能代碼,具有一定的參考價(jià)值,希望能幫助到有需要的朋友
    2016-07-07
  • Android IPC機(jī)制ACtivity綁定Service通信代碼實(shí)例

    Android IPC機(jī)制ACtivity綁定Service通信代碼實(shí)例

    這篇文章主要介紹了Android IPC機(jī)制ACtivity綁定Service通信代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • listview改變字體大小實(shí)例講解

    listview改變字體大小實(shí)例講解

    點(diǎn)擊字體,字體變大在本教程中將使用listview實(shí)現(xiàn),不會(huì)不懂的朋友可以參考下哈,希望對你有所幫助
    2013-05-05
  • Android學(xué)習(xí)筆記-保存文件(Saving Files)

    Android學(xué)習(xí)筆記-保存文件(Saving Files)

    這篇文章主要介紹了Android中保存文件(Saving Files)的方法,需要的朋友可以參考下
    2014-10-10
  • android studio更新gradle錯(cuò)誤構(gòu)建項(xiàng)目失敗的解決方法

    android studio更新gradle錯(cuò)誤構(gòu)建項(xiàng)目失敗的解決方法

    這篇文章主要介紹了android studio更新gradle錯(cuò)誤構(gòu)建項(xiàng)目失敗的解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • ViewPager2滑動(dòng)沖突解決方案

    ViewPager2滑動(dòng)沖突解決方案

    這篇文章主要介紹了ViewPager2滑動(dòng)沖突解決方案,幫助大家更好的進(jìn)行Android開發(fā),感興趣的朋友可以了解下
    2020-12-12
  • Android編程設(shè)計(jì)模式之訪問者模式詳解

    Android編程設(shè)計(jì)模式之訪問者模式詳解

    這篇文章主要介紹了Android編程設(shè)計(jì)模式之訪問者模式,詳細(xì)分析了訪問者模式的概念、功能、原理、使用場景并結(jié)合實(shí)例形式給出了Android訪問者模式的具體實(shí)現(xiàn)技巧與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2017-12-12
  • Android跨進(jìn)程傳遞大數(shù)據(jù)的方法實(shí)現(xiàn)

    Android跨進(jìn)程傳遞大數(shù)據(jù)的方法實(shí)現(xiàn)

    這篇文章主要介紹了Android跨進(jìn)程傳遞大數(shù)據(jù)的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Android去除煩人的默認(rèn)閃退Dialog

    Android去除煩人的默認(rèn)閃退Dialog

    這篇文章主要為大家詳細(xì)介紹了Android去除煩人的默認(rèn)閃退Dialog的相關(guān)方法,感興趣的小伙伴們可以參考一下
    2016-04-04

最新評論