SQLite數據庫的創建和操作
Email:chentravelling@163.com
前天學習了一下界面布局和activity,昨天抽了一會時間搗騰了一下SQLite,總體感覺Android的數據庫服務還算方便,這都是兩個類的功勞:SQLiteOpenHelper和SQLiteDatabase。關于這兩個類,后續再講。
### 一、環境
IDE:Android Studio
JDK:1.8
系統:win 7 64位
### 二、設計
我拿了一個簡單的例子:people表字段如下
<table border="1" width="200" cellspacing="1" cellpadding="1" align="center"><tbody><tr><td><span style="font-family:'Microsoft YaHei'"><span style="font-size:14px">字段</span></span></td><td><span style="font-family:'Microsoft YaHei'"><span style="font-size:14px">類型</span></span></td><td><span style="font-family:'Microsoft YaHei'"><span style="font-size:14px">主鍵</span></span></td></tr><tr><td><span style="font-family:'Microsoft YaHei'"><span style="font-size:14px">id</span></span></td><td><span style="font-family:'Microsoft YaHei'"><span style="font-size:14px">TEXT</span></span></td><td><span style="font-family:'Microsoft YaHei'"><span style="font-size:14px">KEY</span></span></td></tr><tr><td><span style="font-family:'Microsoft YaHei'"><span style="font-size:14px">name</span></span></td><td><span style="font-family:'Microsoft YaHei'"><span style="font-size:14px">TEXT</span></span></td><td><span style="font-family:'Microsoft YaHei'"><span style="font-size:14px"><br/></span></span></td></tr><tr><td><span style="font-family:'Microsoft YaHei'"><span style="font-size:14px">workplace</span></span></td><td><span style="font-family:'Microsoft YaHei'"><span style="font-size:14px">TEXT</span></span></td><td><span style="font-family:'Microsoft YaHei'"><span style="font-size:14px"><br/></span></span></td></tr><tr><td><span style="font-family:'Microsoft YaHei'"><span style="font-size:14px">phone</span></span></td><td><span style="font-family:'Microsoft YaHei'"><span style="font-size:14px">TEXT</span></span></td><td><span style="font-family:'Microsoft YaHei'"><span style="font-size:14px"><br/></span></span></td></tr><tr><td><span style="font-family:'Microsoft YaHei'"><span style="font-size:14px">gender<span style="white-space:pre"/></span></span></td><td><span style="font-family:'Microsoft YaHei'"><span style="font-size:14px">INTEGER</span></span></td><td><span style="font-family:Microsoft YaHei; font-size:18px"><br/></span></td></tr></tbody></table>
2.1)首先我寫了一個people類:peopleBean。為什么要新建一個類呢?首先是對需要傳遞和保存的信息進行封裝,這樣個人覺得更加符合面向對象的思想,也使得代碼更規范,可讀性更高,安全性更高。
~~~
/**
* Created by chen on 2015/12/16.
*/
public class peopleBean {
private String id;//主鍵
private String name;
private String workplace;
private String phone;
private int gender;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getWorkplace() {
return workplace;
}
public void setWorkplace(String workplace) {
this.workplace = workplace;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
}
</span>
~~~
2.2)新建一個對數據庫進行操作的類:AddressDAO,該類繼承自SQLiteOpenHelper類,關于SQLiteOpenHelper類的說明將在另一個章節中討論。
~~~
<pre name="code" class="java"><span style="font-family:Microsoft YaHei;font-size:18px;">
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* Created by chen on 2015/12/16.
*/
public class AddressDAO extends SQLiteOpenHelper{
private SQLiteDatabase db;
public AddressDAO(Context context)
{
super(context,"address_db",null,1);
}
//創建數據庫
@Override
public void onCreate(SQLiteDatabase db)
{
Log.e("onCreate", "create");
String sql = "CREATE TABLE IF NOT EXISTS people(id integer primary key autoincrement,name text,phone text,workplace text,gender integer);";
db.execSQL(sql);
}
//當數據庫升級的時候,Android系統會自動調用onUpgrade方法
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
String sql = "DROP TABLE IF EXISTS address_db";
db.execSQL(sql);
onCreate(db);
}
//關閉數據庫服務
public void closeDB(SQLiteDatabase db)
{
if(db!=null)
{
db.close();
}
}
//插入數據
public void add(peopleBean people)
{
/* String name = people.getName();
String phone = people.getPhone();
String workplace = people.getWorkplace();
String gender = people.getGender()==0?"男":"女";*/
String sql = "insert into people values(null,'"+people.getName()+"','"+people.getPhone()+"','"+people.getWorkplace()+"','"+people.getGender()+"')";
//String sql = "insert into people values(null,'張亞茹','13716762131','北京','0');";
//獲取SQLiteDatabase對象實例
db = this.getWritableDatabase();
db.execSQL(sql);
}
//查詢數據:返回的是一個Cursor對象
public Cursor query()
{
String sql = "select * from people";
//獲取SQLiteDatabase對象實例
db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(sql, null);
return cursor;
}
}
</span>
~~~
其中關鍵的幾個地方:
(1)重寫**onCreate()**函數,功能:新建數據庫,庫名:address_db
(2)重寫**onUpdate()**函數,數據庫升級時,Android系統會自動調用該方法
(3)查詢的時候,調用的是**rawQuery()**方法,返回的是**Cursor對象**,該對象是一個數據集合,關于Cursor的操作,后續再講。
其他的刪除和查詢暫時還沒寫。
當然還可以通過調用SQLiteDatabase類中的insert()、delete()、update()、rawQuery()進行數據的增刪改查,但是個人喜歡通過執行sql語句來做,比較方便。
### 三、關于SQLite可視化
系統中的數據庫在哪里呢?見下圖:
打開android device monitor


將數據庫表導入和導出:

然后就可以利用SQLite可視化工具查看了:SQLite Expert