Подключение android с MS SQL SERVER 2008
Можно ли подключить приложение Android к центральному серверу базы данных (например, MSSQLServer 2008)?
У меня есть база данных MySQL, к которой обращаются как на веб-сайте, так и на Android. Подключение к базе данных с сайта прекрасно, но как это можно сделать из приложения Android?
Ответы
Ответ 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.