Conexión de Android con MS SQL SERVER 2008

¿Hay alguna manera de que podamos conectar una aplicación de Android a un servidor de base de datos central (por ejemplo, MSSQLServer 2008)?

Tengo una base de datos MySQL a la que acceden tanto el sitio web como Android. Conectarse a la base de datos desde el sitio web está bien, pero ¿cómo se puede hacer desde la aplicación de Android?

Esto ya se ha preguntado aquí y también aquí . Es posible que desee intentar una búsqueda rápida antes de publicar … la única diferencia es el DBMS, pero la idea es más o menos la misma: crear una capa de servicio web que se comporte como un puente entre su cliente de Android y su base de datos.

Razones principales:

  • Actuación
  • Seguridad
  • Mejores prácticas
  • Separación de intereses

Todo lo que tiene que hacer es usar el controlador apropiado, recomendaría usar JTDS , y la versión 1.2.5 parece haber funcionado bien con Android. Puede encontrar instrucciones detalladas sobre cómo usar con eclipse aquí. Un código de trabajo está disponible en 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 { @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 getAllUsers() throws SQLException { Statement statement = getStatement(conn); List userlist = new ArrayList(); 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); } } } } 

Conectar su aplicación de Android directamente a un servidor de base de datos externo es una mala idea, en su lugar, cree una aplicación web y acceda a la base de datos a través de eso.

Hay una serie de estrategias que puede emplear para lograr lo que quiere hacer. Dado que el soporte SOAP para Android es inexistente, lo más probable es que desee extraer los datos en formato XML o JSON a través de WCF, ASP.NET, Ruby On Rails, PHP o cualquier cantidad de marcos web.

Sin saber lo que su aplicación web está ejecutando actualmente, es difícil decir cómo hacer mejor esa conexión de datos. Puede usar los servicios de datos de WCF si desea comenzar a trabajar lo más rápido posible, y MSDN tiene un artículo decente sobre cómo empezar a utilizarlo:

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

Le sugiero que examine su solución existente y descubra cómo ampliarla para enviar datos a su aplicación de Android.

Otro enfoque, más simple que el servicio web, es utilizar un controlador JDBC virtual que utiliza una architecture de tres niveles: el código JDBC se envía a través de HTTP a un servlet remoto que filtra el código JDBC (configuración y seguridad) antes de pasarlo a el controlador JDBC de SQL Server. El resultado se envía de vuelta a través de HTTP. Hay algunos progtwigs gratuitos que usan esta técnica. Solo busque “Controlador JDBC de Android a través de HTTP”.

He intentado conectar Android a través de PHP a ms servidor sql, puedes leer aquí , estoy usando httprequest y json. Si desea conectarse a MS SQL Server 2005 o superior, debe descargar el controlador de Microsoft para PHP para SQL Server.

Utilicé php como servicio web para conectar la base de datos de Ms SQL Server. De todos modos, puede usar jdbc para conectarse desde la base de datos de android directo a MS SQL Server.

Si necesita hacer eso, probablemente no tenga una architecture de 3 niveles. Si este es el caso, considere escribir una aplicación web móvil. Lo hice para agregar una interfaz móvil a un servidor del cliente de 2 niveles del sistema heredado.

Tenía una aplicación heredada del cliente / servidor Delphi, y la creé usando Raudus, una aplicación web optimizada para dispositivos móviles. Por supuesto, esto tiene sentido si tienes habilidades Delphi, pero para otros idiomas / tecnologías hay las partes de coutner.