SQLiteDatabase淺談


(一)、簡介:
  1. Android通過 SQLite 數據庫引擎來實現結構化數據的存儲。在一個數據庫應用程序中,任何類都可以通過名字對已經創建的數據庫進行訪問,但是在應用程序之外就不可以。
  2. SQLite 數據庫是一種用C語言編寫的嵌入式數據庫,它是一個輕量級的數據庫,最初為嵌入式設計的。它是在一些基礎簡單的語句處理上要比oracle / mysql快很多,而且其對內存的要求很低,在內存中只需要幾百KB的存儲空間。這是Android中采用 SQLite 數據庫的主要原因。
  3. SQLite 支持事務處理功能。Transaction
  4. SQLite 處理速度比MySQL等著名的開源數據庫系統更快。它沒有服務器進程。 
  5. SQLite 通過文件保存數據庫,該文件是跨平台的,可以自由復制。一個文件就是一個數據庫。數據庫名即文件名。
  6. JDBC會消耗太多系統資源,所以JDBC對於手機並不合適,因此Android提供了新的API來使用 SQLite 數據庫。
 
三、SQLiteDatabase類:
SQLiteDatabase等同於JDBC中Connection和Statement的結合體。SQLiteDatabase既代表與數據庫的連接,又只能用於執行sql語句操作。
(一)、操作 SQLite 數據庫的步驟:【重要
1、創建 SQLiteDatabase 對象,它代表與數據庫的連接;
2、創建數據庫中的表(執行CREATE);
3、調用SQLiteDatabase 對象執行數據庫操作(執行DML);
4、對查詢后的結果集Cursor進行處理。
 
(二)、操作 SQLite 數據庫的步驟詳細講解:
1、創建 SQLite 數據庫對象:SQLiteDatabase對象代表一個數據庫。 SQLiteDatabase提供了幾個靜態方法來打開一個文件對應的數據庫。
  • static  SQLiteDatabase  openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags, DatabaseErrorHandler errorHandler)
  • static  SQLiteDatabase  openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags)
  • static  SQLiteDatabase  openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler)
  • static  SQLiteDatabase  openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)
【備注:】打開數據庫的參數:
1、參數中的path代表着數據庫的路徑(如果是在默認路徑/data/data/<package_name>/databases/下,則這里只需要提供數據庫名稱);
2、factory代表着在創建Cursor對象時,使用的工廠類,如果為null的話,則使用默認的工廠(這里我們可以實現自己的工廠進行某些數據處理);
3、flags代表的是創建表時的一些權限設置,多個權限之間用|分隔:
  • OPEN_READONLY :代表的是以只讀方式打開數據庫(常量值為:1)
  • OPEN_READWRITE:代表以讀寫方式打開數據庫(常量值為:0)
  • CREATE_IF_NECESSARY:當數據庫不存在時創建數據庫
  • NO_LOCALIZED_COLLATORS:打開數據庫時,不根據本地化語言對數據庫進行排序(常量值為:16)

 

代碼:

 

//當數據庫存在時:

 

String path = SDCardHelper.getSDCardRoot() + File.separator + "steven" + File.separator + "android_manual.db";

 

SQLiteDatabase db = SQLiteDatabase.openDatabase(path, null,SQLiteDatabase.OPEN_READWRITE);

 

Cursor cursor = db.rawQuery("select * from android_basic order by id desc limit 0 , 15",null);

 


 

//當數據庫不存在時:

 

String path = SDCardHelper.getSDCardRoot() + File.separator + "steven" + File.separator + "words.db";

 

SQLiteDatabase  db = SQLiteDatabase.openOrCreateDatabase(path, null);

 

db.execSQL("create table tb_words (_id integer primary key autoincrement ,english , chinese)");


創建表:
SQLiteDatabase  db = SQLiteDatabase.openOrCreateDatabase(path, null);

db.execSQL("create table tb_words (_id integer primary key autoincrement ,english , chinese)");
String path = SDCardHelper.getSDCardRoot() + File.separator + "steven" + File.separator + "words.db";


主意:
一。SQLite的數據類型?
        首先你會接觸到一個讓你驚訝的名詞: Typelessness(無類型)。其實SQLite是無類型的。這意味着你可以保存任何類型的數據到數據庫表的任何列中, 無論這列聲明的數據類型是什么。對於SQLite來說對字段不指定類型是完全有效的。如:create table dict(_id integer primary key autoincrement , word , detail);
       
    注意:這里一定要注意,SQLite數據庫在一種情況下是要求類型匹配的,當我們建表是如create table table1(id integer primary key),sqlite對應一位integer primary key的列值允許你存儲64位的整數。必須是INTEGER PRIMARY KEY  AUTOINCREMENT。
        誠然SQLite允許忽略數據類型, 但是仍然建議在你的Create Table語句中指定數據類型. 因為數據類型對於你和其他的程序員交流, 或者你准備換掉你的數據庫引擎時能起到一個提示或幫助的作用。

 
 
二、調用SQLiteDatabase 對象的方法執行數據庫操作:【重要
  1. execSQL(String sql , Object[] args)    執行帶占位符的sql語句(update,insert,delete語句)
  2. rawQuery( String sql , String[] args )   執行帶占位符的sql查詢(select語句)
  3. beginTransaction()    開始事務
  4. endTransaction()   結束事務
【備注:】除了以上重要的四個方法外,Android考慮到不熟悉sql語句的開發者,提供了進一步封裝后的一系列方法。但是以下這幾個方法參數眾多,平時不建議使用,但是一定也要掌握,在ContentProvider中會有類似的方法,要注意區分。
  1. insert()
  2. update()
  3. delete()
  4. query()
三、對查詢結果進行操作。當執行的是select語句,返回一個Cursor對象。Cursor類似於JDBC中的ResultSet結果集,內置移動游標等方法:
  • move(int offset)    按偏移量來移動
  • moveToFirst()   將記錄指針移動到第一行
  • moveToLast ()   將記錄指針移動到最后一行
  • moveToNext ()      將記錄指針移動到下一行
  • moveToPosition(int position)       將記錄指針移動到指定的一行
  • moveToPrevious()      將記錄指針移動到上一行
  • getCount()    返回Cursor的行數
  • getColumnName(int index)    根據列的索引返回其相應的列名稱
  • getColumnIndex(String name)    根據列的名字返回其相應的索引
  • getColumnNames()       返回一個保存有所有列名稱的字符串數組
  • getColumnCount()    返回列的總數
  • close()   關閉游標結果集,釋放資源
  • getType()    獲取字段的數據類型。分別有0、1、2、3、4這幾個結果。
    • 0: 代表null
    • 1:代表int
    • 2:代表float
    • 3:代表String
    • 4:代表blob
 
(四)、事務:【重要
        數據庫事務(Database Transaction) ,是指作為單個邏輯工作單元執行的一系列操作,要么完整地執行,要么完全地不執行。事務的目的是為了保證數據的一致性。 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM