這節為你介紹SQLite的新增、修改、刪除
不囉嗦,直接進入主題
新增資料
package jim.memorandum;
import android.database.sqlite.SQLiteDatabase;
public class Add extends Activity {
//SQLiteDatabase對象
SQLiteDatabase db;
//資料庫名
public String db_name = "MemorandumSQL";
//表名
public String table_name = "newMemorandum";
//輔助類名
NewListDataSQL helper = new NewListDataSQL(Add.this, db_name);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add);
//以輔助類獲得類據庫對象 db = helper.getWritableDatabase();
}
//儲存
Button Add = (Button)findViewById(R.id.btn_save);
View.OnClickListener listener1 = new View.OnClickListener() {
public void onClick(View view) {
String strToast = "新增成功!";//返回訊息
note = (EditText) findViewById(R.id.editText1);//備忘事項
//寫進SQLite
ContentValues cv = new ContentValues();
cv.put("date", date_add.getText().toString() + time_add.getText().toString());
cv.put("note",note.getText().toString());
String sPW = pw.getText().toString();
//checkBox打勾了才加入密碼
if(ckBox.isChecked())
{
strToast = strToast + " 密碼保護:已開啟!";
if(sPW.equalsIgnoreCase(""))
{
cv.put("pw","");
}
else{
cv.put("pw",sPW);
}
}
else
{
strToast = "新增成功!";
cv.put("pw","");
}
//提醒
if(ck_remind_add.isChecked())
{
cv.put("reminder",1);
}
else
{
cv.put("reminder",0);
}
//備註
cv.put("memo","");
cv.put("type", "");
//添加方法
long long1 = db.insert(table_name, "", cv);
//Cursor c = db.query(table_name, null, null, null, null,null, null);
//添加成功後返回行號,失敗後返回-1
if (long1 == -1) {
Toast.makeText(Add.this,
"新增失敗!", Toast.LENGTH_SHORT)
.show();
} else {
mID = (int) long1;
//加入提醒
if(ck_remind_add.isChecked())
{
strToast = strToast + " 提醒:已開啟!";
setReminder(true);
}
Toast.makeText(Add.this,
strToast, Toast.LENGTH_SHORT)
.show();
//新增完成就關閉
Add.this.finish();
//跳回主畫面,用下面的方式才會刷新
Intent intent_request = new Intent(Add.this, MemorandumActivity.class);
Add.this.startActivity(intent_request);
}
}
};
Add.setOnClickListener(listener1);
說明:
創建db之前第一篇就有說明過了,所以這裡就不再贅述,不了解的請參考第一篇
New 一個 ContentValues 容器,用於儲存要新增進資料庫的資料
用法為ContentValues .put(欄位名稱,值)
再來新增進資料庫 long long1 = db.insert(table_name, "", cv);
long1是資料庫回傳值,-1表示失敗、不為-1時為新增的到第幾筆的行號
比如說資料庫內有二筆,我現在新增成功了,long1就會返回3
可以用來顯示現在資料庫共有幾筆資料
最後用Toast.makeText顯示成功訊息就完成新增了。
修改資料
//修改:db.update(table,Values,whereClause,whereArgs)
long long1 = db.update("newMemorandum", cv, "_ID=" + ID, null);
說明:
修改和新增大部份都相同,就只有寫入資料庫的指令不同
db.update(table,Values,whereClause,whereArgs)
table 表名:相對於SQL from後面的部份
Values :要修改的欄位名稱及修改的值
whereClause:
刪除資料
long long1 = db.delete("newMemorandum", "_ID=" + MID[index], null);
說明:
和修改大同小異,這裡就不再說明了,看程式碼應該就能了解了
後記:
新增、修改、刪除這樣就算完成了,其實不算太難
資料庫儲存必須考慮記憶體空間及版更後資料必須保留等問題
這個後續我會再做說明,如有不懂請來信,謝謝。
你好 我想製作,刪除一整排欄位的資料,請問要怎麼編寫delete呢?
回覆刪除一整排的欄位?你是要把一欄刪除掉這樣是嗎?還是一筆資料?
刪除如果是一筆,上面就有說明了
如果是table的一個欄位,SQLite不能做單一欄位的刪除,如下官方說明頁:
http://www.sqlite.org/lang_altertable.html
唯一的方法是drop掉舊的table再create一個你要的新的table這樣
方法是先create一個新的table,把資料倒過去後再drop掉舊的table這樣。
不好意思~ 我照您的方法實踐,但是在insert的時候,程式就彈出:
回覆刪除不幸,程式已經停止的訊息。
請問一下我是哪個步驟可能不對呢?
insert錯誤有可能是新增的資料對應錯誤
刪除或是新增了錯誤的欄位資料值
加入的是null值也可能會出現錯誤喔
所以檢查一下要新增的變數內的值是否正確
及對應欄位是否正確,從這方面去檢查應該就沒問題才對
請問一下,如果我要儲存的是Arraylist
回覆刪除那在儲存那邊要怎麼編寫呢??
你的儲存是指什麼?儲存進資料庫還是儲存進arraylist?
刪除將arraylist 儲存進資料庫
刪除跑arraylist的迴圈就能取到每一筆資料 然後在單筆單筆insert to db 不然就做bulkInsert先做好一整包然後再一次存全部
刪除您好 我在新增資料的時候
回覆刪除long1有累加上去
但是我用其他的程式我的資料庫沒有新增資料 這是正常的嗎?
作者已經移除這則留言。
回覆刪除作者已經移除這則留言。
回覆刪除請問如果update的whereClause要用多欄位該怎麼辦呢
回覆刪除您好,我想將相片及其詳細資料丟進資料庫以便查詢整理,該怎麼寫呢?
回覆刪除我是這樣做的給你參考:
刪除相片在DB的欄位是設VARCHAR
取得的相片先轉bitmap 再轉成 byte
String base64 = Base64.encodeToString(bytes, Base64.DEFAULT)
上面這個可以再轉成String就能存到DB了,給你參考