1. 程式人生 > >Android資料儲存之SQLite簡單用法

Android資料儲存之SQLite簡單用法

實現效果圖如下:

activity_main.xml佈局檔案

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/create"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="建立資料庫" />

    <Button
        android:id="@+id/update"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="更新資料庫" />

    <Button
        android:id="@+id/insert"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="插入資料" />

    <Button
        android:id="@+id/updatedata"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="更新資料" />

    <Button
        android:id="@+id/modify"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="修改資料" />

    <Button
        android:id="@+id/select"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="查詢資料" />

    <Button
        android:id="@+id/delete"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="刪除資料" />


</LinearLayout>

DatabaseHelper輔助類程式碼:
import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;


/**
 * SQLiteOpenHelper是SQLiteDatabase一個輔助類,這個類主要生成資料庫,並對版本進行管理。
 * getWritableDatabase()和getReadableDatabase()可以對資料庫進行操作
 */

public class DatabaseHelper extends SQLiteOpenHelper {

    private static final String TAG = "TestSQLite";

    /**
     * 必須有構造方法
     *
     * @param context 上下文
     * @param name    資料庫名稱
     * @param factory
     * @param version 當前資料庫版本
     */
    public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) {
        super(context, name, factory, version, errorHandler);
    }

    /**
     * 當第一次建立資料庫的時候,呼叫該方法
     *
     * @param db
     */
    @Override
    public void onCreate(SQLiteDatabase db) {
        //建立一張使用者表,屬性列為:id(主鍵並且自動增加)、name(學生姓名)、number(學號)
        String sql = "create table user(_id integer primary key autoincrement,name text,number text)";
        //輸出資料庫的日誌
        Log.i(TAG, "create Database-------------> ");
        //execSQL函式用於執行SQL語句
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        //輸出更新資料庫的日誌
        Log.i(TAG, "update Database------------->");
    }
}

MainActivity程式碼:
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {

    private Button mCreateButton;
    private Button mUpdateButton;
    private Button mInsertButton;
    private Button mUpdatedataButton;
    private Button mModifyButton;
    private Button mSelectButton;
    private Button mDeleteButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
        setListener();
    }

    private void init() {
        mCreateButton = (Button) findViewById(R.id.create);
        mUpdateButton = (Button) findViewById(R.id.update);
        mInsertButton = (Button) findViewById(R.id.insert);
        mUpdatedataButton = (Button) findViewById(R.id.updatedata);
        mModifyButton = (Button) findViewById(R.id.modify);
        mSelectButton = (Button) findViewById(R.id.select);
        mDeleteButton = (Button) findViewById(R.id.delete);
    }

    private void setListener() {
        //建立資料庫的方法
        mCreateButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //建立一個DatabaseHelper物件
                DatabaseHelper dbHelper = new DatabaseHelper(MainActivity.this, "user", null, 1);
                //呼叫了DatabaseHelper的getWritableDatabase()或getReadableDatabase(),得到一個可讀的SQLiteDatabase物件
                SQLiteDatabase db = dbHelper.getReadableDatabase();

            }
        });

        //更新資料庫的方法
        mUpdateButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 資料庫版本的更新,由原來的1變為2
                DatabaseHelper dbHelper = new DatabaseHelper(MainActivity.this, "user", null, 2);
                SQLiteDatabase db = dbHelper.getReadableDatabase();
            }
        });

        //插入資料的方法
        mInsertButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DatabaseHelper dbHelper = new DatabaseHelper(MainActivity.this, "user", null, 1);
                //得到一個可寫的資料庫
                SQLiteDatabase db = dbHelper.getWritableDatabase();
                //生成ContentValues物件 //key:列名,value:想插入的值
                ContentValues cv = new ContentValues();
                //往ContentValues物件存放資料,鍵-值對模式
                cv.put("id", 1);
                cv.put("name", "zhangbiao");
                cv.put("age", 27);
                cv.put("sex", "male");
                //呼叫insert方法,將資料插入資料庫
                // 第一個引數:表名稱
                // 第二個引數:SQl不允許一個空列,如果ContentValues是空的,那麼這一列被明確的指明為NULL值
                // 第三個引數:ContentValues物件
                db.insert("user", null, cv);
                //關閉資料庫
                db.close();
            }
        });

        //更新資料的方法
        mUpdatedataButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DatabaseHelper dbHelper = new DatabaseHelper(MainActivity.this, "user", null, 1);
                //得到一個可寫的資料庫
                SQLiteDatabase db = dbHelper.getWritableDatabase();
                //生成ContentValues物件 //key:列名,value:想插入的值
                ContentValues cv = new ContentValues();
                //往ContentValues物件存放資料,鍵-值對模式
                cv.put("id", 1);
                cv.put("name", "zhangbiao");
                cv.put("age", 27);
                cv.put("sex", "male");
                // 呼叫update方法
                // 第一個引數String:表名
                // 第二個引數ContentValues:ContentValues物件
                // 第三個引數String:where字句,相當於sql語句where後面的語句,?號是佔位符
                // 第四個引數String[]:佔位符的值
                db.update("user", cv, "id=?", new String[]{"1"});
                //關閉資料庫
                db.close();
            }
        });

        //修改資料的方法
        mModifyButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DatabaseHelper dbHelper = new DatabaseHelper(MainActivity.this, "user", null, 1);
                //得到一個可寫的資料庫
                SQLiteDatabase db = dbHelper.getWritableDatabase();
                ContentValues cv = new ContentValues();
                cv.put("sage", "23");
                //where 子句 "?"是佔位符號,對應後面的"1",
                String whereClause = "id=?";
                String[] whereArgs = {String.valueOf(1)};
                //第一個引數String:要更新的表名
                //第二個引數ContentValues:一個ContentValeus物件
                //第三個引數String: 是where子句
                db.update("user", cv, whereClause, whereArgs);
            }
        });

        //查詢資料的方法
        mSelectButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DatabaseHelper dbHelper = new DatabaseHelper(MainActivity.this, "user", null, 1);
                //得到一個可讀的SQLiteDatabase物件
                SQLiteDatabase db = dbHelper.getReadableDatabase();
                // 呼叫SQLiteDatabase物件的query方法進行查詢,返回一個Cursor物件:由資料庫查詢返回的結果集物件
                // 第一個引數String:表名
                // 第二個引數String[]:要查詢的列名
                // 第三個引數String:查詢條件
                // 第四個引數String[]:查詢條件的引數
                // 第五個引數String:對查詢的結果進行分組
                // 第六個引數String:對分組的結果進行限制
                // 第七個引數String:對查詢的結果進行排序
                Cursor cursor = db.query("stu_table", new String[]{"id", "name", "age", "sex"}, "id=?", new String[]{"1"}, null, null, null);
                while (cursor.moveToNext()) {
                    String name = cursor.getString(cursor.getColumnIndex("name"));
                    String age = cursor.getString(cursor.getColumnIndex("age"));
                    String sex = cursor.getString(cursor.getColumnIndex("sex"));
                    System.out.println("query------->" + "姓名:" + name + " " + "年齡:" + age + " " + "性別:" + sex);
                }
                //關閉資料庫
                db.close();
            }
        });
        
        //刪除資料的方法
        mDeleteButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DatabaseHelper dbHelper = new DatabaseHelper(MainActivity.this, "user", null, 1);
                //得到一個可寫的資料庫
                SQLiteDatabase db = dbHelper.getWritableDatabase();
                //呼叫SQLiteDatabase物件的delete方法進行刪除操作
                //第一個引數String:表名
                //第二個引數String:條件語句
                //第三個引數String[]:條件值
                db.delete("user", "id=?", new String[]{"1"});
            }
        });
    }
}