Database_001

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

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

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

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

實作SQLiteOpenHelper類別

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

ShareText

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

Android Service

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

建模与图形思考

Microsoft Word - 01.DOC

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

JavaIO.PDF

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

Dynamic Layout in Android

Java

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

untitled

Chapter 9: Objects and Classes

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:


KillTest 质量更高 服务更好 学习资料 半年免费更新服务

EJB-Programming-4-cn.doc

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

建立Android新專案

2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

投影片 1

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

《大话设计模式》第一章

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

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

untitled

Microsoft Word - 02.目錄.doc

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

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

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

3.1 num = 3 ch = 'C' 2

题目

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

建立Android新專案

Guide to Install SATA Hard Disks

CC213

Guava学习之Resources


FileMaker 15 ODBC 和 JDBC 指南

Swing-02.pdf

FileMaker 16 ODBC 和 JDBC 指南

javaexample-02.pdf

untitled

Android + NFC

AL-M200 Series

ebook39-6

"+handlermethod.getbean().getclass().getname()); public void aftercompletion(httpservletrequest req, HttpServletResponse resp, Object handler, Excepti

untitled

Microsoft Word - ch04三校.doc

目錄

RecyclerView and CardVew

Android Android Android SDK iv

java2d-4.PDF

新版 明解C++入門編

K7VT2_QIG_v3

0SQL SQL SQL SQL SQL 3 SQL DBMS Oracle DBMS DBMS DBMS DBMS RDBMS R DBMS 2 DBMS RDBMS R SQL SQL SQL SQL SELECT au_fname,au_ lname FROM authors ORDER BY

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

使用MapReduce读取XML文件

untitled

chp6.ppt

RxJava

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 Fragment

ebook39-5

9, : Java 19., [4 ]. 3 Apla2Java Apla PAR,Apla2Java Apla Java.,Apla,,, 1. 1 Apla Apla A[J ] Get elem (set A) A J A B Intersection(set A,set B) A B A B

epub83-1

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile..

Transcription:

作者 : 林致宇日期 :2011/10/26 主要參考來源 : http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applicat ions/ 問題 : 如在存取一個已經建立好的資料庫? 解答 : 有一些應用程式會需要讀取已經建立好的資料庫, 例如一個試題測驗應用程式, 裡面的試題可能已經於電腦上, 使用任何的 SQLite 資料庫產生工具, 產生一個資料庫檔案 ( 例如 :questions.db), 我們會希望我們的應用程式能夠直接讀取這個檔案, 而不是在應用程式第一次執行時, 利用程式去做 INSERT 的動作, 下面將示範如何實作出這樣的功能 建立資料庫檔案 第一個步驟是產生 SQLite 資料庫檔案, 產生資料庫檔案的工具很多, 其中一個是到 SQLite 的官方網站 [1] 下載, 以 Windows 作業系統為例, 網站有提供一個已經編譯好的命令列工具 sqlite3.exe, 首先進入 Windows 所提供的 命令提示字元, 進入放置 sqlite3.exe 的資料夾後就可以執行它, 執行時後面加個檔案名稱當參數, 下面是一個範例 : C:\>sqlite3 questions.db SQLite version 3.7.8 2011-09-19 14:49:19 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> create table questions(_question, _type, _answer); sqlite> insert into questions values("1+1", "Math", "2"); sqlite>.exit 在上面的範例中, 粗體是自行輸入的部份, 我們做了兩件事, 首先建立一個表格, 接著再插入一筆資料到表格內, 我們可以再次執行 sqlite3, 來驗證資料是否有正確被寫入 : C:\>sqlite3 questions.db SQLite version 3.7.8 2011-09-19 14:49:19 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> select * from questions;

1+1 Math 2 除了此命令列工具之外, 當然還有其它具有較佳介面的工具可以使用, 例如網站 [2] 所介紹的 SQLite Database Browser, 讀者可至網站 [2] 下載 然而為了讓資料庫能夠正常地被 Android 所讀取, 有兩點必須注意 : 表格必須有一個名為 _id 的欄位, 且 type 要設成 INTEGER PRIMARY KEY 必須建立一個名為 android_metadata 的表格, 表格中要建立一個名為 locale 的欄位, 經筆者的測試, 我們不需要新增任何記錄 程式碼的撰寫 此處主要是參考網站 [2] 的說明而改寫的, 專案裡面共有兩個檔案 : DatabaseHelper.java 1 package lincyu.demo.database_from_outside; 2 3 import java.io.fileoutputstream; 4 import java.io.inputstream; 5 import java.io.outputstream; 6 7 import android.content.context; 8 import android.database.sqlite.sqlitedatabase; 9 import android.database.sqlite.sqliteexception; 10 import android.database.sqlite.sqliteopenhelper; 11 12 class DatabaseHelper extends SQLiteOpenHelper { 13 14 private static String DB_PATH = 15 "/data/data/" + 16 "lincyu.demo.database_from_outside" + 17 "/databases/"; 18 private static String DB_NAME = "questions.db"; 19 20 private final Context mctx; 21 22 public DatabaseHelper(Context context) { 23 super(context, DB_NAME, null, 1);

24 this.mctx = context; 25 } 26 27 public boolean createdatabase() { 28 boolean dbexist = checkdatabase(); 29 this.getreadabledatabase(); 30 if (dbexist == false) { 31 if (copydatabase() == false) { 32 return false; 33 } 34 } 35 return true; 36 } 37 38 private boolean checkdatabase() { 39 SQLiteDatabase checkdb = null; 40 String dbpath = DB_PATH + DB_NAME; 41 try { 42 checkdb = SQLiteDatabase.openDatabase(dbpath, 43 null, SQLiteDatabase.OPEN_READONLY); 44 } catch (SQLiteException e) { 45 return false; 46 } 47 if (checkdb!= null) { 48 checkdb.close(); 49 return true; 50 } 51 return false; 52 } 53 54 private boolean copydatabase() { 55 try { 56 InputStream input = mctx.getassets().open(db_name); 57 this.getreadabledatabase(); 58 String outfilename = DB_PATH + DB_NAME; 59 OutputStream output = 60 new FileOutputStream(outFileName); 61 byte [] buffer = new byte[1024];

62 int length; 63 while ((length = input.read(buffer)) > 0) { 64 output.write(buffer, 0, length); 65 } 66 output.flush(); 67 output.close(); 68 input.close(); 69 } catch (Exception e) { 70 return false; 71 } 72 return true; 73 } 74 75 @Override 76 public void oncreate(sqlitedatabase db) { 77 } 78 79 @Override 80 public void onupgrade(sqlitedatabase db, int oldv, int newv) { 81 } 82 } Database_From_Outside.java 1 package lincyu.demo.database_from_outside; 2 3 import android.app.activity; 4 import android.database.cursor; 5 import android.database.sqlite.sqlitedatabase; 6 import android.os.bundle; 7 import android.view.view; 8 import android.view.view.onclicklistener; 9 import android.widget.button; 10 import android.widget.textview; 11 import android.widget.toast; 12 13 public class Database_From_Outside extends Activity { 14 /** Called when the activity is first created. */ 15 @Override

16 public void oncreate(bundle savedinstancestate) { 17 super.oncreate(savedinstancestate); 18 setcontentview(r.layout.main); 19 20 DatabaseHelper dbhelper = new DatabaseHelper(this); 21 22 if (dbhelper.createdatabase() == false) { 23 Toast.makeText(this, " 無法建立 / 開啟資料庫 ", 24 Toast.LENGTH_SHORT).show(); 25 finish(); 26 return; 27 } 28 29 SQLiteDatabase db = dbhelper.getreadabledatabase(); 30 31 Cursor c = db.rawquery("select * from questions", null); 32 33 if (c.getcount() == 0) { 34 Toast.makeText(this, " 資料庫內無任何資料 ", 35 Toast.LENGTH_SHORT).show(); 36 finish(); 37 return; 38 } 39 c.movetofirst(); 40 41 final String question, answer; 42 43 question = c.getstring(c.getcolumnindex("_question")); 44 answer = c.getstring(c.getcolumnindex("_answer")); 45 46 db.close(); 47 48 TextView tv = (TextView)findViewById(R.id.question); 49 tv.settext(question); 50 51 Button btn = (Button)findViewById(R.id.btn_show_answer); 52 btn.setonclicklistener(new OnClickListener() { 53 public void onclick(view arg0) {

54 Toast.makeText(Database_From_Outside.this, 55 answer, Toast.LENGTH_SHORT).show(); 56 } 57 }); 58 } 59 } 程式測試 如果出現下面的畫面, 就代表資料庫被成功地讀取了 參考資料 : [1] SQLite Home Page, http://www.sqlite.org/ [2] Using your own SQLite database in Android applications ReignDesign, http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applicat ions/