Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android入門教程 SQLite的用法

Android入門教程 SQLite的用法

編輯:關於Android編程

一、為什麼要用SQLite

前面的博客中已經講過了asper_success/article/details/52670100">sharedpreferences的用法,大家也都看到了,sharedpreferences使用簡單,但同時也有局限性,因為它是xml存儲形式的,所以在排序、篩選等方面略顯不足。

提到排序、篩選、比較等需求,我們自然而然會想到數據庫,這也正是android自帶數據庫——SQLite的來由。

二、SQLite是什麼

SQLite數據庫存儲是Android系統提供的數據存儲方式之一 SQLite是專為嵌入式設備設計的一款輕量級數據庫 SQLite占用資源非常低,在嵌入式設備中,只需要幾百K的內存 SQLite支持標准的SQL語法,遵循數據庫的ACID事務 SQLite是android系統自帶,不需要單獨安裝,不需要用戶名密碼就可以使用

三、SQLite怎麼用

step1:新建類繼承SQLiteOpenHelper

新建一個類(類名自定義)繼承SQLiteOpenHelper,並實現構造方法、重寫oncreate和onupgrade方法。

public class DBHelper extends SQLiteOpenHelper {

    private String createSQL = "create table student(" 
            + "id integer primary key  autoincrement not null ,"
            + "name varchar(20) not null," 
            + "age integer not null ," 
            + "gender varchar(2) not null)";

    /**
     * 
     * @param context
     * @param name 數據庫名字
     * @param factory 數據庫進行查詢的時候會返回一個cursor,這個cursor就是在上面的factory中產生的。
如果有需求,可以自定義factory,這樣返回的cursor就會符合自己的需求!
     * @param version 數據庫版本號
     */
    public DBHelper(Context context, String name, CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(createSQL);
    }

    /**
     * 該方法會在數據庫需要升級的時候調用
     * 
     * @param db
     * @param oldVersion
     * @param newVersion
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("ALTER TABLE student ADD COLUMN other TEXT");
    }

}

step2:創建SQLiteDatabase對象

這裡有兩種創建方式,分別是:

1、只讀模式

SQLiteDatabase  sqldb = dbhelper.getReadableDatabase();

2、讀寫模式

SQLiteDatabase  sqldb = dbhelper.getWritableDatabase();

step3:通過實現增刪改查操作

1、增

private void insert() {
        String name = nameEdit.getText().toString();
        //獲得SQLiteDatabase對象,讀寫模式
        sqldb = dbhelper.getWritableDatabase();
        //ContentValues類似HashMap,區別是ContentValues只能存簡單數據類型,不能存對象
        ContentValues values = new ContentValues();
        values.put("name", name);
        values.put("age", 20);
        values.put("gender", "男");
        //執行插入操作
        sqldb.insert(TABLE_NAME, null, values);
    }

2、刪

private void delete() {
        sqldb = dbhelper.getWritableDatabase();
        //第二個參數是WHERE語句(即執行條件,刪除哪條數據)
        //第三個參數是WHERE語句中占位符(即"?"號)的填充值
        sqldb.delete(TABLE_NAME, "name=?", new String[]{"jack"});//刪除name的值是jack的那條記錄
    }

3、改

private void modify() {
        SQLiteDatabase  sqldb = dbhelper.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put("name", "Jet");
        //第二個參數是修改的字段及修改的值(已經存放到ContentValues中)
        //第三個參數是WHERE語句
        //第四個參數是WHERE語句中占位符的填充值
        //如果第三四個參數為null,那就將每條記錄都改掉
        sqldb.update(TABLE_NAME, values, null, null);
    }

4、查

private void show() {
        //得到數據庫對象
        sqldb = dbhelper.getReadableDatabase();
        //創建游標
        Cursor mCursor = sqldb.query(TABLE_NAME, new String[] { "id", "name", "age", "gender" }, "age>?", new String[]{"10"}, null, null,
                null);
        //游標置頂
        mCursor.moveToFirst();
        //遍歷
        do{
            String name = mCursor.getString(mCursor.getColumnIndex("name"));
            System.out.println(name);
        }while(mCursor.moveToNext());
    }

四、示例代碼

DBHelper類代碼

public class DBHelper extends SQLiteOpenHelper {

    private String createSQL = "create table student(" 
            + "id integer primary key  autoincrement not null ,"
            + "name varchar(20) not null," 
            + "age integer not null ," 
            + "gender varchar(2) not null)";

    /**
     * 
     * @param context
     * @param name 數據庫名字
     * @param factory 數據庫進行查詢的時候會返回一個cursor,這個cursor就是在上面的factory中產生的。
如果有需求,可以自定義factory,這樣返回的cursor就會符合自己的需求!
     * @param version 數據庫版本號
     */
    public DBHelper(Context context, String name, CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(createSQL);
    }

    /**
     * 該方法會在數據庫需要升級的時候調用
     * 
     * @param db
     * @param oldVersion
     * @param newVersion
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("ALTER TABLE student ADD COLUMN other TEXT");
    }

}

MainActivity類代碼

public class MainActivity extends Activity implements OnClickListener {

    private Button addBtn;
    private Button deleteBtn;
    private Button modifyBtn;
    private Button showBtn;
    private EditText nameEdit;

    private DBHelper dbhelper;
    private SQLiteDatabase sqldb;

    private static final String TABLE_NAME = "student";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bindID();
        dbhelper = new DBHelper(this, "demodb", null, 1);
    }

    /**
     * 綁定ID和監聽事件
     */
    private void bindID() {
        addBtn = (Button) findViewById(R.id.addBtn);
        deleteBtn = (Button) findViewById(R.id.deleteBtn);
        modifyBtn = (Button) findViewById(R.id.modifyBtn);
        showBtn = (Button) findViewById(R.id.showBtn);
        nameEdit = (EditText) findViewById(R.id.nameEdit);

        addBtn.setOnClickListener(this);
        deleteBtn.setOnClickListener(this);
        modifyBtn.setOnClickListener(this);
        showBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.addBtn:
            insert();
            break;
        case R.id.deleteBtn:
            delete();
            break;
        case R.id.modifyBtn:
            modify();
            break;
        case R.id.showBtn:
            show();
            break;
        default:
            break;
        }
    }

    private void insert() {
        String name = nameEdit.getText().toString();
        //獲得SQLiteDatabase對象,讀寫模式
        sqldb = dbhelper.getWritableDatabase();
        //ContentValues類似HashMap,區別是ContentValues只能存簡單數據類型,不能存對象
        ContentValues values = new ContentValues();
        values.put("name", name);
        values.put("age", 20);
        values.put("gender", "男");
        //執行插入操作
        sqldb.insert(TABLE_NAME, null, values);
    }

    private void delete() {
        sqldb = dbhelper.getWritableDatabase();
        //第二個參數是WHERE語句(即執行條件,刪除哪條數據)
        //第三個參數是WHERE語句中占位符(即"?"號)的填充值
        sqldb.delete(TABLE_NAME, "name=?", new String[]{"jack"});
    }

    private void modify() {
        SQLiteDatabase  sqldb = dbhelper.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put("name", "Jet");
        //第二個參數是修改的字段及修改的值(已經存放到ContentValues中)
        //第三個參數是WHERE語句
        //第四個參數是WHERE語句中占位符的填充值
        //如果第三四個參數為null,那就將每條記錄都改掉
        sqldb.update(TABLE_NAME, values, null, null);
    }

    private void show() {
        //得到數據庫對象
        sqldb = dbhelper.getReadableDatabase();
        //創建游標
        Cursor mCursor = sqldb.query(TABLE_NAME, new String[] { "id", "name", "age", "gender" }, "age>?", new String[]{"10"}, null, null,
                null);
        //游標置頂
        mCursor.moveToFirst();
        //遍歷
        do{
            String name = mCursor.getString(mCursor.getColumnIndex("name"));
            System.out.println(name);
        }while(mCursor.moveToNext());
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //退出程序後,關閉數據庫資源
        sqldb.close();
    }
}

布局文件代碼



    
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved