Android:Sqlitedatabase學習小結

來源:互聯網
上載者:User

  今天剛剛學習完Sqlite資料庫的基礎知識,隨即把學到的東西記錄下來,以便隨後查閱,以下是自己對Sqlite資料庫的小結:
1.Sqlite簡介
       Sqlite是一款輕型的資料庫,它包含在一個相對小的C庫中,它的設計目標是嵌入式的,由於它佔用資源非常少,可能只需要幾百K的記憶體就可以了,並且支援Windows/Linux/Unix等等主流的作業系統,同時可以和很多種程式語言相結合,比如:C#/Java/php等,所以在嵌入式裝置中特別受歡迎,這一點也正好符合android的開發要求,所以在Android開發中經常要用到該資料庫。
2.Sqlite內部結構
       在內部,Sqlite有以下幾個組件組成:SQL編譯器、核心、後端以及附件。Sqlite通過利用虛擬機器和虛擬資料庫引擎,是調試、修改和擴充Sqlite的核心變得更加方便,所有SQL語句被編譯成易讀的、可以在Sqlite虛擬機器中執行的程式集。其結構如:
                                                                                                    
                                                                                                                                    Sqlite內部結構圖
 3.android中Sqlite的使用方法
        在Android中要想使用Sqlite資料庫,首先應該建立一個類繼承SQLiteOpenHelper類,我們把這個類命名為DatabaseHelper,它作為一個訪問Sqlite的助手類,提供了兩方面的功能:
        第一    getReadableDatabase()/getWritableDatabase()可以獲得SQLiteDatabase對象,通過該對象可以對資料庫進行操作;
        第二    提供OnCreate()和onUpgrade()兩個回呼函數,允許我們在建立和升級資料庫時,進行自己的操作;
執行個體代碼如下:
[java]
public class DatabaseHelper extends SQLiteOpenHelper { 
     
    private static final int VERSION = 1; 
    //在SQLiteOepnHelper的子類當中,必須有該建構函式 
    public DatabaseHelper(Context context, String name, CursorFactory factory, 
            int version) { 
        //必須通過super調用父類當中的建構函式 
        super(context, name, factory, version); 
        // TODO Auto-generated constructor stub 
    } 
    public DatabaseHelper(Context context,String name){ 
        this(context,name,VERSION); 
    } 
    public DatabaseHelper(Context context,String name,int version){ 
        this(context, name,null,version); 
    } 
 
    //該函數是在第一次建立資料庫的時候執行,實際上是在第一次得到SQLiteDatabse對象的時候,才會調用這個方法 
    @Override 
    public void onCreate(SQLiteDatabase db) { 
        // TODO Auto-generated method stub 
        System.out.println("create a Database"); 
        //execSQL函數用於執行SQL語句 
        db.execSQL("create table user(id int,name varchar(20))"); 
    } 
 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
        // TODO Auto-generated method stub 
        System.out.println("update a Database"); 
    } 

       註:在繼承SQLiteOpenHelper類時,必須要有public DatabaseHelper(Context context, String name, CursorFactory factory,int version) 這個構造方法。
       在定義好DatabaseHelper這個助手類後,就可以使用這個類建立Sqlite資料庫,並對資料庫進行操作了,下面通過一個定義好的Activity進行說明,代碼如下:
[java]
public class SQLiteActivity extends Activity { 
    /** Called when the activity is first created. */ 
    private Button createButton; 
    private Button insertButton; 
    private Button updateButton; 
    private Button updateRecordButton; 
    private Button queryButton; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        createButton = (Button)findViewById(R.id.createDatabase); 
        updateButton = (Button)findViewById(R.id.updateDatabase); 
        insertButton = (Button)findViewById(R.id.insert); 
        updateRecordButton = (Button)findViewById(R.id.update); 
        queryButton = (Button)findViewById(R.id.query); 
        createButton.setOnClickListener(new CreateListener()); 
        updateButton.setOnClickListener(new UpdateListener()); 
        insertButton.setOnClickListener(new InsertListener()); 
        updateRecordButton.setOnClickListener(new UpdateRecordListener()); 
        queryButton.setOnClickListener(new QueryListener()); 
    } 
    class CreateListener implements OnClickListener{ 
        @Override 
        public void onClick(View v) { 
            //建立一個DatabaseHelper對象 
            DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db"); 
            //只有調用了DatabaseHelper對象的getReadableDatabase()方法,或者是getWritableDatabase()方法之後,才會建立,或開啟一個資料庫 
            SQLiteDatabase db = dbHelper.getReadableDatabase(); 
        } 
    } 
    class UpdateListener implements OnClickListener{ 
 
        @Override 
        public void onClick(View v) { 
            DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2); 
            SQLiteDatabase db = dbHelper.getReadableDatabase(); 
        } 
         
    } 
    class InsertListener implements OnClickListener{ 
 
        @Override 
        public void onClick(View v) { 
            //產生ContentValues對象 
            ContentValues values = new ContentValues(); 
            //想該對象當中插入索引值對,其中鍵是列名,值是希望插入到這一列的值,值必須和資料庫當中的資料類型一致 
            values.put("id", 1); 
            values.put("name","zhangsan"); 
            DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2); 
            SQLiteDatabase db = dbHelper.getWritableDatabase(); 
            //調用insert方法,就可以將資料插入到資料庫當中 
            db.insert("user", null, values); 
        } 
    } 
    //更新操作就相當於執行SQL語句當中的update語句 
    //UPDATE table_name SET XXCOL=XXX WHERE XXCOL=XX... 
    class UpdateRecordListener implements OnClickListener{ 
 
        @Override 
        public void onClick(View arg0) { 
            // TODO Auto-generated method stub 
            //得到一個可寫的SQLiteDatabase對象 
            DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db"); 
            SQLiteDatabase db = dbHelper.getWritableDatabase(); 
            ContentValues values = new ContentValues(); 
            values.put("name", "zhangsanfeng"); 
            //第一個參數是要更新的表名 
            //第二個參數是一個ContentValeus對象 
            //第三個參數是where子句 
            db.update("user", values, "id=?", new String[]{"1"}); 
        } 
    } 
    class QueryListener implements OnClickListener{ 
 
        @Override 
        public void onClick(View v) { 
            System.out.println("aaa------------------"); 
            Log.d("myDebug", "myFirstDebugMsg"); 
             
            DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db"); 
            SQLiteDatabase db = dbHelper.getReadableDatabase(); 
            Cursor cursor = db.query("user", new String[]{"id","name"}, "id=?", new String[]{"1"}, null, null, null); 
            while(cursor.moveToNext()){ 
                String name = cursor.getString(cursor.getColumnIndex("name")); 
                System.out.println("query--->" + name); 
            } 
        } 
    } 
     

     在上例中可以看出,在建立或者操作資料庫前,都要通過DatabaseHelpe類中的getReadbleDatabase()和getWritbleDatabase()兩個方法在建立需要的資料庫,前者是建立一個唯讀資料庫,後者是建立一個可寫資料庫。

聯繫我們

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