910 likes | 1.13k Views
Android 資料庫處理. 建國科技大學 資管系 饒瑞佶 2011/1. Android 資料庫- SQLite. 資料庫 SQLite 檔案式資料庫 適合嵌入式系統,不需要額外安裝系統 OPEN SOURCE 資料庫 SQL 指令與一般 DBMS 大同小異,但有些微差異. SQLite 管理. adb shell + sqlite3. SQLite 操作- adb shell. 沒有 AVD 或是手機. 沒有連線的 device. SQLite 操作- adb shell. 先用 android list avd 看可以用的 AVD.
E N D
Android資料庫處理 建國科技大學 資管系 饒瑞佶 2011/1
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 • 離開是.quit (注意有一個.) • 現在可以開始操作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 • 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) { db.execSQL(DATABASE_CREATE_TABLE); //新增資料表 } @Override public void onUpgrade(SQLiteDatabase db, intoldV, intnewV) { } }
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 • 建立資料表schema 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) { db.execSQL(DATABASE_CREATE_TABLE); //新增資料表 } @Override public void onUpgrade(SQLiteDatabase db, intoldV, intnewV) { } } 建立資料表結構
SQLite+Android • 為何會錯誤? 跟執行流程有關!
SQLite+Android • 幾點注意! 1.下面這段只有在資料庫第一次被建立時才會進行,所以如果資料庫已經存在,那就不會建立資料表,當然也就不能寫入資料 上張投影片的錯誤就是因為我們已經先建立db2.db,因此再次執行程式時,並不會建立資料表,導致下面程式出錯
SQLite+Android • 正常執行結果 資料庫 資料表 資料 中文資料有亂碼
SQLite+Android • 最後,可以進行資料查詢 再新增一筆資料(小黑) SQL查詢指令 資料移動到第一筆 顯示資料
SQLite+Android • 實際顯示沒有亂碼
小練習 • 使用上述課程member資料表 • 設計一個登入畫面,可以讓使用者輸入帳號與密碼 • 輸入完成後按下「確認」按鈕後,連回資料庫內的member 資料表進行確認(id與pwd欄位) • 輸入正確者跳至下一個頁面(自訂),錯誤者請跳出訊息提示框
透過ListView顯示資料整個版面都用ListActivity 改成ListActivity 刪除
透過ListView顯示資料 ArrayAdapter 陣列資料
透過ListView顯示資料 陣列資料 private static final String[] mStrings = new String[] { "大餅包小餅", "蚵仔煎", "東山鴨頭", "臭豆腐", "潤餅", "豆花", "青蛙下蛋","豬血糕", "大腸包小腸", "鹹水雞", "烤香腸","車輪餅","珍珠奶茶","鹹酥雞","大熱狗", "炸雞排","山豬肉","花生冰","剉冰","水果冰", "包心粉圓","排骨酥","沙茶魷魚","章魚燒","度小月", "aaa","abc","bbb","bcd","123" };
透過ListView顯示資料 選了怎麼不會勾選?
透過ListView顯示資料 加入: ListViewlv = this.getListView(); lv.setChoiceMode( ListView.CHOICE_MODE_SINGLE ); 修改:android.R.layout.simple_list_item_checked ListView勾選效果
透過ListView顯示資料 偵測選擇資料
透過ListView顯示資料 • 假設是在Activity中除了ListView之外,還要放入其他的組件時,這時候就需要在Activity中加入一個ListView物件,利用這個組件的setAdapter來連接Adapter
透過ListView顯示資料 main.xml版面 ListView物件的id