2014-10-31 2 views
-1

Добрый день,Привет, Пожалуйста, помогите мне с этим андроида связи SQL

Im в настоящее время создание андроида программу, которая соединила бы базы данных SQL удаленно ... Im помощью XAMPP с другого компьютера .. и вот мой код для подключения (MySQL-коннектор уже импортирован)

String url = "jdbc:mysql://xxx.xxx.x.xx:3306/mydatabase?allowMultiQueries=true&useOldAliasMetadataBehavior=true"; 
     String user = "root"; 
     String password = "mypassword"; 
     int a = 0; 
     try 
     { 
      Class.forName("com.mysql.jdbc.Driver"); 
      a = 1; 
      Connection con = DriverManager.getConnection(url, user, password); 
      a = 12; 
      Statement st = con.createStatement(); 
      a = 123; 
      ResultSet rs = st.executeQuery("SELECT * FROM mytable"); 
      a = 1234; 
      while(rs.next()) 
      { 


      } 
      tDisplayS.setText("YES"); 
     } 
     catch(Exception e) 
     { 
      tDisplayS.setText(a+""); 
     } 

Когда я запускаю мою программу .. Я всегда получаю улов ошибки и отображает только «1» ... то, что может показаться, что не хватает в этом коде? или Im делает это неправильно, пожалуйста, помогите ...

Спасибо ..

+0

Похоже, что ваш код попадает в исключение после a = 1, попробуйте поместить e-> getMessage() в ваш блок catch, чтобы отобразить сообщение об ошибке и устранить неисправность оттуда. – SteD

+0

Похоже, у вас проблемы с базовым подключением. Сначала я попытаюсь подключиться, используя mysql в командной строке или инструмент, такой как MySQL Workbench. –

+0

Hello @Sted спасибо за ваш ответ ... Это сообщение e.getMessage() Связь link Failure Последний пакет, успешно отправленный на сервер, был 0 миллисекунд назад. Драйвер не получил никаких пакетов с сервера. – Katsuhiro

ответ

0

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

Пробуйте соединить с Thread.

public void connectToMySql(){ 

     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       String url = "jdbc:mysql://xxx.xxx.x.xx:3306/mydatabase?allowMultiQueries=true&useOldAliasMetadataBehavior=true"; 
       String user = "root"; 
       String password = "mypassword"; 
       int a = 0; 
       try 
       { 
        Class.forName("com.mysql.jdbc.Driver"); 
        a = 1; 
        Connection con = DriverManager.getConnection(url, user, password); 
        a = 12; 
        Statement st = con.createStatement(); 
        a = 123; 
        ResultSet rs = st.executeQuery("SELECT * FROM mytable"); 
        a = 1234; 
        while(rs.next()) 
        { 


        } 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          tDisplayS.setText("YES");   
         } 
        }); 

       } 
       catch(final Exception e) 
       { 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          tDisplayS.setText(e.printStackTrace());   
         } 
        }); 

       } 
      } 
     }).start(); 

    } 

Просто скопируйте этот метод и вызывать его из onCreate() вашей деятельности.

Примечание:

Убедитесь, что база данных должна предоставить все хосту доступа. Вам необходимо запустить запрос, чтобы предоставить доступ ко всем удаленным узлам в вашей базе данных.

Это запрос предоставить доступ к ip приложения.

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;