Подтвердить что ты не робот

Подключение android с MS SQL SERVER 2008

Можно ли подключить приложение Android к центральному серверу базы данных (например, MSSQLServer 2008)?

У меня есть база данных MySQL, к которой обращаются как на веб-сайте, так и на Android. Подключение к базе данных с сайта прекрасно, но как это можно сделать из приложения Android?

4b9b3361

Ответ 1

Это уже было задано здесь, а также здесь. Возможно, вам захочется попробовать быстрый поиск перед публикацией... Единственное отличие - это СУБД, но идея почти такая же: создайте уровень веб-сервиса, который ведет себя как мост между вашим клиентом android и вашей базой данных.

Основные причины:

  • Производительность
  • Безопасность
  • Лучшая практика
  • Разделение проблем

Ответ 2

Все, что вам нужно сделать, это использовать соответствующий драйвер, я бы рекомендовал использовать JTDS и версию 1.2.5, похоже, хорошо работает с android. Подробную инструкцию по использованию с eclipse можно найти здесь Рабочий код доступен в 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);

            }
        }

    }

}

Ответ 3

Подключение вашего приложения android непосредственно к внешнему серверу базы данных - это плохая идея, вместо этого создайте веб-приложение и получите доступ к базе данных.

Ответ 4

Существует несколько стратегий, которые вы можете использовать для выполнения того, что вы хотите сделать. Учитывая, что поддержка SOAP для Android не существует, вы, скорее всего, захотите вывести данные в формате XML или JSON через WCF, ASP.NET, Ruby On Rails, PHP или любое количество веб-фреймворков.

Не зная, что в настоящее время работает ваше веб-приложение, трудно сказать, как лучше всего сделать это подключение к данным. Вы можете использовать службы передачи данных WCF, если вы хотите как можно быстрее встать и работать, а в MSDN есть достойная статья о начале работы с ней:

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

Я предлагаю вам изучить существующее решение и выяснить, как наилучшим образом расширить его, чтобы вывести данные из вашего приложения на Android.

Ответ 5

Я пытаюсь подключиться к андроиду через сервер PHPto ms sql, вы можете прочитать здесь, используя httprequest и json. Если вы хотите подключиться к Ms SQL Server 2005 или выше, вы должны загрузить Microsoft Driver for PHP для SQL Server.

Я использовал php как веб-службу для подключения базы данных Ms SQL Server, так или иначе вы можете использовать jdbc для подключения с android прямо к База данных MS SQL Server

Ответ 6

Другим подходом, который проще, чем веб-служба, является использование виртуального драйвера JDBC, который использует трехуровневую архитектуру: ваш JDBC-код отправляется через HTTP на удаленный сервлет, который фильтрует JDBC-код (конфигурация и безопасность) до передавая его драйверу JDBC SQL Server. Результат отправляется вам через HTTP. Есть несколько бесплатных программ, которые используют эту технику. Просто Google "Android JDBC Драйвер через HTTP".

Ответ 7

Если вам нужно это сделать, возможно, у вас уже нет трехуровневой архитектуры. Если это так, подумайте о написании мобильного веб-приложения. Я сделал это, чтобы добавить мобильный интерфейс к серверной системе с двумя уровнями.

У меня было унаследованное клиентское/серверное приложение Delphi, и я создал с помощью Raudus веб-приложение, оптимизированное для мобильных устройств. Конечно, это имеет смысл, если у вас есть навыки Delphi, но для других языков/технологий существуют coutnerparts.