Android之SQLite資料庫篇

来源:http://www.cnblogs.com/qq1272850043/archive/2016/11/30/6118413.html
-Advertisement-
Play Games

一、SQLite簡介 Google為Andriod的較大的數據處理提供了SQLite,他在數據存儲、管理、維護等各方面都相當出色,功能也非常的強大。 二、SQLite的特點 1.輕量級使用 SQLite 只需要帶一個動態庫,就可以享受它的全部功能,而且那個動態庫的尺寸想當小。2.獨立性SQLite ...


一、SQLite簡介 

Google為Andriod的較大的數據處理提供了SQLite,
他在數據存儲、管理、維護等各方面都相當出色,
功能也非常的強大

二、SQLite的特點

1.輕量級
使用 SQLite 只需要帶一個動態庫,就可以享受它的全部功能,
而且那個動態庫的尺寸想當小。
2.獨立性
SQLite 資料庫的核心引擎不需要依賴第三方軟體,也不需要所謂的“安裝”。
3.隔離性
SQLite 資料庫中所有的信息(比如表、視圖、觸發器等)
都包含在一個文件夾內,方便管理和維護。
4.跨平臺
SQLite 目前支持大部分操作系統,不至電腦操作系統更在眾多的手機系統
也是能夠運行,比如:Android。
5.多語言介面
SQLite 資料庫支持多語言編程介面。
6.安全性
SQLite 資料庫通過資料庫級上的獨占性和共用鎖來實現獨立事務處理。
這意味著多個進程可以在同一時間從同一資料庫讀取數據,
但只能有一個可以寫入數據。

三、SQLite的數據類型

·關於SQLite的數據類型:

  -SQLite支持NULL、INTEGER、REAL、TEXT和BLOB數據類型

  -依次代表:空值、整型值、浮點值、字元串值、二進位對象

·動態數據類型(弱引用)

  -當某個值插入到資料庫時,SQLite將會檢查它的類型,如果該類型與關聯的列不匹配,

  SQLite則會嘗試將該值轉換成該列的類型,如果不能轉換,則該值將作為本身的類型存儲

四、SQLiteDatabase類

·SQLiteDatabase類

  -提供創建、刪除、執行的SQL命令,並執行其他常見的資料庫管理任務的方法

  -每個程式的資料庫名字是唯一的

·SQLiteDatabase類為我們提供了很多種方法,而較常用的方法如下

  (int) delete(String table,String whereClause,String[] whereArgs)
  刪除數據行的便捷方法

  (long) insert(String table,String nullColumnHack,ContentValues values)
  添加數據行的便捷方法

  (int) update(String table, ContentValues values, String whereClause, String[] whereArgs)
  更新數據行的便捷方法

  (void) execSQL(String sql)
  執行一個SQL語句,可以是一個select或其他的sql語句

  (void) close()
  關閉資料庫

  (Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
  查詢指定的數據表返回一個帶游標的數據集

  (Cursor) rawQuery(String sql, String[] selectionArgs)
  運行一個預置的SQL語句,返回帶游標的數據集(與上面的語句最大的區別就是防止SQL註入)

·數據的添加

 

//使用insert方法
ContentValues cv = new ContentValues();
//實例化一個ContentValues用來裝載待插入的數據
cv.put("username","Jack Johnson");//添加用戶名
cv.put("password","iLovePopMusic"); 

//添加密碼
db.insert("user",null,cv);//執行插入操作


使用execSQL方式來實現
String sql = "insert into user(username,password) values ('Jack Johnson','iLovePopMuisc');//插入操作的SQL語句
db.execSQL(sql);//執行SQL語句

 

·數據的刪除

//使用delete方法
String whereClause = "username=?";//刪除的條件
String[] whereArgs = {"Jack Johnson"};//刪除的條件參數
db.delete("user",whereClause,whereArgs);//執行刪除


String sql = "delete from user where username='Jack Johnson'";//刪除操作的SQL語句
db.execSQL(sql);//執行刪除操作

·數據的修改

//使用update方法
ContentValues cv = new ContentValues();//實例化ContentValues
cv.put("password","iHatePopMusic");//添加要更改的欄位及內容
String whereClause = "username=?";//修改條件
String[] whereArgs = {"Jack Johnson"};//修改條件的參數
db.update("user",cv,whereClause,whereArgs);//執行修改

String sql = "update [user] set password = 'iHatePopMusic' where username='Jack Johnson'";//修改的SQL語句
db.execSQL(sql);//執行修改

·數據的查詢

通過query實現查詢的
  public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

  table:表名稱
  colums:列名稱數組
  selection:條件子句,相當於where
  selectionArgs:條件語句的參數數組
  groupBy:分組
  having:分組條件
  orderBy:排序類
  limit:分頁查詢的限制
  Cursor:返回值,相當於結果集ResultSet

 

游標(Cursor)
  getCount()總記錄條數
  isFirst()判斷是否第一條記錄
  isLast()判斷是否最後一條記錄
  moveToFirst()移動到第一條記錄
  moveToLast()移動到最後一條記錄
  move(int offset)移動[是指偏移量而不是指移到指定位置]
  moveToNext()移動到嚇一條記錄
  moveToPrevious()移動到上一條記錄
  getColumnIndex(String columnName)獲得指定列索引的int類型值

 

//游標(Cursor)
Cursor c = db.query("user",null,null,null,null,null,null);//查詢並獲得游標
if(c.moveToFirst()){//判斷游標是否為空
    for(int i=0;i<c.getCount();i++){
        c.moveToNext();
        String username = c.getString(c.getColumnIndex("username");
        String password = c.getString(c.getColumnIndex("password"));
    }
//rawQuery實現的帶參數查詢

Cursor c = db.rawQuery("select * from user where username=?",new Stirng[]{"Jack Johnson"});
if(cursor.moveToFirst()) {
    String password = c.getString(c.getColumnIndex("password"));
}

四、SQLiteOpenHelper

·SQLiteOpenHelper

  -SQLiteOpenHelper是SQLiteDatabase的一個幫助類,
  用來管理資料庫的創建和版本的更新。
  一般是建立一個類繼承它,
  並實現它的onCreate和onUpgrade方法。


  -onCreate(SQLiteDatabase db)
  創建資料庫時調用

  -onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion)
  版本更新時調用

  -getReadableDatabase()
  創建或打開一個只讀資料庫

  -getWritableDatabase()
  創建或打開一個讀寫資料庫

·創建SQLiteOpenHelper類

public class MyDatabaseOpenHelper extends SQLiteOpenHelper {

    private static final String db_name = "mydata.db"; // 資料庫名稱
    private static final int version = 1; // 資料庫版本
  
    public MyDatabaseOpenHelper(Context context) {
        super(context, db_name, null, version);
    }

    //該方法沒有資料庫存在才會執行
    public void onCreate(SQLiteDatabase db) {
     //沒有資料庫列印日記
        Log.i("Log","沒有資料庫,創建資料庫");
     //建表語句
        String sql_message="create table t_message (id int primary key,userName varchar(50),lastMessage varchar(50),datetime varchar(50))";
        //執行建表語句
        db.execSQL(sql_message);
    }

    //資料庫存更新才會執行
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
      Log.i("updateLog","資料庫更新了!");
  }
}

·調用了SQLiteOpenHelper類的getWritableDatabase()方法來獲取一個資料庫

public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    DatabaseOpenHelper helper = new DatabaseOpenHelper(MainActivity.this);
    //獲取一個可寫的資料庫
    SQLiteDatabase db = helper.getWritableDatabase();

  }

}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 學習到現在的主要問題是沒有進行例子的完美歷練,說白了,就是沒動手親自的試試,寫寫對應的代碼,理解一下主要的設計思想,這個應該是學習設計模式我最重要的地方,那麼現在針對之前學習的設計模式做一個總結和回顧吧 0.設計模式分析規律 在講解這個設計模式之前,我們應該學習到設計的原則,1.分析程式中變化的位置 ...
  • 看到一些程式都有這種寫法,也不知道原創者是誰了。先在博客保存下。 在.m文件 在.h文件 ...
  • 記錄下一些不常用的技巧,以防忘記,複製用。 1、獲取當前的View在Window的frame: 2、UIImageView 和UILabel 等一些控制項,需要加這句才能setCorn 3、手機上的沙盒路徑要加"Documents",不然存儲寫入失敗!mac上不用! 4、圖片拉伸不失真,如聊天軟體對話 ...
  • 1、登錄developer.apple.com,查看到期時間 2、到期提醒通知,點擊Renew Membership續費(一般提前一個月提醒續費) 3、個人開發者賬號續費需要支付 688人民幣/年(99刀),企業賬號則需要299刀 4、Review your purchase details核查訂單 ...
  • init.rc腳本是由Android中linux的第一個用戶級進程init進行解析的。 init.rc 文件並不是普通的配置文件,而是由一種被稱為“Android初始化語言”(Android Init Language,這裡簡稱為AIL)的腳本寫成的文件。 該文件在ROM中是只讀的,即使有了root ...
  • 在IOS5之後,蘋果為避免根據UDID獲得用戶的信息,而禁止使用uniqueIdentifier獲得UDID,但是仍有些應用需要根據UDID區分設備 有一個系統的庫IOKit.framework可以獲得設備的唯一標識 但是這個方法只能獲得模擬器上的UDID很坑爹啊 那還有另外的方法獲得設備的信息,那 ...
  • 原文標題:Variables in Kotlin, differences with Java. var vs val (KAD 02) 作者:Antonio Leiva 時間:Nov 28, 2016 原文鏈接:http://antonioleiva.com/variables-kotlin/ K ...
  • 一、寫在前面: 本次我們來講解一下Android應用中三個適配器:BaseAdapter、SimpleAdapter和ArrayAdapter。其中常見的是BaseAdapter,也是個人推薦使用的適配器。 二、深入瞭解: 1.什麼是適配器? 適配器:在安卓中,顧名思義就是把數據變成符合界面風格的形 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...