2011-03-10 20 views
16

¿Hay alguna forma de que podamos conectar una aplicación de Android a un servidor de base de datos central (por ejemplo, MSSQLServer 2008)?Conexión de Android con MS SQL SERVER 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?

Respuesta

20

Esto ya ha sido pedido here y también here. 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:

  • Rendimiento
  • Seguridad
  • Mejor Práctica
  • separación de las preocupaciones
+2

linke u give here here no es para servidor sql 2008 son solo para servidor mysql. Deberías saber la diferencia entre el servidor sql y la base de datos mysql – DPM

+6

@DPM si lees la respuesta, en realidad es independiente de la base de datos, por lo que no importa. – eis

3

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

+0

gracias Dre .... en realidad quería llenar mi aplicación con los datos stoed la base de datos central (que es común a mi página web) ..Por favor ayudar a – Jasra

+1

a continuación, actualice su pregunta, el acceso a bases de datos y acceder a los sitios web son dos cosas diferentes. – Dre

+0

ver básicamente tengo una base de datos a la que acceden tanto el sitio web como Android ..... la base de datos utilizada es mi servidor sql. Conectar la base de datos al sitio web está bien pero ¿cómo se puede hacer a través de la aplicación de Android? – Jasra

2

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 qué aplicación web se está ejecutando actualmente, es difícil decir cómo hacer mejor esa conexión de datos. Puede usar WCF Data Services si se quiere poner en marcha lo más rápido posible, y MSDN tiene un artículo decente sobre cómo empezar con ella:

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

sugiero que examine su solución y la figura existente cómo ampliar eso para enviar datos a su aplicación de Android.

+0

muchas gracias :) – Jasra

1

intenté conectar Android a través de PHP a ms servidor sql, puede leer here, 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.

he utilizado PHP como servicio web para conectar la base de datos MS SQL Server, de todos modos se puede jdbc utilizado para conectarse desde androide directa a la base de datos MS SQL Server

1

Un otro enfoque, más simple que musch servicio Web, es utilice un controlador JDBC virtual que utiliza una arquitectura de tres niveles: su código JDBC se envía a través de HTTP a un Servlet remoto que filtra el código JDBC (configuración & de seguridad) antes de pasarlo al controlador JDBC de SQL Server. El resultado se envía de vuelta a través de HTTP. Hay algunos programas gratuitos que usan esta técnica. Solo busque "Controlador JDBC de Android a través de HTTP".

0

Si necesita hacer eso, probablemente no tenga una arquitectura 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 sistema heredado de 2 niveles del servidor cliente.

Tenía una aplicación heredada del cliente/servidor Delphi, y creé mediante el uso de 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.

4

Todo lo que tiene que hacer es utilizar el controlador apropiado, le recomiendo usar JTDS, y la versión 1.2.5 parece haber funcionado bien con la instrucción android.Detailed sobre cómo utilizar con Eclipse se pueden encontrar here Un código de trabajo es 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<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

Hola, traté de usar su código de muestra, pero cada vez que ejecuto la aplicación, el sistema me sigue dando este error "Charset 0x0904000128/Cp850 no es compatible con la JVM", intenté conectarme a la base de datos en Java y funciona bien, pero solo en Java android me da error. ¿Puedo saber qué versión de eclipse estás usando? ¿Es Eclipse ADT Juno? – AuroraBlaze

Cuestiones relacionadas