2011-03-10 65 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