現在App對於網路的依賴度越來越高,畢竟資料如果是死的,沒辦法分享給朋友,不能按讚、+1、Tweet、Plurk......等的因素實在很痛苦,Android的SDK對於SQLite有完整的支援,但SQLite畢竟還是個local的資料存取,想要更新資料還是需要透過網路,一般App在這種狀態下大概可以分為三種方式。
1. 每次開啟App將所有資料更新
優點:一次將所有資料更新完成,在後續使用上可以完全不必在進行網路存取,減少每次等候時間,常見於電子書
缺點:安全性倍受考驗,若資料有安全性考量應盡量避免,資料量若太大會佔用到過多的容量空間,Mobile Device不是電腦上的HDD,容量是用G來計算
2. 即時存取 - 使用Api界接
優點:由後台對資料整理過後再進行傳輸,減少掉不必要的資訊,快速達成所需,製作一次可供多種平台做使用
缺點:執行製作上必須多花一份工
3. 即時存取 - 直接Query資料庫
優點:省去後台多做一次工
缺點:每次使用都需要與資料庫連線才可以取得資料,Mobile Device上的網路狀況並不像電腦的網路環境,常常會遇上無法順利與資料庫產生連線導致無法取得資訊
不過今天所要談的重點為MySQL Client,所以當然是講"3. 即時存取 - 直接Query資料庫",在這邊我選擇直接使用JDBC來溝通,直接進入重點
Step 1.下載JDBC http://dev.mysql.com/downloads/connector/j/5.0.html#downloads
因為Android對於JAVA支援版本關係,無法使用最新版,經過測試後發現3.0.17這版本就以足夠使用
Step 2. 將JDBC的Jar檔案加入至專案中
Step 3. Sample code
private Connection connect = null;
private Statement statement = null;
private ResultSet resultSet = null;
public static final String MYSQL_IP = "192.168.0.100";
public static final String MYSQL_DBNAME = "Book";
public static final String MYSQL_USERNAME = "isken";
public static final String MYSQL_PASSWORD = "isken";
public ArrayList bookList() throws Exception {
ArrayList results = new ArrayList();
try {
String script = "SELECT id, name, URL FROM Book";
Log.e("Isken", "script = "+script);
// This will load the MySQL driver, each DB has its own driver
Class.forName("com.mysql.jdbc.Driver");
Log.e("Isken", "jdbc:mysql://"+MYSQL_IP+"/+MYSQL_DBNAME+?"+ "user="+MYSQL_USERNAME+"&password="+MYSQL_PASSWORD);
// Setup the connection with the DB
connect = (Connection) DriverManager.getConnection("jdbc:mysql://"+MYSQL_IP+"/+MYSQL_DBNAME+?"+ "user="+MYSQL_USERNAME+"&password="+MYSQL_PASSWORD);
Log.e(PAGETAG, "connection is success");
// Statements allow to issue SQL queries to the database
statement = (Statement) connect.createStatement();
// Result set get the result of the SQL query
resultSet = statement.executeQuery(script);
while (resultSet.next()) {
MyObj obj = new MyObj();
String id = resultSet.getString("id");
String name = resultSet.getString("name");
String url = resultSet.getString("URL");
obj.setId(id);
obj.setName(name);
obj.setURL(url);
results.add(obj);
}
Log.e(PAGETAG, "results size = "+results.size());
} catch (Exception e) {
throw e;
} finally {
close();
}
return results;
}
相關連結
Android Developer
MySQL Developer Zone
Sample Code
請問有比較詳細的程式碼可以分享嗎
回覆刪除因為我一直試不出來 謝謝
@PhantasyStaR
回覆刪除詳細的程式碼是指...!?
求救~
回覆刪除剛才參考了你的程式碼...
Log.e裡的PAGETAG是什麼?
還有MyObj是什麼?
看了但是不知道如何用的小小新手ˊˋ
不好意思 請問這個是完整的程式碼嗎???
回覆刪除你好 我自己也有測試這樣的寫法 但始終自載入資料庫那邊就會出現問題
回覆刪除可以提供完整的資料學習學習嗎
lucky20040327@yahoo.com.tw 謝謝
你好!我也是java和Android的新手,請問可以給我完整的程式碼嗎?我的Email是: jianganmin0607@yahoo.com.tw 謝謝!
回覆刪除特別是如何把resultSet中的資料傳給Android,而Android又如何接收?是不是就是透過MyObj的類別來完成的?麻煩請大師賜教,謝謝!
Hi更新上了範例,可參考下連結
回覆刪除https://github.com/IskenHuang/android-mysql-client-sample