web-dev-qa-db-fra.com

Connexion d'Android avec MS SQL SERVER 2008

Existe-t-il un moyen de connecter une application Android à un serveur de base de données central (par exemple, MSSQLServer 2008)?

J'ai une base de données MySQL accessible à la fois par le site Web et par Android. Se connecter à la base de données à partir du site Web est bien, mais comment peut-on le faire à partir de l'application Android?

17
Jasra

Cela a déjà été demandé ici et aussi ici . Vous voudrez peut-être essayer une recherche rapide avant de publier ... La seule différence est le SGBD, mais l’idée est à peu près la même: créez une couche de service Web qui se comporte comme un pont entre votre client Android et votre base de données. 

Raisons principales:

  • Performance
  • Sécurité
  • Meilleur entrainement
  • Séparation des préoccupations
20
Necronet

Tout ce que vous avez à faire est d'utiliser le pilote approprié. Je vous recommande d'utiliser JTDS et la version 1.2.5 semble avoir bien fonctionné avec Android.Détail des instructions d'utilisation de Eclipse être trouvé ici Un code de travail est disponible dans 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);

            }
        }

    }

}
5
alkber

La connexion de votre application Android directement à un serveur de base de données externe est une mauvaise idée. Créez plutôt une application Web et accédez à la base de données par ce biais.

3
Dre

Une autre approche, plus simple que Web Service, consiste à utiliser un pilote JDBC virtuel utilisant une architecture à trois niveaux: votre code JDBC est envoyé via HTTP à un servlet distant qui filtre le code JDBC (configuration et sécurité) avant de le transmettre à. le pilote JDBC SQL Server. Le résultat vous est renvoyé via HTTP. Certains logiciels libres utilisent cette technique. Juste Google "Pilote Android JDBC sur HTTP".

2
kaw

Vous pouvez utiliser un certain nombre de stratégies pour accomplir ce que vous voulez faire. Étant donné que la prise en charge SOAP pour Android est inexistante, vous souhaiterez probablement transmettre les données au format XML ou JSON via WCF, ASP.NET, Ruby on Rails, PHP ou un nombre quelconque de cadres Web.

Sans savoir ce que votre application Web est en train d'exécuter, il est difficile de dire comment établir au mieux cette connexion de données. Vous pouvez utiliser WCF Data Services si vous souhaitez être opérationnel aussi vite que possible, et MSDN a un article décent pour bien démarrer avec:

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

Je vous suggère d'examiner votre solution existante et de déterminer la meilleure manière de l'étendre aux données Push vers votre application Android.

2
thaBadDawg

j'ai essayé de connecter Android via PHPto ms SQL Server, vous pouvez lire ici , utilise httprequest et json. Si vous souhaitez vous connecter à Ms SQL Server 2005 ou version ultérieure, vous devez télécharger le pilote Microsoft pour PHP pour SQL Server.

J'ai utilisé php en tant que service Web pour connecter la base de données Ms SQL Server. Quoi qu'il en soit, vous pouvez utiliser jdbc pour vous connecter depuis Android directement à la base de données MS SQL Server.

1
budy wijaya

Si vous devez le faire, vous n’avez probablement pas déjà une architecture à 3 niveaux. Si tel est le cas, envisagez d'écrire une application Web mobile . Je l'ai fait pour ajouter une interface mobile à un système hérité à 2 niveaux de serveur client.

J'avais une application client/serveur Delphi existante et j'ai créé à l'aide de Raudus une application Web optimisée pour les appareils mobiles. Bien sûr, cela a du sens si vous avez des compétences en Delphi, mais pour d’autres langages/technologies, il ya les coutnerparts.

0
LaBracca