今天,要來討論Android內建的資料庫SQLite。之前,我們在討論的是透過PHP寫的API,來跟MySQL資料庫,進行新增、刪除、更新、查詢等資料庫的動作。但是,目前也有很多的App,是直接使用內建的資料庫SQLite,來儲存資料。所以,我們就用一個簡單的範例來討論。
首先,先來了解什麼是SQLite,SQLite是一個嵌入式(embedded SQL database)的資料庫,適用SQL語法。如果資料是固定並且量不多,就可以使用類似SQLite這樣的嵌入式資料庫。
SQLite提供SQLiteDatabase類別,其中可以利用rawQuery()和query()兩種資料表查詢方法,也可以分別利用 insert()、update()、delete()等方法來處理新增、修改和刪除資料。
我們先直接建立一個範例,請在Android Studio 3.x版,新建一個專案。增加一個Empty Activity。再拉一個ListView元件,順序來排列出來。如下圖所示:
完整的程式碼,如下:
public class MainActivity extends AppCompatActivity {
//宣告物件
private SQLiteDatabase db = null;
ListView lsvdb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lsvdb = (ListView)findViewById(R.id.lsvdb);
//建立SQLite 資料庫的實體檔案
db = openOrCreateDatabase("cust.db", Context.MODE_PRIVATE,null);
//建立資料表的SQL語法
String strcreatedb = "CREATE TABLE IF NOT EXISTS " +
"tcustomer (_id INTEGER PRIMARY KEY, cname TEXT, ctel TEXT) ";
//執行SQL語法,建立資料表
db.execSQL(strcreatedb);
//新增五筆資料。
String strinsertsql = "INSERT INTO tcustomer (cname,ctel) values " +
"('king','0953123456')";
db.execSQL(strinsertsql);
strinsertsql = "INSERT INTO tcustomer (cname,ctel) values " +
"('Joe','0953789f123')";
db.execSQL(strinsertsql);
strinsertsql = "INSERT INTO tcustomer (cname,ctel) values " +
"('Mary','0953333444')";
db.execSQL(strinsertsql);
strinsertsql = "INSERT INTO tcustomer (cname,ctel) values " +
"('John','0953555777')";
db.execSQL(strinsertsql);
strinsertsql = "INSERT INTO tcustomer (cname,ctel) values " +
"('Bill','0953888111')";
db.execSQL(strinsertsql);
//查詢資料
Cursor cursor = db.rawQuery("SELECT * FROM tcustomer",null);
//如果查詢有資料的話,就跟ListView做連結
if (cursor != null && cursor.getCount() >=0)
{
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_2,
cursor,
new String[] {"_id","cname"},
new int[] {android.R.id.text1,android.R.id.text2},
0);
lsvdb.setAdapter(adapter);
}
}
}
執行出來的輸入畫面,如下圖所示: