SQLite會用到兩個很重要的類別物件,SQLiteOpenHelper負責建立資料庫以及資料表
以及SQLiteDatabase負責資料的新增 修改 刪除 等操作
package com.sqltest;
import ....
public class Mydbhelper extends SQLiteOpenHelper {
static String dbname = "mydb";
static int version = 1;
static String dbtableSQL = "CREATE TABLE mytable ( _id integer primary key not null,"
+ "name text not null,sex text,addr text)";
// 內建的建構子,用來建立資料庫,但要傳入的參數有點多,所以我們改用自己的
public Mydbhelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
//我們自己的建構子只需傳入Context頁面即可
public Mydbhelper(Context context) {
super(context, dbname, null, version);
// TODO Auto-generated constructor stub
}
//建立資料表
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(dbtableSQL);
}
//更新資料表
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
}
}
主頁面程式
package com.sqltest;
import ...
public class MainActivity extends Activity {
EditText etname, etsex, etaddr;
TextView show;
SQLiteDatabase dbwr;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etname = (EditText) findViewById(R.id.editText1);
etsex = (EditText) findViewById(R.id.editText2);
etaddr = (EditText) findViewById(R.id.editText3);
show = (TextView) findViewById(R.id.textView4);
/*建立繼承SQLiteOpenHelper之類別物件,主要用來建構
出用於修改資料之SQLiteDatabase類別物件*/
Mydbhelper helper = new Mydbhelper(this);
dbwr = helper.getWritableDatabase();
Toast.makeText(this, "建立資料庫成功", 3000).show();
}
//記得結束資料串流,避免資料遺失
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
dbwr.close();
}
//修改
public void renewbut(View v) {
if (!etname.getText().toString().equals("")
&& !etaddr.getText().toString().equals("")) {
//ContentValues物件用來攜帶資料進資料表裡
ContentValues cv = new ContentValues();
//ContentValues.put("資料庫欄位",value)
cv.put("addr", etaddr.getText().toString());
//更新資料使用內建的API,SQLiteDatabase相關資料庫操作都會回傳一個long,可用來判斷是否有操作成功
//update(String table, ContentValues values, String whereClause, String[]
whereArgs)
//whereClause 對應到SQL語法: name='XXX',SQL是用單引號
long check = dbwr.update("mytable", cv, "name='"
+ etname.getText().toString() + "'", null);
if (check > 0)
Toast.makeText(this, "修改成功", 3000).show();
else
Toast.makeText(this, "修改失敗", 3000).show();
} else {
Toast.makeText(this, "清輸入姓名以及地址", 3000).show();
}
}
//刪除
public void delbut(View v) {
if (!etname.getText().toString().equals("")) {
long check = dbwr.delete("mytable", "name='"
+ etname.getText().toString() + "'", null);
if (check > 0) {
Toast.makeText(this, "刪除成功", 3000).show();
} else {
Toast.makeText(this, "刪除失敗", 3000).show();
}
} else {
Toast.makeText(this, "請輸入刪除資料之姓名", 3000).show();
}
}
//新增
public void newbut(View v) {
ContentValues cv = new ContentValues();
cv.put("name", etname.getText().toString());
cv.put("sex", etsex.getText().toString());
cv.put("addr", etaddr.getText().toString());
long check = dbwr.insert("mytable", null, cv);
if (check > 0) {
Toast.makeText(this, cv.toString() + "新增成功", Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(this, "新增失敗", Toast.LENGTH_SHORT).show();
}
}
//查詢
public void querybut(View v) {
if (!etname.getText().toString().equals("")) {
//宣告一個Cursor變數,類似ResultSet,像是一個從資料表中得到的資料表單
Cursor c = null;
//Cursor表單中,擁有的欄位,必須與原資料表欄位名稱符合
String[] colum = { "name", "sex", "addr" };
c = dbwr.query("mytable", colum, "name='"
+ etname.getText().toString() + "'", null, null, null, null);
//針對Cursor變數進行操作,用迴圈將裡面的資料提領出來
if (c.getCount() > 0) {
String st1 = "";
//移動到第一筆
c.moveToFirst();
for (int i = 0; i < c.getCount(); i++) {
st1 = ("姓名: " + c.getString(0) + "性別: " + c.getString(1)
+ "地址: " + c.getString(2) + "\n");
//移動到下一筆
c.moveToNext();
}
show.setText(st1);
Toast.makeText(this, "共有" + c.getCount() + "筆紀錄", 3000).show();
} else {
Toast.makeText(this, "沒有資料...", 3000).show();
}
} else {
Toast.makeText(this, "請輸入欲查詢之姓名", 3000).show();
}
}
//展示
public void showbut(View v) {
Cursor c = null;
String[] colum = { "name", "sex", "addr" };
c = dbwr.query("mytable", colum, null, null, null, null, null);
if (c.getCount() > 0) {
String st1 = "";
c.moveToFirst();
for (int i = 0; i < c.getCount(); i++) {
st1 += ("姓名: " + c.getString(0) + "性別: " + c.getString(1)
+ "地址: " + c.getString(2) + "\n");
c.moveToNext();
}
show.setText(st1);
Toast.makeText(this, "共有" + c.getCount() + "筆紀錄", 3000).show();
} else {
Toast.makeText(this, "沒有資料...", 3000).show();
}
}
}
請問這有完整範例檔嗎??
回覆刪除有喔,我寄給你了
回覆刪除作者已經移除這則留言。
刪除請問可以跟你索取完整範例檔嗎?
回覆刪除https://www.box.com/s/jv3x3tpesugxfm3aczrm
刪除https://www.box.com/s/jv3x3tpesugxfm3aczrm
回覆刪除今天才看到你的回覆 特地來謝謝你的 :)
回覆刪除抱歉我是Android新手
回覆刪除想請問您
為何程式中不用做任何作按鈕的宣告或呼叫
也可以做到按下按鈕就觸發的功能呢
XML直接定義屬性,在Button上
刪除android:onClick
直接下載專案就可以看的到
看到了
刪除感恩
想再請問
刪除若要在手機上查詢 儲存的資料內容 或直接在檔案中新增資料 有辦法嗎? 路徑在哪
此程式的刪除功能 可以把某一筆資料刪除 但編碼為重新編置 只會一直加上去
這問題要如何解決?
若查詢功能 想以關鍵字的方式 找相關的資料列出來 是否做的到呢?
(抱歉問題有點多
hi~
刪除關於要在手機上查詢儲存的資料內容甚至修改SQLite資料庫,可以參考http://blog.csdn.net/chaozhung/article/details/8924318
還有一種方法,可以去下載Play Store上的SQLite editor之類的App來進行修改,不過裝置必須要有root權限
第二個問題,這個我也還在找方法。或許可以把資料撈出來後,不要印出_id,原先_id欄位就直接印出數字,每讀出一筆資料就+1這樣...
第三個問題,範例中是以書名當關鍵字去搜尋,如果你要以價格或是其他欄位為關鍵字去搜尋,應該只要參考原先範例修改就可以了
安安 我想參考一下你的完整檔 謝謝><
回覆刪除