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 數據庫。
 
3、SQLiteDatabase類:
SQLiteDatabase等同於JDBC中Connection和Statement的結合體。SQLiteDatabase既表明與數據庫的鏈接,又只能用於執行sql語句操做。
(一)、操做 SQLite 數據庫的步驟:【重要
一、建立 SQLiteDatabase 對象,它表明與數據庫的鏈接;
二、建立數據庫中的表(執行CREATE);
三、調用SQLiteDatabase 對象執行數據庫操做(執行DML);
四、對查詢後的結果集Cursor進行處理。
 
(二)、操做 SQLite 數據庫的步驟詳細講解:
一、建立 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)
【備註:】打開數據庫的參數:
一、參數中的path表明着數據庫的路徑(若是是在默認路徑/data/data/<package_name>/databases/下,則這裏只須要提供數據庫名稱);
二、factory表明着在建立Cursor對象時,使用的工廠類,若是爲null的話,則使用默認的工廠(這裏咱們能夠實現本身的工廠進行某些數據處理);
三、flags表明的是建立表時的一些權限設置,多個權限之間用|分隔:
  • OPEN_READONLY :表明的是以只讀方式打開數據庫(常量值爲:1)
  • OPEN_READWRITE:表明以讀寫方式打開數據庫(常量值爲:0)
  • CREATE_IF_NECESSARY:當數據庫不存在時建立數據庫
  • NO_LOCALIZED_COLLATORS:打開數據庫時,不根據本地化語言對數據庫進行排序(常量值爲:16)

 

代碼:mysql

 

//當數據庫存在時:

 

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語句中指定數據類型. 由於數據類型對於你和其餘的程序員交流, 或者你準備換掉你的數據庫引擎時能起到一個提示或幫助的做用。

 
 
2、調用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()
3、對查詢結果進行操做。當執行的是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、一、二、三、4這幾個結果。
    • 0: 表明null
    • 1:表明int
    • 2:表明float
    • 3:表明String
    • 4:表明blob
 
(四)、事務:【重要
        數據庫事務(Database Transaction) ,是指做爲單個邏輯工做單元執行的一系列操做,要麼完整地執行,要麼徹底地不執行。事務的目的是爲了保證數據的一致性。 
相關文章
相關標籤/搜索