1 / 124

Android 資料庫處理

Android 智慧型手機程式設計 程式設計與應用班. Android 資料庫處理. 建國科技大學 資管系 饒瑞佶 2012/4 V1 2012/8 V2. Android 資料庫- SQLite. 資料庫 SQLite 檔案式資料庫 適合嵌入式系統,不需要額外安裝系統 OPEN SOURCE 資料庫 SQL 指令與一般 DBMS 大同小異,但有些微差異. SQLite. Android. 結構 1. 資料. class DatabaseHelper extends SQLiteOpenHelper. 結構 2. SQL 指令. 資料.

gizi
Download Presentation

Android 資料庫處理

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. Android智慧型手機程式設計 程式設計與應用班 Android資料庫處理 建國科技大學 資管系 饒瑞佶 2012/4 V1 2012/8 V2

  2. Android資料庫-SQLite • 資料庫 • SQLite • 檔案式資料庫 • 適合嵌入式系統,不需要額外安裝系統 • OPEN SOURCE資料庫 • SQL指令與一般DBMS大同小異,但有些微差異

  3. SQLite Android 結構1 資料 class DatabaseHelper extends SQLiteOpenHelper 結構2 SQL指令 資料 adb shell + sqlite3+SQL指令

  4. SQLite管理 adb shell + sqlite3 提醒…這也只是其中一種方法

  5. SQLite操作-adb shell • 沒有AVD或是手機 沒有連線的device

  6. SQLite操作-adb shell • 先用android list avd 看可以用的AVD 可用的AVD

  7. SQLite操作-adb shell • 再使用emulator –avd <AVD名稱>啟動一個AVD • 例如:emulator –avd my_avd –sdcard img檔位置 啟動中的my_avd 記得要有sdcard

  8. SQLite操作-adb shell • my_avd模擬器

  9. SQLite操作-adb shell • 再次執行adb shell,就可以看到#提示符號 #提示符號

  10. SQLite操作-adb shell • 建議進入sdcard或mnt\sdcard內建立目錄存放資料庫 進入sdcard 在sdcard內建立mydb目錄 進入mydb目錄

  11. SQLite操作-adb shell • 請在#提示符號後輸入sqlite3 <資料庫名稱> • 例如sqlite3 db1 • 如果資料庫不存在會自動建立,可以看到sqlite>提示符號 sqlite>提示符號

  12. SQLite操作-adb shell • 離開是.quit (注意有一個.) • 現在可以開始操作db1資料庫 • 使用SQL指令進行操作,包括: • 建立欄位與資料表(結構部分) • 建立資料(資料部分) • 維護資料(資料部分)

  13. SQLite結構相關SQL指令 不分大小寫

  14. SQL指令-結構操作 • create table:建立資料表 • 藍色是要填資料的部分,其它是固定語法 • 所有SQL指令都要以;結束 • create table member( • id char(20) not null, • name char(20) not null, • pwd char(20) not null, • age int, • PRIMARY KEY(id) • ); • create table資料表名稱 ( • 欄位1 資料型態, • 欄位2 資料型態, • …. • );

  15. SQL指令-結構操作 • .tables:可以查看目前資料庫內存在的資料表 • .help:可以看sqlite3所有指令 沒有任何資料表

  16. SQL指令-結構操作 • create table:建立資料表 member資料表已經被建立

  17. SQL指令-結構操作 • .schema:查看資料表結構 member資料表結構

  18. SQL指令-結構操作 • alter table:更改資料表結構 增加欄位 • alter table資料表名稱 add 欄位1 資料型態; 更改資料表名稱 • alter table資料表名稱 rename to 新資料表名稱; • drop table:刪除資料表 • drop table資料表名稱;

  19. SQLite資料相關SQL指令

  20. SQL指令-資料操作 • insert:新增資料 所有資料都要加上單引號 • insert into 資料表名稱 (欄位1,欄位2…) values (‘資料1’,’資料2’…); Insert into member (id,name,pwd,age) values ('A123','小叮噹','1111',20); 已在member資料表中新增一筆資料

  21. SQL指令-資料操作 • Select:篩選資料 • select 欄位s from資料表名稱 where條件; Select * from member; 加入where條件

  22. SQL指令-資料操作 • update:更新資料 • update 資料表名稱 set 欄位=‘新值’… where條件; update member set name=‘大寶' where id='A123'; 姓名改成大寶

  23. SQL指令-資料操作 • delete:刪除資料 • Delete from 資料表名稱 where條件; delete from member where id='A123'; 先新增一筆資料 刪除剛新增的資料

  24. SQL指令-結構操作 • SQLite沒有刪除欄位的指令,例如 ALTER TABLE DROP COLUMN • 那怎麼辦?

  25. SQL指令-結構操作 新增一個備份資料庫member_backup 將資料從member搬到member_backup 刪除member 再新增一個member,此時不要含要刪掉的欄位 再把資料從member_backup搬到member 刪除member_backup 完成

  26. 更多SQLite SQL指令 • http://www.newobjects.com/pages/ndl/SQLite3/sql.htm#ALTER TABLE

  27. SQLite+Android By SQLiteOpenHelper

  28. SQLite+Android • 建立新專案-HelloDB

  29. Android+SQLite使用方式 • 引用class SQLiteOpenHelper • 建立SQLiteOpenHelper 物件 • 透過SQLiteOpenHelper 物件建立database物件 • 透過database物件存取資料 記得要開android.permission.WRITE_EXTERNAL_STORAGE

  30. SQLiteOpenHelper運作架構 與APK建立在一起 class DatabaseHelper extends SQLiteOpenHelper { public DatabaseHelper(Context context) { super(context, “db2.db", null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(DATABASE_CREATE_TABLE); //新增資料表 } @Override public void onUpgrade(SQLiteDatabase db, int oldV, int newV) { } } 只有在資料庫不存在時才執行 只有在DatabaseHelper此建構子有執行時才執行 資料庫版本有更新時才執行

  31. SQLite+Android • 首先,在主程式中加入SQLiteOpenHelper結構 必要的class 建立db2.db資料庫 資料庫第一次建立時會執行onCreate 資料庫異動版本時會執行onUpgrade

  32. SQLite+Android • SQLiteOpenHelper結構 // SQLite資料庫使用必要class ------------------------ String DATABASE_TABLE = "member"; String DATABASE_CREATE_TABLE = "create table " + DATABASE_TABLE + "(_id char(20), name, pwd, age, primary key(_id));"; class DatabaseHelper extends SQLiteOpenHelper { public DatabaseHelper(Context context) { super(context, "/sdcard/db2.db", null, 1); } @Override public void onCreate(SQLiteDatabase db) { } @Override public void onUpgrade(SQLiteDatabase db, int oldV, int newV) { } } 如果要建立到sdcard

  33. SQLite+Android • 從class HelloDB呼叫DatabaseHelper建立資料庫 建立DatabaseHelper物件 呼叫建立db2.db資料庫

  34. code DatabaseHelper dbHelper; SQLiteDatabase db; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.my_db); dbHelper=new DatabaseHelper(this); db=dbHelper.getWritableDatabase(); }

  35. SQLite+Android • 資料庫被建立在data/data/com.android.hellodb

  36. SQLite+Android • 資料庫被建立在data/data/com.android.hellodb

  37. SQLite+Android • 有資料庫後,下一步要建立資料 新增資料 定義資料表結構 建立資料表

  38. 建立資料 String cmd="insert into " + DATABASE_TABLE + " (_id,name,pwd,age) values ('c123','小黑','ccc',12)"; db.execSQL(cmd);

  39. SQLite+Android • 為何會錯誤? 跟執行流程或 資料庫設定有關!

  40. SQLite+Android • 幾點注意! 1.下面這段只有在資料庫第一次被建立時才會進行,所以如果資料庫已經存在,那就不會建立資料表,當然也就不能寫入資料 上張投影片的錯誤就是因為我們已經先建立db2.db,因此再次執行程式時,並不會建立資料表,導致下面程式出錯

  41. SQLite+Android • 正常執行結果 資料庫 資料表 資料 中文資料有亂碼

  42. 到此為止,同樣的程式再執行一次會出現錯誤,WHY?到此為止,同樣的程式再執行一次會出現錯誤,WHY?

  43. SQLite+Android • 最後,可以進行資料查詢 再新增一筆資料(小黑) SQL查詢指令 資料移動到第一筆 顯示資料

  44. String cmd_select="select * from " + DATABASE_TABLE; Cursor c=db.rawQuery(cmd_select, null); 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(HelloDB.this) .setTitle("data") .setMessage(data) .setPositiveButton("確認",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }) .show();

  45. SQLite+Android • 實際顯示沒有亂碼

  46. 小練習 • 使用上述課程member資料表 • 設計一個登入畫面,可以讓使用者輸入帳號與密碼 • 輸入完成後按下「確認」按鈕後,連回資料庫內的member 資料表進行確認(id與pwd欄位) • 輸入正確者跳至下一個頁面(自訂),錯誤者請跳出訊息提示框

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

  48. 透過ListView顯示資料整個版面都用ListActivity 改成ListActivity 刪除

  49. 透過ListView顯示資料 ArrayAdapter 陣列資料

  50. 透過ListView顯示資料 setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,mStrings)); getListView().setTextFilterEnabled(true); 陣列資料 private static final String[] mStrings = new String[] { "大餅包小餅", "蚵仔煎", "東山鴨頭", "臭豆腐", "潤餅", "豆花", "青蛙下蛋","豬血糕", "大腸包小腸", "鹹水雞", "烤香腸","車輪餅","珍珠奶茶","鹹酥雞","大熱狗", "炸雞排","山豬肉","花生冰","剉冰","水果冰", "包心粉圓","排骨酥","沙茶魷魚","章魚燒","度小月", "aaa","abc","bbb","bcd","123" };

More Related