Android入門:SQLite

來源:互聯網
上載者:User
文章目錄
  • 主要步驟:
  • 具體模板代碼如下:
  • 7.獲得記錄個數語句
一、SQLite介紹

SQLite是一個小型的內嵌於Android的資料庫;我們不需要引入驅動即可訪問它;

SQLite視覺化檢視:SQLite Expert Professional 3;

:http://www.kuaipan.cn/file/id_125546433842511875.htm

二、預備階段在本節中,我們會為操作資料庫做準備,即本節並不會實際操作資料庫,只是做一些前提步驟。下節中,我們將會對操作資料庫進行講解。
主要步驟:

(1)建立某個類(通常稱為DatabaseHelper)繼承SQLiteOpenHelper,並重寫以下三個方法:

  • public DatabaseHelper(Context context);//帶Context參數的建構函式,用來建立資料庫
  • public void onCreate(SQLiteDatabase db);//在建立資料庫時調用
  • public void onUpgrade(SQLiteDatabase db,int old,int newversion);  //資料庫版本更改時調用

(2)建立資料庫:

  • SQLiteOpenHelper helper = new new DatabaseOpenHelper(this.getContext());
  • SQLiteDatabase db = helper.getWritableDatabase();

(3)SQL語句:db.execSQL(String sql);

具體模板代碼如下:
import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;public class DatabaseHelper extends SQLiteOpenHelper{private static final String TAG = "DatabaseHelper";private static  int VERSION = 1;public DatabaseHelper(Context context) {super(context, "test.db", null, VERSION);}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL("create table 語句");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {Log.i(TAG, "版本更新...");}}

當建立資料庫時,database存放在/data/data/package/databases 目錄中;

問題1:測試資料庫是否能夠成功建立

如果你想要測試建立資料庫是否成功(你自己寫的建立語句是否正確),只需要在AndroidTestCase中寫入2行代碼:

  • SQLiteOpenHelper helper = new new DatabaseOpenHelper(this.getContext());
  • SQLiteDatabase db = helper.getWritableDatabase();

運行測試檔案後,即可在/data/data/package/databases中產生db檔案,export到本地電腦後,用SQLite視覺化檢視看下就可以知道。

問題2:如何在onUpdate中完成版本更新

如果想要在版本更新時更新資料庫,可以使用以下技巧:

  • db.execSQL("drop table if exists Table1");//如果存在Table1表,則刪除這張表,可以重複執行多次,將全部的表刪光。
  • onCreate(db);
    //再次建立資料庫的表結構

這樣能夠比較圓滿的完成版本更新。


三、增刪改查操作


本節將會講解到怎樣進行增刪改查,首先要注意的是:

  • db.execSQL() 是執行“修改操作SQL”的。
  • db.rawQuery() 是執行“查詢SQL”的。

這些CRUD操作都是封裝在SQLiteDatabase類中的。下面分別介紹:

1)獲得SQLiteDatabase對象

2)插入操作

3)刪除操作

4)查詢操作

5)更新操作

1.獲得SQLiteDatabase對象SQLiteOpenHelper helper = new DatabaseHelper(this.getContext());SQLiteDatabase db = helper.getWritableDatabase();SQLiteDatabase db = helper.getReadableDatabase(); //此函數內部其實也調用了getWritableDatabase()函數,即調用了此函數,也可以寫資料2.insert操作插入操作有三種方法完成:
  1. (一般)用原始SQL陳述式完成:即db.execSQL("INSERT 語句"); 很顯然,這種方法是有缺陷的,通常都是從使用者介面獲得一些資料,然後插入資料庫,因此很不靈活,組拼SQL語句是很累人的事。
  2. (推薦)將插入記錄用參數數組來表示:db.execSQL("insert into person(name,age) values(?,?)",new Object[]{"xiazdong",20}); 這裡類似於JDBC中的PreparedStatement,第一個參數是SQL語句,裡面可以有預留位置“?”,第二個參數是預留位置填入的內容組成的對象數組。
  3. (如果對SQL不熟悉,可以用這個)使用內建的insert函數:db.insert(String "tablename",String "nullColums", ContentValues values);  第一個參數是插入的表名;第二個參數是null值的列,即哪些列是有null值的,如果沒有列是null值,則直接在第二個參數處寫上null即可;第三列是存放資料的對象,資料庫的表中有很多的列,比如name,age,我們將列名作為key,對應的資料作為value,將<key,value>插入ContentValues即可。
舉例:
第一種方法:
db.insert("INSERT INTO person(name,age) VALUES('xiazdong',20);"); 第二種方法:
db.insert("INSERT INTO person(name,age) VALUES(?,?);", new Object[]{"xiazdong",20});
第三種方法:
ContentValues values = new ContentValues();values.put("name","xiazdong");values.put("age",20);db.insert("tablename",null,values);

有些人肯定想不通為什麼第一種方法很累人,這裡舉個例子:比如介面要求輸入一個name值,如果使用者輸入了a'b'c'e,那麼組拼的SQL語句需要對其中的單引號轉義,這比較麻煩,因為需要人工慢慢轉才行。3.delete操作Android提供了3種方法執行delete操作,其實和INSERT操作差不多。

  1. 原始SQL語句:db.execSQL("delete 語句");
  2. 帶預留位置SQL語句:db.execSQL("delete from person where id=?",new Object[]{id});
  3. 內建的delete函數:db.delete("tablename","id=?",new String[]{id+""}); 第一個參數用於指定表名,第二個參數寫出SQL中where後面的條件,第三個參數為參數字串數組,存放where子句中預留位置的資訊。

4.update語句Android提供了3種方法執行update操作,其實和INSERT操作差不多。
  1. 原始SQL語句:db.execSQL("update 語句");
  2. 帶預留位置SQL語句:db.execSQL("update person set age=? where name=?",new Object[]{30,"xiazdong"});
  3. 內建的update函數:db.update("tablename",ContentValues values,String"where 子句", new String[]{"where子句的參數"}); 第一個參數用於指定表名,第二個參數指定set子句更新的資料,第三個參數為where子句,第四個參數存放where子句中預留位置的資訊。
由於第三個方法比較難理解,因此給出一個例子:
ContentValues values = new ContentValues();
values.put("age",30);/*set子句*/
db.update("tablename",values,"name=?"/*where子句*/,new String[]{"xiazdong"}/*where子句參數*/);

5.query語句(1)

Cursor cursor = db.rawQuery("select * from person where name=?",new Object[]{"xiazdong"});while(cursor.moveToNext()){    //int index = cursor.getColumnIndex(String name);//根據name獲得索引    //String name = cursor.getString(int index);    //根據索引獲得值    String name = cursor.getString(cursor.getColumnIndex("name")); }

(2)Cursor cursor = db.query("tablename",null/*表示select * */,"name=?"/*where語句*/,new String[]{"xiazdong"},null/*group
by 語句*/
,null/*having 語句*/,null/*order by語句*/,null/*limit 語句*/);6.分頁語句Cursor cursor = db.rawQuery("select * from person limit ?,?",new Object[]{5,5});    //第一個5表示跳過5條記錄,下一個5為查詢結果的記錄個數while(cursor.moveToNext()){    String name = cursor.getString(cursor.getColumnIndex("name")); }

7.獲得記錄個數語句(1)

Cursor cursor = db.rawQuery("select count(*) from person", null);cursor.moveToFirst();int count = cursor.getInt(0);

(2)db.query("person",new String[]{"count(*)"},null,null,null,null,null,null);三、事務操作模板代碼如下:
db.beginTransaction();try{//事務操作db.setTransactionSuccessful();//此句必須要有,不然db.endTransaction()預設為復原}finally{db.endTransaction();}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.