Android之SQLite資料庫篇,androidsqlite

來源:互聯網
上載者:User

Android之SQLite資料庫篇,androidsqlite

一、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();//執行個體化ContentValuescv.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();  }}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.