460 likes | 651 Views
Android 資料庫處理. 建國科技大學 資管系 饒瑞佶 2011/1. M VC Model. Model-View-Controller Model :儲存內容 View :顯示介面 Controller : 控制程式操作. 使用者. View. 要求動作. 顯示內容. Controller. 查詢資料. Model. 提供資料. Android 資料庫- SQLite. 資料庫 SQLite 檔案式資料庫 適合嵌入式系統,不需要額外安裝系統 OPEN SOURCE 資料庫 SQL 指令與一般 DBMS 大同小異,但有些微差異.
E N D
Android資料庫處理 建國科技大學 資管系 饒瑞佶 2011/1
MVCModel • Model-View-Controller • Model:儲存內容 • View:顯示介面 • Controller:控制程式操作 使用者 View 要求動作 顯示內容 Controller 查詢資料 Model 提供資料
Android資料庫-SQLite • 資料庫 • SQLite • 檔案式資料庫 • 適合嵌入式系統,不需要額外安裝系統 • OPEN SOURCE資料庫 • SQL指令與一般DBMS大同小異,但有些微差異
SQLite管理 adb shell + sqlite3
SQLite操作-adb shell • 沒有AVD或是手機 沒有連線的device
SQLite操作-adb shell • 先用android list avd看可以用的AVD 可用的AVD
SQLite操作-adb shell • 再使用emulator –avd <AVD名稱>啟動一個AVD • 例如:emulator –avdmy_avd 啟動中的my_avd
SQLite操作-adb shell • my_avd模擬器
SQLite操作-adb shell • 再次執行adb shell,就可以看到#提示符號 #提示符號
SQLite操作-adb shell • 建議進入sdcard內建立目錄存放資料庫 進入sdcard 在sdcard內建立mydb目錄 進入mydb目錄
SQLite操作-adb shell • 請在#提示符號後輸入sqlite3 <資料庫名稱> • 例如sqlite3 db1 • 如果資料庫不存在會自動建立,可以看到sqlite>提示符號 sqlite>提示符號
SQLite操作-adb shell • 現在可以開始操作db1資料庫 • 使用SQL指令進行操作,包括: • 建立欄位與資料表(結構部分) • 建立資料(資料部分) • 維護資料(資料部分)
SQLite結構相關SQL指令 不分大小寫
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 資料型態, • …. • );
SQL指令-結構操作 • .tables:可以查看目前資料庫內存在的資料表 • .help:可以看sqlite3所有指令 沒有任何資料表
SQL指令-結構操作 • create table:建立資料表 member資料表已經被建立
SQL指令-結構操作 • .schema:查看資料表結構 member資料表結構
SQL指令-結構操作 • alter table:更改資料表結構 增加欄位 • alter table資料表名稱 add欄位1 資料型態; 更改資料表名稱 • alter table資料表名稱 rename to新資料表名稱; • drop table:刪除資料表 • drop table資料表名稱;
SQL指令-資料操作 • insert:新增資料 所有資料都要加上單引號 • insert into 資料表名稱 (欄位1,欄位2…) values (‘資料1’,’資料2’…); 已在member資料表中新增一筆資料
SQL指令-資料操作 • Select:篩選資料 • select 欄位s from資料表名稱 where條件; 加入where條件
SQL指令-資料操作 • update:更新資料 • update 資料表名稱 set 欄位=‘新值’… where條件; 姓名改成大寶
SQL指令-資料操作 • delete:刪除資料 • Delete from 資料表名稱 where條件; 先新增一筆資料 刪除剛新增的資料
SQL指令-結構操作 • SQLite沒有刪除欄位的指令,例如 ALTER TABLE DROP COLUMN • 那怎麼辦?
SQL指令-結構操作 新增一個備份資料庫member_backup 將資料從member搬到member_backup 刪除member 再新增一個member,此時不要含要刪掉的欄位 再把資料從member_backup搬到member 刪除member_backup 完成
更多SQLite SQL指令 • http://www.newobjects.com/pages/ndl/SQLite3/sql.htm#ALTER TABLE
SQLite+Android • 建立新專案-HelloDB
SQLite+Android • 首先,在主程式中加入SQLiteOpenHelper結構 必要的class 建立db2.db資料庫 資料庫第一次建立時會執行onCreate 資料庫異動版本時會執行onUpgrade
SQLite+Android • 從class HelloDB呼叫DatabaseHelper建立資料庫 建立DatabaseHelper物件 呼叫建立db2.db資料庫
SQLite+Android • 資料庫被建立在data/data/com.android.hellodb
SQLite+Android • 資料庫被建立在data/data/com.android.hellodb
SQLite+Android • 有資料庫後,下一步要建立資料表與資料 新增資料 定義資料表結構 建立資料表
SQLite+Android • 為何會錯誤? 跟執行流程有關!
SQLite+Android • 幾點注意! 1.下面這段只有在資料庫第一次被建立時才會進行,所以如果資料庫已經存在,那就不會建立資料表,當然也就不能寫入資料 上張投影片的錯誤就是因為我們已經先建立db2.db,因此再次執行程式時,並不會建立資料表,導致下面程式出錯
SQLite+Android • 正常執行結果 資料庫 資料表 資料 中文資料有亂碼
SQLite+Android • 最後,可以進行資料查詢 再新增一筆資料(小黑) SQL查詢指令 資料移動到第一筆 顯示資料
SQLite+Android • 實際顯示沒有亂碼
連結外部DB • 不直接接觸DB • 透過外部php或ASP.NET程式連結資料庫 • Android再呼叫外部php或ASP.NET程式 • 可以傳遞參數
連結外部DB • WebLogin專案
連結外部DB • WebLogin專案
連結Web Service • 不直接接觸DB • 透過Web Service連結資料庫 • Android再呼叫外部Web Service • 可以傳遞參數
連結Web Service • Sample CallWebService專案 • 使用ksoap2-android • 下載位置:http://code.google.com/p/ksoap2-android/source/browse/m2-repo/com/google/code/ksoap2-android/ksoap2-android-assembly/2.5.2/ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar • 注意DNS問題
連結Web Service • 使用ksoap2-android • 下載後如果副檔名是zip,請更改成jar • 請在project中加入本jar 1 2 3
連結Web Service • 注意DNS問題 • 若執行出現 host is unresolved的問題 • 解決方法 adbshell #getprop<<查看屬性設定 [net.dns1]: [192.168.2.1] <<某一筆是 net.dns1 就是目前的設定 #setpropnet.dns1 168.95.1.1 <<設定成可以用的DNS
連結Web Service • xx