作者kewang (617公車)
看板Android
標題[開發] 如何使用Android與外部資料庫做存取
時間Thu Jul 15 17:20:59 2010
因為我之前的標題是英文標題,所以可能大家都懶的看,我改成中文的標題大家應該會比
較有興趣,這邊再分享一次給大家看吧 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
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 221.120.2.20
1F:推 jc1989824:推 07/15 18:31
2F:推 WLR:專業好文! 07/15 19:31
3F:推 etoanik:非常感謝好文 07/15 19:48
5F:→ ChiuTW: 載的漫畫就會在你指定的資料夾裡 01/25 23:50