如何使用Android與外部資料庫做存取 - Android

Jessica avatar
By Jessica
at 2010-07-15T17:20

Table of Contents

因為我之前的標題是英文標題,所以可能大家都懶的看,我改成中文的標題大家應該會比
較有興趣,這邊再分享一次給大家看吧 XDDDDD



blog文:http://kewang.pixnet.net/blog/post/26566454

簡報版:http://0rz.tw/f7Evh



這幾天一直在研究要怎麼將Android與外部的資料庫存取,因為書中都只有講到如何與
Android本身的SQLite做存取,可是對於外部資料庫存取的部分卻是少的可憐,拜了一下
Google大神也是沒有什麼結論,於是我就自己想了一套還蠻蠢的方法,不過有顧慮到與資
料庫存取的安全性啦。

一般我們在網頁存取資料庫的時候,當然都是連到DMZ裡面的web server,然後web
server再用各種方式(ADO.NET, ODBC, JDBC......等)與防火牆內的資料庫做存取,可是
這僅限於Web應用程式可以如此存取,如果你寫的是手機程式(iPhone APP、Android APP)
的話,那這種方法理論是可行,可是實際上是不可行的。

如果想要讓手機程式(這邊以Android為例)讀取外部資料庫時,最簡單的方法就是用JDBC
去連外部資料庫,可是這會發生一個安全上的問題。也就是資料庫必須要從防火牆內拉出
來放到DMZ,要不然JDBC是永遠都沒辦法存取外部資料庫的,所以就有一堆人想到了,對
web server用web service來做存取資料庫的動作,這就解決了安全性的問題,可是在開
發時卻還是極為不便。

如果大家有用過Rails開發程式的話,應該對於它那個強大的RESTful機制和ORM愛不釋手
吧,用ORM來解決了許多操作資料庫的問題,也從最根本的方式用RESTful來存取資料庫。
所以我就架了一台可以跑Rails的web server在DMZ,而且因為我只要用到RESTful和ORM而
已,所以我將web server從apache改為lighttpd,其實還有其他更輕量的web server,只
不過我只會這兩套而已 XD。

再來就是設定Rails的RESTful以及建立DB migration,這些都完成了之後,最後把
RESTful的那四個method以及七個action實作出來,這樣子我只要在Android上面寫HTTP
method,並且對這一台web server做存取,我就可以完成對外部資料庫的存取了,而且也
不用擔心安全性的問題,真是太強大了啦!!!

只不過在寫Android的HTTP method時,發現了一些以前從沒遇到的問題,那就是HTTP
status code居然出現了417,這個問題真的是困擾了我很久,後來找到了這篇文章「
Remove Expect header in Android’s org.apache.http」,總算是解決了這個鳥問題。

我覺得這個問題真的是還蠻難找出來的,動用了Wireshark, Google Chrome的Developer
Tools, tcpdump,還有一堆Rails的log才知道怎麼解決,所以想說寫這篇文章跟大家分享
一下實作的架構以及甘苦談 XDDDD,總之大家看了簡報應該就知道怎麼解決囉。

參考資料:
SQLite Home Page
DMZ (computing) - Wikipedia, the free encyclopedia
REST - 維基百科,自由的百科全書
物件關聯對映 - 維基百科,自由的百科全書
lighttpd fly light
List of HTTP status codes - Wikipedia, the free encyclopedia
Wireshark · Go deep.
TCPDUMP/LIBPCAP public repository
kewang 說 用rails的ORM跟RESTful來做為DB存取的web service,然後再用Android來存
取這個web service (dance) - #5lpx8m
kewang 說 HTTP Status Code 417讓我找了兩天解決的方法,原來是HTTP header的問題
,要移除Expect: 100-continue呀!!! http://overhrd.com/?p= - #5mtbr3

--
雜七雜八的kewang部落格 http://kewang.tw

--
Tags: Android

All Comments

Susan avatar
By Susan
at 2010-07-18T15:14
Harry avatar
By Harry
at 2010-07-18T20:07
專業好文!
Skylar Davis avatar
By Skylar Davis
at 2010-07-20T08:55
非常感謝好文
Lily avatar
By Lily
at 2010-07-21T00:43
http://goo.gl/AGu0du 照著設定,重新載入套件,開啟後下
載的漫畫就會在你指定的資料夾裡

LunaTerm 1.0 上架

Skylar Davis avatar
By Skylar Davis
at 2010-07-14T21:48
今天弄出了 1.0 Release,然後已經可以在 Android Market 上找到了 跟上次 ( 文章代碼: #1C7DxqTJ ) 比較,修改的有 1. 修正了顏色的問題 2. 軟體鍵盤啟動時,自動捲動畫面 3. 支援所有解析度的螢幕 4. 放大鏡 (長壓螢幕) 5. 新增手勢: HOME ...

在Froyo rooted做全APP2SD的方法

Frederica avatar
By Frederica
at 2010-07-14T03:25
首先要準備superboot的工具 然後在superboot的目錄下 將device連接到電腦上( 記得開啟USB偵錯) 輸入adb shell 會看到 # 再輸入pm setInstallLocation 2 就可以強制將要安裝的應用程式都安裝到SD卡了 桌面小工具和啟動就會用到的東西記得安裝完 ...

How to access the external database using the android

Iris avatar
By Iris
at 2010-07-11T13:35
blog文:http://kewang.pixnet.net/blog/post/26566454 簡報版:http://0rz.tw/f7Evh 這幾天一直在研究要怎麼將Android與外部的資料庫存取,因為書中都只有講到如何與 Android本身的SQLite做存取,可是對於外部資料庫存取的部分卻 ...

口孔~~~ 我怒了....

Hardy avatar
By Hardy
at 2010-06-28T16:09
拜託誰去宏達電那邊講一下 讓台灣至少進incredible或evo其中一台好嗎??? 我昨天又進去看了incredible對iphone的對決 我覺得買不到evo那incredible也是可以啦.....andlt;勉強貌andgt; 我知道喇D賽很好 但我不想要用沒有2.2的 真的喇賽 難道全世 ...

進板畫面

Cara avatar
By Cara
at 2010-06-26T00:35
^L1 ^L0.1 ◥◣ ◢◤ ^L0.1 ◥◣ ◢◤ ◥◣◢◤ ^L0.1 ◥◣ ◢◤ ...