建立Android新專案

Similar documents
實作SQLiteOpenHelper類別

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

多媒體應用 13 新增專案並完成版面配置 <ExMusic01> <activity_main.xml> ImageView ID imgplay ImageView ID imgstop ImageView ID imgfront TextView ID txtsong TextView ID t

建立Android新專案

投影片 1

Android Service

Android Fragment

Dynamic Layout in Android

Database_001

建模与图形思考

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

RecyclerView and CardVew

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

建立Android新專案

TPM BIOS Infineon TPM Smart TPM Infineon TPM Smart TPM TPM Smart TPM TPM Advanced Mode...8

基于ECO的UML模型驱动的数据库应用开发1.doc

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

untitled

基于UML建模的管理管理信息系统项目案例导航——VB篇

目錄

untitled

预览图 : (2) 在 SelectCity.java 中增加控件, 用于绑定 select_city 文件的 ListView, TextView,EditTest 等控件 代码和注释如下 :

Android Android Android SDK iv

學 科 100% ( 為 單 複 選 題, 每 題 2.5 分, 共 100 分 ) 1. 請 參 閱 附 圖 作 答 : (A) 選 項 A (B) 選 項 B (C) 選 項 C (D) 選 項 D Ans:D 2. 下 列 對 於 資 料 庫 正 規 化 (Normalization) 的 敘

6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM

Android + NFC

untitled

使用手冊

untitled

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

EJB-Programming-4-cn.doc

EJB-Programming-3.PDF

The golden pins of the PCI card can be oxidized after months or years

Microsoft Word - 02.目錄.doc

建立Android新專案

Microsoft Word - 01.DOC

Android 开发教程

epub83-1

Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

untitled

1-1 database columnrow record field 不 DBMS Access Paradox SQL Server Linux MySQL Oracle IBM Informix IBM DB2 Sybase 1-2

<4D F736F F D20BBF9D3DA416E64726F6964C6BDCCA8B5C4B5E7D7D3C5C4C2F4CFB5CDB32E646F63>

Android 编程基础 Android 开发教程 & 笔记 1

untitled

INTRODUCTION TO COM.DOC

目錄 C ontents Chapter MTA Chapter Chapter

untitled

untitled

RUN_PC連載_12_.doc

untitled

Java

( )... 5 ( ) ( )

数 据 库 系 统 基 础 2/54 第 6 章 数 据 库 管 理 与 维 护

概述

0511-Android程式之GPS應用_專題週記4

書面

PowerPoint 簡報

Oracle高级复制配置手册_业务广告_.doc

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

建模与图形思考

Android + WebService

ebook 165-5

untitled

ASP.NET实现下拉框二级联动组件

ebook 96-16

Microsoft Word - 第1章 Android基本概念.docx

個 人 的 手, 拉 著 瞎 子 的 手 把 他 帶 往 村 外 的 時 候, 對 於 瞎 子 來 講, 那 個 人 的 手 和 耶 穌 的 手 有 沒 有 區 別? 沒 有! 為 什 麼 沒 有 區 別? 因 為 對 於 一 個 瞎 子 來 說, 手 和 耳 朵 就 是 他 接 觸 世 界, 瞭

全国计算机技术与软件专业技术资格(水平)考试

123

ebook46-23

习题1

Microsoft Word zw

Microsoft Office SharePoint Server MOSS Web SharePoint Web SharePoint 22 Web SharePoint Web Web SharePoint Web Web f Lists.asmx Web Web CAML f

《大话设计模式》第一章

SQL Server SQL Server SQL Mail Windows NT

深入理解otter

第8章:android的存储方式(完)

Oracle高级复制冲突解决机制的研究

Oracle 4

行動裝置程式設計

回滚段探究

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

Microsoft Word - ch04三校.doc

未命名

untitled

Lecture01_Android介绍

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

提问袁小兵:

Excel VBA Excel Visual Basic for Application

Microsoft Word - ASM SDK 說明文件

图 6-1 主界面 MainActivity 界面对应的布局文件 (activity_main.xml) 如下所示 : <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

投影片 1

f2.eps

Business Objects 5.1 Windows BusinessObjects 1

JBuilder Weblogic

Transcription:

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

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

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

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 avd my_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 資料表名稱 ( 欄位 1 資料型態, 欄位 2 資料型態,. ); create table member( id char(20) not null, name char(20) not null, pwd char(20) not null, age int, PRIMARY KEY(id) );

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 資料表名稱 ;

SQLite 資料相關 SQL 指令

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_backup 將資料從 member 搬到 member_backup 刪除 member 再新增一個 member, 此時不要含要刪掉的欄位再把資料從 member_backup 搬到 member 完成

更多 SQLite SQL 指令 http://www.newobjects.com/pages/ndl/sqlit e3/sql.htm#alter TABLE

SQLite+Android By SQLiteOpenHelper

SQLite+Android 建立新專案 -HelloDB

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

SQLiteOpenHelper 運作架構 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, int oldv, int newv) } { } 只有在資料庫不存在時才執行 只有在 DatabaseHelper 此建構子有執行時才執行 資料庫版本有更新時才執行

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) { } } @Override public void onupgrade(sqlitedatabase db, int oldv, int newv) { }

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

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

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

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

建立資料表 schema SQLite+Android 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, int oldv, int newv) { } } 建立資料表結構

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

SQLite+Android 為何會錯誤? 跟執行流程有關!

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

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

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

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

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();

實際顯示沒有亂碼 SQLite+Android

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

透過 ListView 顯示資料庫資料

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

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

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

透過 ListView 顯示資料 選了怎麼不會勾選?

透過 ListView 顯示資料 加入 : ListView lv = this.getlistview(); lv.setchoicemode( ListView.CHOICE_MODE_SINGLE ); 修改 :android.r.layout.simple_list_item_checked ListView 勾選效果

透過 ListView 顯示資料 偵測選擇資料

Object o=this.getlistadapter().getitem(position); String keyword=o.tostring(); Toast.makeText(HelloDB.this, "choose:" + keyword, Toast.LENGTH_SHORT).show();

透過 ListView 顯示資資料

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

透過 ListView 顯示資料 main.xml 版面 ListView 物件的 id

透過 ListView 顯示資料 不改 陣列資料

透過 ListView 顯示資料 偵測選擇資料 如果是顯示兩個欄位以上資料 Cursor c = (Cursor) arg0.getitematposition(position); String tablevalue = c.getstring(0);

透過 ListView 顯示資料 ArrayAdapter 中有一個 android 定義好的內建 list 樣式 - android.r.layout.simple_list_item_1, 其它樣式如下所列 : android.r.layout.simple_list_item_1: 一行 text android.r.layout.simple_list_item_2: 一行 text 較大, 一行 text 較小 android.r.layout.simple_list_item_single_choice: 單選 android.r.layout.simple_list_item_multiple_choice: 多選按鈕 android.r.layout.simple_list_item_checked: 勾選盒 第 1 個剛剛有用了, 事實上第 3,4,5 個也是直接換上去就可以看到了 第 2 個 android.r.layout.simple_list_item_2 就比較麻煩, 原因是 ArrayAdapter 並不支援傳入兩個字串參數值, 所以要改用 SimpleAdapter, 而且傳入的數值型態要改為 ArrayList 才可以

透過 ListView 顯示資料 - SimpleAdapter ArrayList SimpleAdapter

透過 ListView 顯示資料 - SimpleAdapter 陣列資料

透過 ListView 顯示資料 - SimpleAdapter private static final String[] mplaces = new String[] { " 台北市 ", " 新北市 ", " 台南市 ", " 高雄市 ", " 苗粟縣 ", " 台北市 ", " 新北市 ", " 台南市 ", " 高雄市 ", " 苗粟縣 ", " 台北市 ", " 新北市 ", " 台南市 ", " 高雄市 ", " 苗粟縣 ", " 台北市 ", " 新北市 ", " 台南市 ", " 高雄市 ", " 苗粟縣 ", " 台北市 ", " 新北市 ", " 台南市 ", " 高雄市 ", " 苗粟縣 ", " 台北市 ", " 新北市 ", "789", "cde", "abc" }; 陣列資料 private static final String[] mfoods = new String[] { " 大餅包小餅 ", " 蚵仔煎 ", " 東山鴨頭 ", " 臭豆腐 ", " 潤餅 ", " 豆花 ", " 青蛙下蛋 "," 豬血糕 ", " 大腸包小腸 ", " 鹹水雞 ", " 烤香腸 "," 車輪餅 "," 珍珠奶茶 "," 鹹酥雞 "," 大熱狗 ", " 炸雞排 "," 山豬肉 "," 花生冰 "," 剉冰 "," 水果冰 ", " 包心粉圓 "," 排骨酥 "," 沙茶魷魚 "," 章魚燒 "," 度小月 ", "aaa","abc","bbb","bcd","123" };

透過 ListView 顯示資料 - SimpleAdapter

透過 ListView 顯示資料 - SimpleAdapter 偵測選擇資料 偵測選擇資料

透過 ListView 顯示資料 - 自訂版面 如果不要用 android 內建的 simple_list_item_2, 改用自己定義的樣式, 要怎麼作呢? 像上面的範例, 再加上一個評分的字串在地點的旁邊 首先先製作一個專用的 layout, 取名為 mylistview.xml

透過 ListView 顯示資料 - 自訂版面 <?xml version="1.0" encoding="utf-8"?> mylistview.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="match_parent" android:layout_width="fill_parent" android:orientation="vertical"> <TextView android:text="textview" android:id="@+id/textview1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginleft="6dip" android:layout_margintop="6dip" android:textappearance="?android:attr/textappearancelarge"> </TextView> <LinearLayout android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/linearlayout1" android:orientation="horizontal"> <TextView android:id= @+id/textview2 android:text= TextView android:layout_height= wrap_content android:layout_width= wrap_content android:textappearance=?android:attr/textappearancesmall > </TextView> <TextView android:text="textview" android:id="@+id/textview3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textappearance="?android:attr/textappearancesmall" android:layout_marginleft="6dip"> </TextView> </LinearLayout> </LinearLayout>

透過 ListView 顯示資料 - 自訂版面 第二個 LinearLayout 要設定成 horizontal

透過 ListView 顯示資料 - 自訂版面 三個改變的地方

透過 ListView 顯示資料 - 自訂版面 陣列資料 private static final String[] mratings = new String[] { "1", "2", "4", "3", "5", "3", "2", "4", "1", "1", "3", "3", "3", "1", "3", "3", "5", "2", "5", "2", "5", "3", "1", "2", "2", "2", "3", "1", "2", "3" };

透過 ListView 顯示資料 - 自訂版面

透過 ListView 顯示資料 - 加入圖片 最後加入圖片到 ListView 吧 圖片需要先放到 res/drawable-xxxx 目錄中 ( 這裡放到 res/drawable-hdpi 中 ) 因為 HashMap 的 value 部份需要用到圖片, 是一個 int 的型態, 所以 HashMap 的 value 部份需要改為 Object, 才能容得下 int 和 string 的類型 修改 mylistview.xml, 加上圖片在標題的左邊

透過 ListView 顯示資料 - 加入圖片 再加入 LinearLayout 與 ImageView LinearLayout 要設定成 horizontal

透過 ListView 顯示資料 - 加入圖片 三個修改的地方

透過 ListView 顯示資料 - 加入圖片 陣列資料 private static final int[] mpics=new int[]{ R.drawable.pic1,R.drawable.pic2,R.drawable.pic3, R.drawable.pic4,R.drawable.pic5, R.drawable.pic1,R.drawable.pic2,R.drawable.pic3, R.drawable.pic4,R.drawable.pic5, R.drawable.pic1,R.drawable.pic2,R.drawable.pic3, R.drawable.pic4,R.drawable.pic5, R.drawable.pic1,R.drawable.pic2,R.drawable.pic3, R.drawable.pic4,R.drawable.pic5, R.drawable.pic1,R.drawable.pic2,R.drawable.pic3, R.drawable.pic4,R.drawable.pic5, R.drawable.pic1,R.drawable.pic2,R.drawable.pic3, R.drawable.pic4,R.drawable.pic5 };

透過 ListView 顯示資料 - 加入圖片 陣列資料

ListView + 資料庫

透過 ListView 顯示資料庫資料 原程式, 用 Toast 顯示資料 用 ListView 取代這裡

透過 ListView 顯示資料庫資料 注意資料表內需要有個 _id 的主鍵欄位 注意使用 ListView 顯示資料, 需要修改 extends Activity 變成 ListActivity 需刪掉 setcontentview(r.layout.main);

透過 ListView 顯示資料庫資料 String[] from = new String[]{"name","pwd","_id"}; // 一定要有 _id 才行 int[] to = new int[]{android.r.id.text1}; Cursor c1 = db.query("member", from, null, null, null, null, "_id ASC"); startmanagingcursor(c1); // 多資料欄位 ListAdapter adapter = new SimpleCursorAdapter(this, android.r.layout.simple_list_item_2,c1, new String[] {"name","pwd"}, new int[] {android.r.id.text1, android.r.id.text2 }); setlistadapter(adapter);

透過 ListView 顯示資料庫資料

透過 ListView 顯示資料庫資料 兩列字體大小不同 改這個屬性

透過 ListView 顯示資料庫資料

透過 ListView 顯示資料庫資料 直接顯示資料 偵測選擇資料

透過 ListView 顯示資料庫資料 偵測選擇資料 @Override protected void onlistitemclick(listview l, View v, int position, long id) { super.onlistitemclick(l, v, position, id); // Get the item that was clicked // 直接顯示資料 Cursor cursor = (Cursor)this.getListAdapter().getItem(position); String keyword =cursor.getstring(cursor.getcolumnindex("_id")); Toast.makeText(this, " 您選擇了 : " + keyword, Toast.LENGTH_LONG).show(); }

透過 ListView 顯示資料庫資料 透過另一頁 (DataDetails) 顯示資料注意要加入 <activity android:name="datadetails"></activity> 傳送資料

透過 ListView 顯示資料庫資料 透過另一頁 (DataDetails) 顯示資料注意要加入 <activity android:name="datadetails"></activity> @Override protected void onlistitemclick(listview l, View v, int position, long id) { super.onlistitemclick(l, v, position, id); // Get the item that was clicked //* 跳頁顯示資料 Intent intent = new Intent(this, Page2.class); Cursor cursor = (Cursor)this.getListAdapter().getItem(position); intent.putextra("employee_id", cursor.getint(cursor.getcolumnindex("_id"))); startactivity(intent); }

透過 ListView 顯示資料庫資料 DataDetails.java 接收資料

加入版面 main.xml 修改

修改 I

修改 II

dbhelper = new DatabaseHelper(this); db = dbhelper.getwritabledatabase(); tv1=(edittext)findviewbyid(r.id.edittext1); tv2=(edittext)findviewbyid(r.id.edittext2); tv3=(edittext)findviewbyid(r.id.edittext3); bt1=(button)findviewbyid(r.id.button1); 修改 mid = this.getintent().getextras().getstring("employee_id"); // 查詢資料 String cmd_select="select * from member where _id='" + mid + "';"; //Toast.makeText(DataDetails.this, cmd_select, Toast.LENGTH_LONG).show(); Cursor c = db.rawquery(cmd_select, null); // 執行 SQL 指令, 進行資料查詢 if(c.movetofirst()){ // 有資料才顯示 tv1.settext(c.getstring(2)); // 密碼 tv2.settext(c.getstring(c.getcolumnindex("name"))); // 姓名 tv3.settext(string.valueof(c.getint(c.getcolumnindex("age")))); // 年齡 //c.close(); }else{ Toast.makeText(DataDetails.this, " 找不到任何資料 ", Toast.LENGTH_LONG).show(); return; } /* 修改的 Button */ bt1.setonclicklistener(new Button.OnClickListener(){ public void onclick(view v) { String cmd="update member set name='" + tv2.gettext() + "',pwd='" + tv1.gettext() + "',age=" + tv3.gettext() + " where _id='" + mid + "';"; db.execsql(cmd); // 執行 SQL 指令, 進行資料修改 Toast.makeText(DataDetails.this, " 資料修改完成 ", Toast.LENGTH_LONG).show(); } });

小迷思 應改成 cursor.getstring, 否則將取不到值 接收端 : mid = this.getintent().getextras().getstring("employee_id");

刪除 /* 刪除的 Button */ bt2.setonclicklistener(new Button.OnClickListener(){ public void onclick(view v) { db.delete("member", "_id='" + mid + "'", null); Toast.makeText(DataDetails.this, " 資料刪除完成 ", Toast.LENGTH_LONG).show(); } });

選單 使用手機硬體上的 MENU 鍵進行呼叫顯示 建立選單 oncreateoptionsmenu 處理選項動作 onoptionsitemselected

選單基本結構 建立選單 oncreateoptionsmenu 處理選項動作 onoptionsitemselected

加入選單選項 加入選項 menu.add(0, 識別符號, 0, 顯示文字 ) menu.add(0, MENU_ABOUT, 0, " 關於 BMI").setIcon(android.R.drawable.ic_menu_help); menu.add(0, MENU_QUIT, 0, " 結束 BMI").setIcon(android.R.drawable.ic_menu_close_clear_cancel);

選單

處理選項動作 處理選項動作 onoptionsitemselected

protected static final int MENU_ABOUT=Menu.FIRST; protected static final int MENU_QUIT=Menu.FIRST+1; @Override public boolean oncreateoptionsmenu(menu menu) { // TODO Auto-generated method stub menu.add(0, MENU_ABOUT, 0, " 關於 BMI").setIcon(android.R.drawable.ic_menu_help); menu.add(0, MENU_QUIT, 0, " 結束 BMI").setIcon(android.R.drawable.ic_menu_close_clear_cancel); return super.oncreateoptionsmenu(menu); } @Override public boolean onoptionsitemselected(menuitem item) { // TODO Auto-generated method stub switch(item.getitemid()){ case MENU_ABOUT: break; case MENU_QUIT: break; } return super.onoptionsitemselected(item); }

加入版面 main1.xml 新增

新增

新增 dbhelper = new DatabaseHelper(this); db = dbhelper.getwritabledatabase(); tv1=(edittext)findviewbyid(r.id.edittext1); tv2=(edittext)findviewbyid(r.id.edittext2); tv3=(edittext)findviewbyid(r.id.edittext3); tv4=(edittext)findviewbyid(r.id.edittext4); bt1=(button)findviewbyid(r.id.button1); /* 新增的 Button */ bt1.setonclicklistener(new Button.OnClickListener(){ public void onclick(view v) { String cmd="insert into member (_id, name, pwd, age) values ('" + tv1.gettext() + "','" + tv3.gettext() + "','" + tv2.gettext() + "'," + tv4.gettext() + ");"; db.execsql(cmd); // 執行 SQL 指令, 進行資料新增 Toast.makeText(NewData.this, " 資料新增完成 ", Toast.LENGTH_LONG).show(); Intent it1=new Intent(); it1.setclass(newdata.this, ListViewDB.class); startactivity(it1); NewData.this.finish(); } });

小練習 在 DataDetails 上設計四個 TextView 物件 透過傳進來的 EMPLOYEE_ID, 再到資料庫查詢詳細資料, 將其顯示到上面四個 TextView 中

預告 怎麼連結外部 DB 透過 WebService 透過 HttpPost 或 HttpGet

資料庫補充

SQLite Manager 透過它的介面管理 SQLite

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

SQLite Manager 直接開啟 SQLIte database 有 UI 介面比較好操作

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

動態 SQL 指令 撰寫動態 SQL 指令的步驟

動態 SQL 指令 全部都從基本指令開始 欄位型態是文字或日期, 對應的值要加單引號 注意空白 不分大小寫 新增 Insert into 資料表 ( 欄位 s) values ( 值 s) 刪除 delete from 資料表 where 條件 修改 update 資料表 set 欄位 s= 新值 s where 條件 查詢 select 欄位 from 資料表 [where 條件 ]

動態 SQL 指令 1. 用假資料先寫出正確的 SQL 指令 對不對, 問 SQLite 2. 用程式取代假資料 3. 用雙引號將程式與原 SQL 指令切開 SQL 指令是字串, 與程式要切開 4. 用加號將切開位置串起來 把最後完成的結果貼回程式內

動態 SQL 指令 1. 用假資料先寫出正確的 SQL 指令 update member set name= aaa,age=55 where _id = A123 2. 用程式取代假資料 update member set name= name.gettext(),age=age.gettext() where _id = get_id 3. 用雙引號將程式與原 SQL 指令切開 update member set name= name.gettext(),age= age.gettext() where _id = get_id 4. 用加號將切開位置串起來 update member set name= + name.gettext() +,age= + age.gettext() + where _id = + get_id +

動態 SQL 指令 1. 用假資料先寫出正確的 SQL 指令 Select * from member where _id = A123 2. 用程式取代假資料 Select * from member where _id= get_id 3. 用雙引號將程式與原 SQL 指令切開 Select * from member where _id= get_id % 4. 用加號將切開位置串起來 Select * from member where _id= + get_id +