2011-03-10 106 views
16

有沒有一種方法可以將Android應用程序連接到中央數據庫服務器(例如MSSQLServer 2008)?將android與MS SQL SERVER 2008連接起來

我有一個MySQL網站和Android訪問的數據庫。從網站連接到數據庫是好的,但如何從Android應用程序完成?

回答

20

這已被要求herehere。您可能想在發佈之前嘗試快速搜索......唯一的區別是DBMS,但想法基本相同:創建一個Web服務層,其行爲就像是Android客戶端和數據庫之間的橋樑。

主要原因:

  • 性能
  • 安全的擔憂
  • 最佳實踐
  • 分離
+2

linke你在這裏給出的不是爲sql server 2008而是爲mysql服務器。你應該知道sql server和mysql數據庫的差別 – DPM 2013-10-19 15:38:02

+6

@DPM如果你看了答案,它實際上是數據庫不可知論的,所以沒關係。 – eis 2013-11-15 09:42:09

3

將您的android應用程序直接連接到外部數據庫服務器是一個壞主意,而不是創建一個web應用程序並通過它訪問數據庫。

+0

感謝德瑞....其實我想填充我在中央數據庫(這是常見到我的網站)stoed ..please幫助 – Jasra 2011-03-10 05:54:56

+1

然後更新您的問題數據的應用程序,訪問數據庫和訪問網站是兩件不同的事情。 – Dre 2011-03-10 05:57:00

+0

基本上看到我有一個數據庫,它是由網站和Android訪問.....數據庫使用的是我的SQL服務器。連接數據庫到網站是好的,但它是如何通過Android應用程序? – Jasra 2011-03-10 05:58:51

2

有一些策略,你可以聘請來完成你想要什麼做。考慮到對Android的SOAP支持是不存在的,您將很可能希望通過WCF,ASP.NET,Ruby On Rails,PHP或任意數量的Web框架以XML或JSON格式推送數據。

不知道您的Web應用程序當前正在運行什麼,很難說如何最好地進行數據連接。您可以使用WCF數據服務,如果你想得起來,並儘可能快地運行,和MSDN對開始使用它像樣的文章:

http://msdn.microsoft.com/en-us/library/cc668792.aspx

我建議你檢查你現有的解決方案和數字瞭解如何最大限度地擴展將數據推送到您的Android應用程序。

+0

非常感謝:) – Jasra 2011-12-31 07:07:06

1

我試圖通過PHPto ms sql服務器連接android,您可以閱讀here,我正在使用httprequest和json。如果要連接到MS SQL Server 2005或更高版本,則必須下載用於SQL Server的Microsoft驅動程序for PHP。

我使用PHP作爲Web服務連接MS SQL Server數據庫,反正你可以使用jdbc從Android直接連接到MS SQL Server數據庫

1

的另一種方法,MUSCH比Web服務更簡單,就是使用使用三層架構的虛擬JDBC驅動程序:您的JDBC代碼通過HTTP發送到遠程Servlet,該遠程Servlet在將JDBC代碼傳遞給SQL Server JDBC驅動程序之前過濾JDBC代碼(配置&安全性)。結果通過HTTP發回給您。有一些使用這種技術的免費軟件。只需谷歌「通過HTTP的Android JDBC驅動程序」。

0

如果你需要這樣做,你可能不會有3層架構。如果是這種情況,請考慮編寫一個移動Web應用程序。 我這樣做了將移動界面添加到客戶端服務器2層遺留系統。

我有一個傳統的Delphi客戶端/服務器應用程序,我通過使用Raudus爲移動設備優化的Web應用程序創建。當然,如果你有德爾福的技能,這是有道理的,但對於其他語言/技術來說,這是coutnerparts。

4

所有你需要做的是使用合適的驅動程序,我推薦使用JTDS和版本1.2.5似乎與android.Detailed指令如何與Eclipse使用效果不錯,可以發現here 一個工作代碼可用github

/** 
* This is a demo code to demonstrate db connection and operations and not 
* meant for a live run. 
* 
*/ 

public class DBTestActivity extends Activity { 

    private Connection conn; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_dbtest); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     getMenuInflater().inflate(R.menu.dbtest, menu); 
     return true; 

    } 
    @Override 
    protected void onResume() { 

     super.onResume(); 
     (new DBConnection()).execute(null, null, null); 

    } 

    @Override 
    protected void onPause() { 

     super.onPause(); 
     try { 

      conn.close(); 

     } catch (SQLException e) { 

      e.printStackTrace(); 

     } 

    } 
    class DBConnection extends AsyncTask<String, String, String> { 

     @Override 
     protected String doInBackground(String... arg0) { 

      try { 

       Log.e("MSSQL", "Attempting to connect"); 

       Class.forName("net.sourceforge.jtds.jdbc.Driver"); 
       conn = DriverManager.getConnection(
         "jdbc:jtds:sqlserver://yourserver.com/DBName", 
         "username", "password"); 

       Log.e("MSSQL", "Connected"); 

      } catch (Exception e) { 

       e.printStackTrace(); 
       Log.e("MSSQL", e.toString()); 

      } 

      return null; 
     } 

    } 

    class UserInfo { 

     String userID; 
     String userName; 
     String PhoneNo; 
     String age; 

     public UserInfo(String userID, String userName, String PhoneNo, 
       String age) { 

      this.userID = userID; 
      this.userName = userName; 
      this.PhoneNo = PhoneNo; 
      this.age = age; 

     } 

     public String getUserID() { 
      return userID; 
     } 

     public void setUserID(String userID) { 
      this.userID = userID; 
     } 

     public String getUserName() { 
      return userName; 
     } 

     public void setUserName(String userName) { 
      this.userName = userName; 
     } 

     public String getPhoneNo() { 
      return PhoneNo; 
     } 

     public void setPhoneNo(String phoneNo) { 
      PhoneNo = phoneNo; 
     } 

     public String getAge() { 
      return age; 
     } 

     public void setAge(String age) { 
      this.age = age; 
     } 

    } 

    class DBOperation { 

     public List<UserInfo> getAllUsers() throws SQLException { 

      Statement statement = getStatement(conn); 

      List<UserInfo> userlist = new ArrayList<UserInfo>(); 

      ResultSet rs = statement.executeQuery("SELECT * FROM UserInfoTable"); 
      rs.next(); 
      int count = 0; 

      while (rs.next()) { 

       userlist.add(new UserInfo(rs.getString(1), rs.getString(2), 
         rs.getString(3), rs.getString(4))); 
       count++; 

      } 

      rs.close(); 
      statement.close(); 
      return userlist; 

     } 

     public void addUser(UserInfo info) { 

      Log.e("MSSQL", "in adduser"); 

      Statement statement = getStatement(conn); 

      try { 

       ResultSet rs = statement.executeQuery("INSERT INTO UserInfoTable " 
         + " VALUES ('1001', 'Bob', '333333', '33')"); 
       rs.close(); 
       statement.close(); 

      } catch (SQLException e) { 

       e.printStackTrace(); 

      } 

     } 

     private Statement getStatement(Connection connection) { 

      try { 

       return connection.createStatement(); 

      } catch (Exception e) { 

       throw new RuntimeException(e); 

      } 
     } 

    } 

} 
+0

嗨,我試着用你的示例代碼,但每當我啓動應用程序,系統不斷給我這個錯誤「字符集0x0904000128/Cp850不支持的JVM」,我曾嘗試連接到數據庫Java和它工作正常,但只在Java Android它給我錯誤。我可以知道你使用的是什麼版本的eclipse嗎?它是Eclipse ADT Juno嗎? – AuroraBlaze 2014-11-12 05:07:49