Android 連接SQLite


 

Android的頁面顯示的數據主要是從數據庫中獲取數據的,android開發中使用的是SQLite數據庫。

SQLite的優點:

  1. 輕量級

    使用 SQLite 只需要帶一個動態庫,就可以享受它的全部功能, 而且那個動態庫的尺寸想當小。
  2. 獨立性

    SQLite 數據庫的核心引擎不需要依賴第三方軟件,也不需要所謂的“安裝”。
  3. 隔離性

    SQLite 數據庫中所有的信息(比如表、視圖、觸發器等) 都包含在一個文件夾內,方便管理和維護。
  4. 跨平台

    SQLite 目前支持大部分操作系統,不至電腦操作系統更在眾多的手機系統 也是能夠運行,比如:Android。
  5. 多語言接口

    SQLite 數據庫支持多語言編程接口。
  6. 安全性

    SQLite 數據庫通過數據庫級上的獨占性和共享鎖來實現獨立事務處理。 這意味着多個進程可以在同一時間從同一數據庫讀取數據, 但只能有一個可以寫入數據。

 在Android中連接SQLite需要先創建一個類,並且這個類extends SQLiteOpenHelper,代碼如下:

  

package com.example.sql;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class MySQLDatabase extends SQLiteOpenHelper {
    private static final String db_name = "myDatabse";//自定義的數據庫名;
    private static final int version =1;//版本號
    public MySQLDatabase(Context context) {
        super(context, db_name, null, version);
        
    }
//該方法會自動調用,首先系統會檢查該程序中是否存在數據庫名為‘myDatabase’的數據庫,如果存在則不會執行該方法,如果不存在則會執行該方法。
    @Override
    public void onCreate(SQLiteDatabase arg0) {
        String  sql ="create table wx_user(" +
                "id int primary key," +
                "name varchar(30)," +
                "tou varchar(20)," +
                "content varchar(50)," +
                "dateTime varchar(30)" +
                ")";
        arg0.execSQL(sql);
        
    }

    @Override
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
        // TODO Auto-generated method stub
        
    }
    
}

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

onCreate(SQLiteDatabase db)
創建數據庫時調用

 

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

 

getReadableDatabase()
創建或打開一個只讀數據庫

 

getWritableDatabase()
創建或打開一個讀寫數據庫

這里創建了數據庫類,接下來是往數據庫中插入數據;

 

//實例化剛才上面我們創建的那個類    
MySQLDatabase mySQLDatabase = new MySQLDatabase(MainActivity.this);
/*在通過getReadableDatabase()方法
    或者通過getWritableDatabase()
獲得SQLDatabse類的對象;通過SQLDatabase類的對象來對數據進行操作;*/
        SQLiteDatabase sqlDatabase =  mySQLDatabase.getReadableDatabase();
        

 

SQLDatabase類的常用方法:

  • (long) insert(String table,String nullColumnHack,ContentValues values)

  • (int) delete(String table,String whereClause,String[] whereArgs)

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

  • (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注入)
  • (void) execSQL(String sql)//這個是執行SQL語句(sql字符串可以是select,delete,或者insert,update中的任意語句)

 

//往數據庫中插入數據的代碼,在這里我使用的是execSQL(sql);
for(int i=0;i<20;i++){
            String sql = "insert into wx_user(id,name,tou,content,dateTime) values("+i+",'張校花"+i+"','aa','你今天會被打','11月19日')";
            sqlDatabase.execSQL(sql);
}

往數據庫中參入數據之后,我們再將數據庫中的數據取出來看看;我們需要先創建一個實體類;

package com.example.entiy;

public class unserInFo {
    
    private int id;
    private String name;
    private String dateTime;
    private String tou;
    private String content;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDateTime() {
        return datetime;
    }
    public void setDateTime(String dateTime) {
        this.dateTime= dateTime;
    }
    public String getTou() {
        return tou;
    }
    public void setTou(String tou) {
        this.tou = tou;
    }
    
    @Override
    public String toString() {
        return "unserInFo [id="+id+,"name=" + name + ", dataTime=" + dataTime+ ", tou="
                + tou+ "]";
    }
    public unserInFo() {
        super();
        // TODO Auto-generated constructor stub
    }
    
}

 

獲取數據

//定義一個集合用來存放所有的結果
List<unserInFo> user = new ArrayList<unserInFo>();
//通過游標來獲取表wx_user的信息,
Cursor c=sqlDatabase.query("wx_user", null, null, null, null, null, null);
        //先判斷是否有第一條數據(ic.moveToFirst()將游標移到第一條數據,如果沒有第一條數據則返回false,否則返回true)
       if(c.moveToFirst()){
                //通過getCount()來決定循環的次數getCount()是游標的總數量。
        for (int i = 0; i<c.getCount();i++) {
            unserInFo uif = new unserInFo();
            
            //將游標移動到下一條數據
            c.moveToNext();
            uif.setId(c.getInt(c.getColumnIndex("id")));
            uif.setLastdate(c.getString(c.getColumnIndex("dateTime")));
            uif.setName(c.getString(c.getColumnIndex("name")));
            uif.setZhao(c.getString(c.getColumnIndex("tou")));
            uif.setContent(c.getString(c.getColumnIndex("content")));
            user.add(uif);
            
        }
}    
//最后數據庫中獲取到的數據就全部存放到user集合中了,我們只需要遍歷user就能顯示數據了。

 


免責聲明!

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



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