2013-10-07 22 views
37
Android 3.3 API 18 

你好,能否Android應用直接連接到網上的MySQL數據庫

我發展我的第一應用採用了android。該應用程序將不得不連接到在線數據庫來存儲用戶數據。

我正在尋找包含MySQL數據庫的雲存儲。但是,我的應用程序可以直接連接到這個MySQL數據庫並從它推送和提取數據嗎?或者我還需要做其他事情嗎?

非常感謝您的任何建議,

+0

是U U可以根據需要編寫服務器端代碼,要麼在PHP或.NET – KOTIOS

+0

我想這可能有助於全力爲您 [見此帖] [1 ]:http://stackoverflow.com/questions/11324939/how-to-access-online-mysql-database-in-android – prakash

+0

http://androidbash.com/connecting-android-app-to-a-database- using-php-and-mysql /這裏的數據正在從後端數據庫填充。 – SRBhagwat

回答

63

是的,你可以做到這一點。

材料需要:

  1. 的WebServer
  2. 在Web服務器
  3. 一點點的Android知識:)存儲在數據庫
  4. 的WebServices(JSON,XML ...等),無論你舒適

1.首先設置網絡權限我n您的清單文件

​​

2。做一個類(我使用JSON parisng得到的值)

用於例如,從服務器 做一個HTTPRequest:

public class JSONfunctions { 

    public static JSONObject getJSONfromURL(String url) { 
     InputStream is = null; 
     String result = ""; 
     JSONObject jArray = null; 

     // Download JSON data from URL 
     try { 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost(url); 
      HttpResponse response = httpclient.execute(httppost); 
      HttpEntity entity = response.getEntity(); 
      is = entity.getContent(); 

     } catch (Exception e) { 
      Log.e("log_tag", "Error in http connection " + e.toString()); 
     } 

     // Convert response to string 
     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(
        is, "iso-8859-1"), 8); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      result = sb.toString(); 
     } catch (Exception e) { 
      Log.e("log_tag", "Error converting result " + e.toString()); 
     } 

     try { 

      jArray = new JSONObject(result); 
     } catch (JSONException e) { 
      Log.e("log_tag", "Error parsing data " + e.toString()); 
     } 

     return jArray; 
    } 
} 

在你MainActivity使類的一個對象JsonFunctions並通過URL作爲從那裏你想要得到的數據參數

如:

JSONObject jsonobject; 

jsonobject = JSONfunctions.getJSONfromURL("http://YOUR_DATABASE_URL");

4.然後終於讀jsontags和值存儲在一個ArrayList,後來在列表視圖中顯示,如果你想

,如果您有任何問題,你都可以關注該博客 他給優秀的android教程AndroidHive

由於上述答案我寫了很長回來,現在HttpClientHttpPostHttpEntity已經在阿比23.刪除您可以構建使用下面的代碼。 gradle(應用程序級別)仍然繼續在您的項目中使用org.apache.http

android { 
    useLibrary 'org.apache.http.legacy' 
    signingConfigs {} 
    buildTypes {} 
} 

或者您可以使用HttpURLConnection像下面讓你從服務器

public String getJSON(String url, int timeout) { 
HttpURLConnection c = null; 
try { 
    URL u = new URL(url); 
    c = (HttpURLConnection) u.openConnection(); 
    c.setRequestMethod("GET"); 
    c.setRequestProperty("Content-length", "0"); 
    c.setUseCaches(false); 
    c.setAllowUserInteraction(false); 
    c.setConnectTimeout(timeout); 
    c.setReadTimeout(timeout); 
    c.connect(); 
    int status = c.getResponseCode(); 

    switch (status) { 
     case 200: 
     case 201: 
      BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream())); 
      StringBuilder sb = new StringBuilder(); 
      String line; 
      while ((line = br.readLine()) != null) { 
       sb.append(line+"\n"); 
      } 
      br.close(); 
      return sb.toString(); 
    } 

} catch (MalformedURLException ex) { 
    Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); 
} catch (IOException ex) { 
    Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); 
} finally { 
    if (c != null) { 
     try { 
      c.disconnect(); 
     } catch (Exception ex) { 
     Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 
return null; 

響應}

,或者你可以使用第三方庫像VolleyRetrofit調用Web服務的API,並得到迴應並稍後使用FasterXML-jackson,google-gson進行解析。

+5

感謝您的解決方案。只是想知道你是否可以推薦任何有免費MySQL數據庫的託管站點,我的應用可以連接到這些站點。由於這位學者我沒有太多的空間帶寬。謝謝。 – ant2009

+0

偉大的指導和感謝您的博客鏈接! – Harsha

+0

我是一個很好的機器人。我們不得不創建一個本地數據庫,以便應用程序在晚些時候順利地完成功能。我正在研究一個類似的項目。它工作正常,直到我們連接到互聯網,但之後它不會。這是否使感覺? – timberlake

8

您可以使用PHP,JSP,ASP或任何其他服務器端腳本與MySQL數據庫連接,並和返回,你可以在你的Android應用它解析爲JSON數據this link how to do it

2

第1步:使Web服務的服務器

步驟2:使你的應用程序向Web服務的調用並接收結果集

4

你想要做什麼是一個壞主意。它會要求你在應用程序中嵌入你的用戶名和密碼。這是一個非常糟糕的想法,因爲它可能會反向工程APK,並獲得用戶名和密碼到這個面向公衆的可能包含敏感用戶數據的mysql服務器。

我會建議做一個web服務來充當mysql服務器的代理。我假設用戶需要登錄,所以你可以使用他們的用戶名/密碼來驗證Web服務。

+0

可以做什麼與人們應該做的不同。你對你的擔憂絕對正確。公開用戶名和密碼是一個問題,但沒有認證的在線推拉服務可能同樣有害(特別是反編譯也暴露數據模式)。 –

4

是的,你肯定可以連接到MySql的在線數據庫,因爲你需要創建一個Web服務。該Web服務將爲您提供訪問MySql數據庫的權限。然後,您可以輕鬆地將數據推送到MySql數據庫。 PHP將是創建Web服務的一個很好的選擇,它很容易實現。祝你好運...

2

看看這個在線後端。

Parse.com

他們提供推送通知,社會整合,數據存儲,以及豐富的自定義邏輯添加到您的應用程序與雲後端代碼的能力。

3

你絕對可以做這樣的應用程序,你需要通過調用一個PHP腳本來響應數據庫,這個腳本會根據你的項目運行特定的查詢,並以xml或者json的形式生成結果甲酸,這可以顯示在你的Android應用程序! 完整教程how to connect android application to mysql我建議看看這個tutorila

1

它實際上是很容易的。但是,你無法直接實現它。您需要選擇服務端技術。您可以爲此部分使用任何東西。這就是我們所說的RESTful API或SOAP API。這取決於你選擇什麼。 我已經完成了許多項目。我更喜歡REST。 所以會發生什麼,你會在你的Web服務器上有一些腳本,你知道這些URL。例如,我們需要進行用戶註冊。而對於這一點,我們有

mydomain.com/v1/userregister.php

現在可以從Android方面,你將發送一個HTTP請求到上述網址。上面的URL將處理用戶註冊,並會給你一個響應,說明操作是否成功。

有關上述概念的完整詳細說明。您可以訪問以下鏈接。

**Android MySQL Tutorial to Perform CRUD Operation **