android SqLitez綜述

來源:互聯網
上載者:User

     android SqLitez綜述
 
背景
       SQLite 是一個非常流行的嵌入式資料庫,它提供了一個清爽的 SQL 介面,相當小的記憶體佔用和高速的響應,更 Happy 的是他還是免費的,大家都可以盡情的使用,很多牛叉的公司(諸如Adobe,Apple,Google,Sun,Symbian ),開源項目( Mozilla,PHP,Python )都在產品中裝配 SQLite.
 
       Android 中, SQLite 是被整合於 Android runtime ,每個 Android 應用程式都可以歡快的使用 SQLite 資料庫,如果你熟悉 JDBC ,那麼這個過程就更安逸了。
SQLite3 特徵
和傳統關聯式資料庫比較
有的:
       Sql 語句:      SELECT INSERT UPDATE
                            CREATE DROP
       資料類型:
              不區分大小寫
              TEXT     文本
       NUMERIC 數值
       INTEGER 整型
       REAL     小數
       NONE     無類型
沒有的:
       FOREIGN KEY 外鍵約束
    RIGHT OUTER JOIN 和 FULL OUTER JOIN
    ALTER TABLE
開始動手
動手之前,確認你的機器中已經配置好如下環境:
       Android 開發環境(怎麼配置問 Google ,有很多)
       本文檔適用環境 Android1.0
1, 建庫
       方式一:命令列方式(適合調試用)
              可以使用 adb shell 進入裝置後台,命令列方式手動建立,步驟如下:    
              Eclipse 中啟動模擬器之後, cmd 下輸入進入裝置 Linux 控制台
              D:\>adb shell
              之後進入應用 data 目錄
              # cd /data/data
              ls 列表目錄,查看檔案,找到你的項目目錄並進入
              查看有無 databases 目錄,如果沒有,則建立一個
              # mkdir databases
              cd databases 進入並建立資料庫
              # sqlite3 friends.db
              sqlite3 friends.db
              SQLite version 3.5.9
              Enter ".help" for instructions
              sqlite>
              ctrl+d 退出 sqlite 提示符 ls 列表目錄會看到有一個檔案被建立 friends.db
              他就是 SQLite 的庫檔案
              # ls
              ls
              friends.db
       方式二:編碼方式(使用更多)
              android.content.Context 中提供了函數 , 註: Activity 是 Context 的子類
              openOrCreateDatabase () 來建立我們的資料庫
              db = context .openOrCreateDatabase(
              String DATABASE_NAME , int Context. MODE_PRIVATE , null );
       String DATABASE_NAME   資料庫的名字
       Int  MODE    操作模式   Context.MODE_PRIVATE 等
       CursorFactory 指標工廠 ,本例中傳入 null ,暫不用
            
            
2, 建表
       命令列方式
       # sqlite3
       sqlite> create table widgets (id integer primary key autoincrement,name text);
3,  插入資料
       命令列 增加,查詢資料
       sqlite> insert into widgets values(null,'tom');
       insert into widgets values(null,'tom');
       sqlite> select * from widgets;
       select * from widgets;
       1|tom
       sqlite>
     
       API 方式
     
 
Java代碼 
package org.imti; 
 
import android.app.Activity; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
 
/**
 * SQLite Demo
 * 
 * 供Activity私人訪問的資料庫 沒有使用ContentProvider 方式 增加 查詢資料
 * 
 * @author daguangspecial@gmail.com
 * 
 */ 
public class DbDemo extends Activity { 
    EditText inputTxt; 
    Button btnAdd; 
    Button btnViewAll; 
    TextView viewAll; 
 
    DBHelper db; 
 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        // TODO Auto-generated method stub 
        super.onCreate(savedInstanceState); 
        this.setContentView(R.layout.dbdemo); 
        // 初始化UI 
        btnAdd = (Button) findViewById(R.id.btnAdd); 
        btnViewAll = (Button) findViewById(R.id.btnViewAll); 
        viewAll = (TextView) findViewById(R.id.viewAll); 
        inputTxt = (EditText) findViewById(R.id.txtInput); 
        // 初始化DB 
        db = new DBHelper(this); 
        // 初始化監聽 
        OnClickListener listener = new OnClickListener() { 
 
            public void onClick(View v) { 
                if (v.getId() == R.id.btnAdd) { 
                    // 增加 
                    db.save(inputTxt.getText().toString()); 
                                       db.close(); 
                } else if (v.getId() == R.id.btnViewAll) { 
                    // 瀏覽所有資料 
                    Cursor cur = db.loadAll(); 
                    StringBuffer sf = new StringBuffer(); 
                    cur.moveToFirst(); 
                    while (!cur.isAfterLast()) { 
                        sf.append(cur.getInt(0)).append(" : ").append( 
                                cur.getString(1)).append("\n"); 
                        cur.moveToNext(); 
                    } 
                                      db.close(); 
                    viewAll.setText(sf.toString()); 
                } 
            } 
        }; 
        btnAdd.setOnClickListener(listener); 
        btnViewAll.setOnClickListener(listener); 
    } 
 

 
 
 
 
Java代碼 
package org.imti; 
 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.util.Log; 
 
/**
 * 資料庫操作工具類
 * 
 * @author daguangspecial@gmail.com
 * 
 */ 
public class DBHelper { 
    private static final String TAG = "DBDemo_DBHelper";// 調試標籤 
 
    private static final String DATABASE_NAME = "dbdemo.db";// 資料庫名 
    SQLiteDatabase db; 
    Context context;//應用環境內容   Activity 是其子類 
 
    DBHelper(Context _context) { 
        context = _context; 
        //開啟資料庫 
          
        db = context.openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE,null); 
        CreateTable(); 
        Log.v(TAG, "db path=" + db.getPath()); 
    } 
 
    /**
     * 建表
     * 列名 區分大小寫?
     * 都有什麼資料類型?
     * SQLite 3 
     *  TEXT    文本
        NUMERIC 數值
        INTEGER 整型
        REAL    小數
        NONE    無類型
     * 查詢可否發送select ?
     */ 
    public void CreateTable() { 
        try { 
            db.execSQL("CREATE TABLE t_user (" + 
                    "_ID INTEGER PRIMARY KEY autoincrement," 
                    + "NAME TEXT"  
                    + ");"); 
            Log.v(TAG, "Create Table t_user ok"); 
        } catch (Exception e) { 
            Log.v(TAG, "Create Table t_user err,table exists."); 
        } 
    } 
    /**
     * 增加資料
     * @param id
     * @param uname
     * @return
     */ 
    public boolean save(String uname){ 
        String sql=""; 
        try{ 
            sql="insert into t_user values(null,'"+uname+"')"; 
            db.execSQL(sql); 
            Log.v(TAG,"insert Table t_user ok"); 
            return true; 
             
        }catch(Exception e){ 
            Log.v(TAG,"insert Table t_user err ,sql: "+sql); 
            return false; 
        } 
    } 
    /**
     * 查詢所有記錄
     * 
     * @return Cursor 指向結果記錄的指標,類似於JDBC 的 ResultSet
     */ 
    public Cursor loadAll(){ 
         
        Cursor cur=db.query("t_user", new String[]{"_ID","NAME"}, null,null, null, null, null); 
         
        return cur; www.2cto.com
    } 
      public void close(){ 
        db.close(); 
    } 

作者:chang_xing

聯繫我們

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