1 / 62

SQLiteOpenHelper 類別存取 SQLite

SQLiteOpenHelper 類別存取 SQLite. 建國科技大學 資管系 饒瑞佶 2013/5 V1. 資料庫. 儲存資料的結構 分成檔案式與 server 式 透過 SQL 指令 ( 新 / 刪 / 修 / 查 ) 溝通,需會動態 SQL 指令. 一筆資料. 管理者要處理. 程式要處理. 建立資料庫. 資料庫  資料表  欄位 欄位會有名稱、資料型態、設定等等. 資料庫. 資料表. 資料表. 欄位. 欄位. 欄位. 欄位. …. 欄位. 欄位. 如果是 SQLite.

Download Presentation

SQLiteOpenHelper 類別存取 SQLite

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SQLiteOpenHelper類別存取SQLite 建國科技大學 資管系 饒瑞佶 2013/5 V1

  2. 資料庫 • 儲存資料的結構 • 分成檔案式與server式 • 透過SQL指令(新/刪/修/查)溝通,需會動態SQL指令 一筆資料 管理者要處理 程式要處理

  3. 建立資料庫 • 資料庫  資料表  欄位 • 欄位會有名稱、資料型態、設定等等 資料庫 資料表 資料表 欄位 欄位 欄位 欄位 … 欄位 欄位

  4. 如果是SQLite • 透過管理介面建立(這裡我們用firefox的外掛SQLite Manager) • 透過adb內的sqlite3指令進行 • 透過程式建立

  5. SQLite Manager • FireFox外掛 • https://addons.mozilla.org/en-US/firefox/addon/sqlite-manager/ • 直接點選安裝

  6. SQLite Manager 直接建立/開啟SQLite database 有UI介面比較好操作

  7. SQLite Manager • 實體手機可以開啟USB連結模式,透過外接碟模式被開啟 • AVD內的資料庫可以透過adb pull拉出,設定後再用adb push存回,或使用ddms來完成

  8. Android連結資料庫 MySQL SQL Server Web Service 遠端資料庫 Internet Intranet Android SQLite 單機資料庫

  9. Android vs. SQLite • 透過SQLiteOpenHelper類別來操作 • 建立資料庫 (建構子) • 建立資料表 (onCreate方法) • 更新資料庫 (onUpgrade方法) • 從SQLiteOpenHelper類別建立物件,同時配合SQL指令來操作資料庫

  10. Android vs. SQLite運作流程 執行建構子 是否有資料庫? 無 建立資料庫 有 進入onCreate 建立資料表 檢查版本 開啟或更新資料庫 使用資料庫

  11. 實作SQLiteOpenHelper類別

  12. Extends SQLiteOpenHelper • 產生新class-MySQLite

  13. 繼承SQLIiteOpenHelper

  14. 尚需要加入建構子

  15. 建構子

  16. 建立資料庫與資料表

  17. 透過建構子建立/取得資料庫透過onCreate建立資料表透過建構子建立/取得資料庫透過onCreate建立資料表 這裡有修正

  18. publicclass MySQLite extends SQLiteOpenHelper { SQLiteDatabase db; // 資料庫物件 public MySQLite(Context context) { super(context, "/sdcard/db2.db", null, 1); db=this.getWritableDatabase(); //將db對應到 /sdcard/db2.db } @Override publicvoid onCreate(SQLiteDatabase db) { // 建立資料表 String DATABASE_TABLE = "member"; String DATABASE_CREATE_TABLE = "create table " + DATABASE_TABLE + "(_id char(20), name char(10), pwd char(10), age integer, primary key(_id));"; db.execSQL(DATABASE_CREATE_TABLE); } @Override publicvoid onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { // TODO自動產生的方法 Stub } }

  19. 提示 • 未來就透過class MySQLite 來操作資料庫 • 資料部分則是透過class MySQLite內的db物件 • 當然操作資料需要透過SQL指令

  20. 使用資料庫

  21. 透過class MySQLite建立資料

  22. publicclass Main extends Activity { MySQLite dbHelper; //透過MySQLite宣告物件dbHelper @Override protectedvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); dbHelper = new MySQLite(this); //建立dbHelper物件 String cmd="insert into member (_id,name,pwd,age) values ('A123','小白','ccc',12)"; dbHelper.db.execSQL(cmd); } }

  23. 使用sqlite3確認

  24. 查詢資料 • 建立查詢方法getdata

  25. privatevoidgetdata(String sql){ Cursor c=dbHelper.db.rawQuery(sql, null); //透過Cursor取得資料 c.moveToNext(); // 將指標移動到第一筆資料 String data=""; for(int i=1;i<=c.getCount();i++){ //取回資料 for(int j=1;j<=c.getColumnCount();j++){ data +=c.getString(j-1); } data +="\n"; c.moveToNext(); } new AlertDialog.Builder(Main.this) //顯示資料 .setTitle("data") .setMessage(data) .setPositiveButton("確認",new DialogInterface.OnClickListener() { publicvoid onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }) .show(); }

  26. 呼叫getdata

  27. 透過ListView顯示資料庫資料

  28. 使用ListActivity 改成ListActivity 刪除

  29. 建立查詢方法getdataByListView

  30. privatevoidgetdataByListView(String sql){ Cursor c=dbHelper.db.rawQuery(sql, null); //透過Cursor取得資料 c.moveToNext(); // 將指標移動到第一筆資料 String[] mStrings = new String[c.getCount()]; for(int i=1;i<=c.getCount();i++){ //取回資料 mStrings[i-1]=new String(c.getString(1)); c.moveToNext(); } //顯示資料 setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,mStrings)); }

  31. 改呼叫getdataByListView

  32. result

  33. 加入onListItemClick偵測點按事件

  34. 加入點按動作 @Override protectedvoid onListItemClick(ListView l, View v, int position, long id) { // TODO自動產生的方法 Stub super.onListItemClick(l, v, position, id); Object o=this.getListAdapter().getItem(position); String keyword=o.toString(); Toast.makeText(Main.this, "選擇了:"+ keyword, Toast.LENGTH_SHORT).show(); }

  35. result

  36. 透過ListView顯示資料 • 假設是在Activity中除了ListView之外,還要放入其他的View時,這時候就需要在Activity中加入一個ListView物件,利用這個ListView的setAdapter來連接Adapter

  37. 版面中加入ListView

  38. 恢復成Activity

  39. 修改getdataByListView

  40. result

  41. 加入setOnItemClickListener

  42. privatevoidgetdataByListView(String sql){ Cursor c=dbHelper.db.rawQuery(sql, null); //透過Cursor取得資料 c.moveToNext(); // 將指標移動到第一筆資料 String[] mStrings = new String[c.getCount()]; for(inti=1;i<=c.getCount();i++){ //取回資料 mStrings[i-1]=new String(c.getString(1)); c.moveToNext(); } //顯示資料 //setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,mStrings)); lv.setAdapter(newArrayAdapter<String>(this,android.R.layout.simple_list_item_1,mStrings)); lv.setOnItemClickListener(newOnItemClickListener(){ @Override publicvoidonItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { String keyword=lv.getItemAtPosition(arg2).toString(); Toast.makeText(Main.this, "選擇了:"+ keyword, Toast.LENGTH_SHORT).show(); } }); }

  43. result

  44. 加入項目勾選設定 lv.setChoiceMode( ListView.CHOICE_MODE_SINGLE );

  45. 資料異動

  46. 再改寫顯示方式 • 新加入getdataBySimpleAdapter方法 記得改呼叫 getdataBySimpleAdapter(cmd_select);

  47. privatevoid getdataBySimpleAdapter(String sql){ Cursor c=dbHelper.db.rawQuery(sql, null); //透過Cursor取得資料 SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_checked, //版面 c, //查詢資料 new String[] {"name","_id"}, //欄位 newint[] { android.R.id.text1 }); //顯示文字 lv.setChoiceMode( ListView.CHOICE_MODE_SINGLE ); //設定可勾選 lv.setAdapter(adapter); lv.setOnItemClickListener(new OnItemClickListener(){ //觸發選按事件 @Override publicvoid onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) { Cursor cursor = (Cursor)lv.getAdapter().getItem(arg2); //arg2是位置 String keyword =cursor.getString(cursor.getColumnIndex("_id")); Toast.makeText(Main.this, "您選擇了: "+ keyword, Toast.LENGTH_LONG).show(); } }); }

  48. 刪除 • 取得要刪除的主鍵(_id)值 • 將刪除功能放入選單

  49. 刪除指令

More Related