MS SQL Connection: Android Studio никогда не подключается по сравнению с Eclipse IDE - PullRequest
0 голосов
/ 14 июля 2020

Я создаю программу для местной организации по инвентаризации. Приложение подключается к SQL серверу через разъем MS SQL 8.2. Приложение на телефоне должно позволять получать и отправлять информацию об объектах. У меня есть класс stati c для подключения к базе данных, который обрабатывает соединение. В Eclipse я могу успешно подключиться и запросить базу данных. В студии Android я получаю ошибки при каждой попытке подключения.

-сервер размещен на том же p c.

-порты были настроены неоднократно. В настоящее время полностью открыты правила для входящего и исходящего трафика для TCP и UDP. Порты Dynami c включены для сервера SQL. Сервисы для сервера SQL перезапускались десятки раз. 1433 был включен и выключен, но в настоящее время пустые.

-Попытка подключения по IP-адресу, хост не может быть разрешен

-Разрешены права доступа, разрешающие доступ для входа в базу данных

-Интегрированная безопасность и безопасность TLS пытались в разное время, но обе попытки не удались.

Список ошибок:

  • Подключение к хосту BLACK-G, "xxxxx "порт 1433, отказал. Ошибка подключения TCP / IP к узлу, невозможно определить узел.

  • Подключение к узлу с именем BLACK-G instance sqlexpress не удалось, нет адрес, связанный с именем хоста, откройте UDP-трафик c на порт 1434 Исключение неизвестного хоста. Невозможно разрешить хост BLACK-G

  • В соединении отказано

  • Не удалось подключиться

  • Подключение к хост 192.168.1.219 вышел из строя. Не удалось подключиться к 192.168.1.219 (порт 1433) из 192.168.1.87 (порт 33654) через 2478 мс. Проверить свойства подключения.

Вот код

package com.example.ccupboard_1;

import android.os.Build;

import androidx.annotation.RequiresApi;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


 public class DatabaseJAVA  {

   //  @RequiresApi(api = Build.VERSION_CODES.KITKAT)//public static void main(String[] args) {
    public static String Connect() {

        // Create a variable for the connection string.
      
         String connectionUrl = "jdbc:sqlserver://BLACK-G\\SQLEXPRESS;user=ay7;password=343434;databaseName=ayTestDatabase2;" ;

        ResultSet resultSet = null;
        
   

        try (Connection connection = DriverManager.getConnection(connectionUrl);
             Statement statement = connection.createStatement();) {

            // Create and execute a SELECT SQL statement.
            String selectSql = "SELECT Fname, Lname from dbo.Customers";
            resultSet = statement.executeQuery(selectSql);

            // Print results from select statement
            while (resultSet.next()) {

                result += (resultSet.getString("Fname") + " " + resultSet.getString("Lname")+"\n");
            }
        } catch (SQLException e) {
            e.printStackTrace();
            result = e + "";
        }
        return result;
    }
    }

Фрагмент из основного действия, вызывающего метод подключения:

case R.id.buttonSignOut: { //used to test connection currently, simply attempts to connect and //returns the value to a textview on the page

                Thread thread = new Thread() {

                    public void run() {

                        textviewLowItemAlert.setText(DatabaseJAVA.Connect());

                    }

                };

                thread.start();

                break;

Что будет следующим шагом в решении этой проблемы? Это работает в Eclipse, но не в студии. Я пробовал более десятка различных строк подключения, и большинство из них выдавало одни и те же ошибки. Мой сервер не разрешает доступ к Android Studio? Большинство ошибок связано с тем, что Android студия не может найти его на сервере.

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Хорошо, наконец-то удалось разобраться с коннектором JDB C -JTDS, упомянутым Хоакином Альваресом. Вот что произошло:

-Использовал предоставленную им информацию о соединении с моим IP-адресом и увеличенным таймаутом

-Сетевая ошибка IOException, EHOSTUNREACH (Нет маршрута к хосту),

-Router изменил мой IP-адрес, поэтому пришлось исправить это

-После этого я использовал свой PCNAME \ SQLEXPRESS для экземпляра

-Он вернул Экземпляр недоступен, поэтому я изменил на SQLEXPRESS только

-Затем он вернул закрытое соединение с БД

-Я посмотрел на Windows Средство просмотра событий, и он сказал: «Шифрование требуется для подключения к этому серверу, но клиентская библиотека не поддерживает шифрование; соединение было закрыто. Обновите клиентскую библиотеку. "

-Я проверил сервер SQL в SQL SERVER Configuration Manager. .. Было включено принудительное шифрование.

-Попробовал снова, и соединитель JTDS наконец подключился к базе данных, и я смог что-то делать. Однако пока нет помощи с MS SQL. Спасибо, мистер Альварес!

0 голосов
/ 14 июля 2020

Вот фрагмент моего рабочего приложения, в котором я могу успешно подключиться к локальному ms sql.

В файле конфигурации я установил информацию о подключении.

  public static String dbUser = "user";
  public static String dbPassword = "password";
  public final static String sqlString = "jdbc:jtds:sqlserver://ip:port//INSTANCENAME";

Затем я запускаю соединение следующим образом.

 StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
 StrictMode.setThreadPolicy(policy);
 DriverManager.setLoginTimeout(5);
 connection = DriverManager.getConnection(Config.sqlString, Config.dbUser, Config.dbPassword);       // Connect to database
        if (connection == null) {
            ConnectionResult = "Verify Internet Connection";
            Toast.makeText(activity, ConnectionResult, Toast.LENGTH_LONG).show();

Наконец, просто выполните запрос и закройте соединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...