平時(shí)工作中是真沒(méi)有接觸SQLite本地?cái)?shù)據(jù)庫(kù)非凌,然后在學(xué)習(xí)過(guò)程中秸应,看序列化的時(shí)候(其實(shí)后來(lái)發(fā)現(xiàn)和序列化并沒(méi)有半毛錢(qián)關(guān)系橘霎,很尷尬)蔫浆,突然想到了數(shù)據(jù)庫(kù)這個(gè)東西,很久不用基本上忘的沒(méi)有了姐叁,所以就寫(xiě)個(gè)demo總結(jié)一下使用瓦盛。
對(duì)于SQLite語(yǔ)句不熟悉的,可以使用數(shù)據(jù)庫(kù)工具來(lái)練習(xí)一下
傳送門(mén):數(shù)據(jù)庫(kù)工具SQLite Expert Personal的簡(jiǎn)單使用
如何在Android中簡(jiǎn)單使用SQLite數(shù)據(jù)庫(kù)外潜?我們只需要寫(xiě)兩個(gè)工具類(lèi)來(lái)使用操作就可以了
- 創(chuàng)建數(shù)據(jù)庫(kù)的幫助類(lèi) —— DBHelper
??我們創(chuàng)建一個(gè)DBHelper去繼承SQLiteOpenHelper原环,然后實(shí)現(xiàn)onCreate和onUpgrade即可,當(dāng)然处窥,構(gòu)造函數(shù)不能忘掉嘱吗。下面的代碼中各部分的注釋就標(biāo)注的很清楚啦!
public class DBHelper extends SQLiteOpenHelper {
private static final int VERSION = 1;//定義數(shù)據(jù)庫(kù)版本號(hào)
private static final String DBNAME = "ceshi.db"; //定義數(shù)據(jù)庫(kù)名
public DBHelper(Context context) {//定義構(gòu)造函數(shù)
//參數(shù) 上下文 數(shù)據(jù)庫(kù)名稱(chēng) cosor工廠 版本號(hào)
super(context, DBNAME, null, VERSION);//重寫(xiě)基類(lèi)的構(gòu)造函數(shù)
}
@Override
public void onCreate(SQLiteDatabase db) {//創(chuàng)建數(shù)據(jù)庫(kù)
//序號(hào)滔驾,姓名谒麦,年齡,登記日期
db.execSQL("create table ceshi (id varchar(10) primary key, name varchar(200),age varchar(10),date varchar(10))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//更新數(shù)據(jù)庫(kù)
//本方法主要用于更新數(shù)據(jù)庫(kù) 通過(guò)對(duì)當(dāng)前版本的判斷 實(shí)現(xiàn)數(shù)據(jù)庫(kù)的更新
}
}
- 創(chuàng)建增刪改查的工具類(lèi) —— CeshiDao
??我這里只是簡(jiǎn)單的實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的增刪改查功能
- 插入數(shù)據(jù),這里使用replace而沒(méi)有使用insert的原因是哆致,我的表里的id字段建立了唯一索引绕德,所以如果insert使用已經(jīng)存在的鍵值插入一條記錄,會(huì)拋出一 個(gè)主鍵沖突的錯(cuò)誤沽瞭,使用replace則會(huì)直接替換掉原來(lái)的數(shù)據(jù)迁匠。所以我使用了replace
/*插入*/
public void insertDao(Ceshi ceshi) {
db = helper.getWritableDatabase();//初始化SQLiteDatabase對(duì)象
//執(zhí)行插入操作
db.execSQL("replace into ceshi (id,name,age,date) values (?,?,?,?)",
new Object[]{
ceshi.getId(),
ceshi.getName(),
ceshi.getAge(),
ceshi.getDate()
});
}
- 刪除數(shù)據(jù)
/*刪除*/
public void deleteDao(Integer... ids) {
if (ids.length > 0) {//判斷是否存在要?jiǎng)h除的id
StringBuffer sb = new StringBuffer();// 創(chuàng)建StringBuffer對(duì)象
for (int i = 0; i < ids.length; i++)// 遍歷要?jiǎng)h除的id集合
{
sb.append('?').append(',');// 將刪除條件添加到StringBuffer對(duì)象中
}
sb.deleteCharAt(sb.length() - 1);// 去掉最后一個(gè)“,“字符
db = helper.getWritableDatabase();// 初始化SQLiteDatabase對(duì)象
// 執(zhí)行刪除收入信息操作
db.execSQL("delete from ceshi where id in (" + sb + ")",
(Object[]) ids);
}
}
- 更新修改數(shù)據(jù)
/*修改*/
public void updateDao(Ceshi ceshi) {
db = helper.getWritableDatabase();// 初始化SQLiteDatabase對(duì)象
// 執(zhí)行修改收入信息操作
db.execSQL(
"update ceshi set name=?,age= ?,date=? where id= ?",
new Object[]{
ceshi.getName(),
ceshi.getAge(),
ceshi.getDate(),
ceshi.getId()
});
}
- 查詢(xún)單個(gè)數(shù)據(jù)
/*查詢(xún)*/
public Ceshi findDao(int id) {
db = helper.getWritableDatabase();// 初始化SQLiteDatabase對(duì)象
Cursor cursor = db
.rawQuery(
"select id,name,age,date from ceshi where id= ?",
new String[]{String.valueOf(id)});// 根據(jù)編號(hào)查找,并存儲(chǔ)到Cursor類(lèi)中
if (cursor.moveToNext())// 遍歷查找到的收入信息
{
// 將遍歷到的收入信息存儲(chǔ)到Tb_inaccount類(lèi)中
return new Ceshi(
cursor.getInt(cursor.getColumnIndex("id")),
cursor.getString(cursor.getColumnIndex("name")),
cursor.getInt(cursor.getColumnIndex("age")),
cursor.getLong(cursor.getColumnIndex("date"))
);
}
return null;
}
- 查詢(xún)所有數(shù)據(jù)
/*獲取所有數(shù)據(jù)*/
public List<Ceshi> getAllData() {
List<Ceshi> csList= new ArrayList<Ceshi>();// 創(chuàng)建集合對(duì)象
db = helper.getWritableDatabase();// 初始化SQLiteDatabase對(duì)象
// 獲取所有收入信息
Cursor cursor = db.rawQuery("select * from ceshi", null);
while (cursor.moveToNext())// 遍歷所有的收入信息
{
// 將遍歷到的收入信息添加到集合中
csList.add(new Ceshi(
cursor.getInt(cursor.getColumnIndex("id")),
cursor.getString(cursor.getColumnIndex("name")),
cursor.getInt(cursor.getColumnIndex("age")),
cursor.getLong(cursor.getColumnIndex("date"))
));
}
return csList;// 返回集合
}
如果有不對(duì)的地方需要改正的驹溃,歡迎提出建議
歡迎關(guān)注我的Github:ContentMy
最后附上項(xiàng)目地址:SQLiteDemo