Вопрос по android, sql-server – Доступ Android к удаленной базе данных SQL

6

Могу ли я получить доступ к удаленной базе данных SQL (на веб-сервере) напрямую из программы Android? т.е. просто открыть соединение со всеми необходимыми параметрами и затем выполнить запрос SQL?

Это частная программа (недоступная для общего доступа), доступная только на указанных телефонах, поэтому я не беспокоюсь о том, что третьи лица получат доступ к базе данных.

Если так - какие библиотеки мне нужны в Java?

Благодарю.

Ваш Ответ

3   ответа
4

что вы должны использовать веб-сервис для связи с базой данных SQL. Вы можете определить общие методы, такие как runSomeScalarQuery или runOneTabularQuery и ... в этом веб-сервисе, и отправлять ответы базы данных по самопределяемому протоколу, как самопределяемый объект.

18

вое устройство Android к серверу SQL напрямую, если вы развернули драйверы MSSQL JDBC на устройстве Android, а затем выставили свой сервер SQL прямо в Интернет. Если драйверы MSSQL будут работать должным образом на Android, это совершенно другая проблема.

Вот как вы могли бы сделать это. Однако вот почему это плохая идея.

You are exposing your SQL server directly to the internet. Unless you encrypt the data between your MSSQL server and android device it would be relatively easy for a determined hacker to sniff the TDS data stream between the device and MSSQL and reverse engineer it and steal your data. Encryption will probably make it much harder almost impossible for a attacker to steal your data. However an attacker could still launch a DOS/DDOS attack on your database directly. Not a good idea!

If you are planning to connect other mobile devices (iPhone, Symbian, BlackBerry and so on) you will need to be able to create a SQL connection from those devices as well. iPhone does not support Java natively(from my memory) for example so you would need to find a way to connect iPhone to the SQL server. BlackBerry might be easier but Symbian you are going to be out of luck with. Thus you will need to almost create a custom solution for each device connecting to your database. Bad Idea LOADS of maintenance

Создайте веб-сервис или пользовательский сервер TCP / IP, который может управлять вашей базой данных. Подключитесь к этому веб-сервису / сервису с вашего устройства. Веб-сервисы - это путь. Более 90% устройств в настоящее время способны выполнять вызовы веб-службы.

Error: User Rate Limit Exceeded WaterBoy
Error: User Rate Limit Exceeded
0

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

Download the driver from here: http://dev.mysql.com/downloads/connector/j/3.0.html (there are some newer ones, but this one is working perfectly) if your project doesnt have a "libs" folder, create it now. unzip the file you downloaded, and copy the file mysql-connector-java-3.0.17-ga-bin.jar to the libs folder add it to the build path: Right click at project > Build Path >Configure Build Path Tab Libraries > Add JAR Browse to libs folder and select the jar file

Once this is ready, we can go ahead with the programming. As we know, Android force us to do the network access in a separate thread, so we have to choose a way of creating a Thread, for instance we can use an AsynkTask, and add our code to the doInBackground method.

private static final String url = "jdbc:mysql://{URL_SERVER}/{BASE_DATOS}";
private static final String user = "usuario";
private static final String password = "contraseña";
int count=0;
try {
     // The newInstance() call is a work around for some broken Java implementations
     //this creates some static objects that we need. 
     Class.forName("com.mysql.jdbc.Driver").newInstance();
     Connection con = DriverManager.getConnection(url, user, password);
     Statement st = con.createStatement();
     ResultSet rs = st.executeQuery("QUERY");
     while (rs.next()) {
           //in every iteration we have a  result
           //if query is a Select, for instance 
           //"select one_column, another_column from ..." 
           //remember that rs has functions such as
           //rs.getString(0)  
           //rs.getDouble(1) 
           //etc, that get the index of the columns in the select 
           //and cast it to the specific type

           //here we do whatever we need with the results, 
           //and probably keep track of the progress with something like
      // publishProgress(++count);

           // end early if asynctask was cancel() 
           if (isCancelled())
        break;

   }
}

catch (Exception e) {
 e.printStackTrace();
}

Похожие вопросы