MySQL Client on Android

現在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

7 則留言:

  1. 請問有比較詳細的程式碼可以分享嗎
    因為我一直試不出來 謝謝

    回覆刪除
  2. @PhantasyStaR
    詳細的程式碼是指...!?

    回覆刪除
  3. 求救~
    剛才參考了你的程式碼...

    Log.e裡的PAGETAG是什麼?
    還有MyObj是什麼?

    看了但是不知道如何用的小小新手ˊˋ

    回覆刪除
  4. 不好意思 請問這個是完整的程式碼嗎???

    回覆刪除
  5. 你好 我自己也有測試這樣的寫法 但始終自載入資料庫那邊就會出現問題
    可以提供完整的資料學習學習嗎
    lucky20040327@yahoo.com.tw 謝謝

    回覆刪除
  6. 你好!我也是java和Android的新手,請問可以給我完整的程式碼嗎?我的Email是: jianganmin0607@yahoo.com.tw 謝謝!
    特別是如何把resultSet中的資料傳給Android,而Android又如何接收?是不是就是透過MyObj的類別來完成的?麻煩請大師賜教,謝謝!

    回覆刪除
  7. Hi更新上了範例,可參考下連結
    https://github.com/IskenHuang/android-mysql-client-sample

    回覆刪除