這節為你介紹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了,給你參考