2017-01-03 1 views
0

Ich habe eine einfache Datenbank zum Testen vorgesetzt, auf meinen Computer mit einer Datenbank auf einem anderen Computer zu verbinden, verwendet werden, und ich versuche, einige Informationen aus der Datenbank abgerufen wird, von meinem Laptop. Also möchte ich, dass mein Laptop eine Anfrage stellt, um die Informationen in meiner Computer MySQL-Datenbank zu sehen. Im Folgenden wird der Java-Code gezeigt, den ich auf meinem Laptop ausführen möchte, um den ersten Eintrag in der Students-Tabelle zu sammeln, die sich auf meinem Computer befindet.Wie kann der Java-SQL-Anschluss

Ich habe Werkbank MySQL installiert auf beiden meinen Laptop und Computer, ist es notwendig, auf beiden Rechnern zu sein, wenn der Computer die Daten gespeichert werden und der Laptop nur Daten extrahiert.

Was ich bisher aus der Forschung gelernt habe, ist, dass die öffentliche IP in der URL statt der IP für den Computer verwendet werden sollte, also fügte ich das hinzu, aber ich erhielt eine CommunicationsException zusammen mit "Connection timed out" in die Stapelverfolgung. Ich habe gelesen durch this Antwort und this Antwort auf ein ähnliches Problem, aber ich habe Schwierigkeiten, die beiden Lösungen zu verstehen, könnte jemand mich zu einem Anfänger verweisen führen aus der Ferne Daten aus einer Datenbank den Zugriff auf MySQL.

public class TestRemote{ 
    //JDBC variables 
    Connection connection; 
    Statement statement; 
    ResultSet resultSet; 

    //String variables 
    String url; 
    String user; 
    String password; 

    public static void main(String[] args) { 
     TestRemote sql = new TestRemote(); 
     ArrayList<String> firstnames = sql.getColumn("students", "firstname", "studentid=4"); 

     System.out.println(firstnames.get(0)); 
    } 

    // Constructor 
    public TestRemote() 
    { 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
     } catch (ClassNotFoundException e) { 
      System.out.println("couldnt find class"); 
     } 
     url = "jdbc:mysql://81.159.3.167:3306/test";   //?autoReconnect=true&useSSL=false"; 
     user = "user"; 
     password = "pass123"; 

     connection = null; 
     statement = null; 
     resultSet = null;  
    } 

    private void closeConnection(){ 
     try{ 
      if(connection != null) 
       connection.close(); 
      if(statement != null) 
       statement.close(); 
      if(resultSet != null) 
       resultSet.close(); 

      connection=null; resultSet=null; statement=null; 
     }catch(Exception e){ 
       e.printStackTrace(); 
     } 
    } 

    public ArrayList<String> getColumn(String table, String column, String where) { 
     ArrayList<String> resultsArray = new ArrayList<String>(); 
     try { 
      connection = DriverManager.getConnection(url, user, password); 
      statement = connection.createStatement(); 
      if(!where.equals("")) 
       resultSet = statement.executeQuery("SELECT "+column+" FROM "+table + " WHERE "+where); 
      else 
       resultSet = statement.executeQuery("SELECT "+column+" FROM "+table); 

      while(resultSet.next()) { 
       String val = resultSet.getString(1); 
       if(val==null) 
        resultsArray.add(""); 
       else 
        resultsArray.add(val); 
      } 
      //resultsArray = (ArrayList<String>) resultSet.getArray(column); 
     } catch (SQLException ex) { 
      Logger lgr = Logger.getLogger(Model.class.getName()); 
      lgr.log(Level.SEVERE, ex.getMessage(), ex); 
     } 
     closeConnection(); 

     return resultsArray; 
    } 
} 
+2

* MySQL Workbench beiden Laptops installiert * - Sie müssen MySQL-Datenbank zu verbinden, nicht Werkbank. Auch nur auf einer ist in Ordnung. Second kann mit der IP-Adresse auf dasselbe Netzwerk zugreifen. – GurV

Antwort

2

Ihr Java-Code ist wahrscheinlich in Ordnung. Aber die Frage ist, ist auf der anderen Maschine ein MySQL-Server läuft und auf Port 3306 auf der öffentlichen IP zu hören? Standardmäßig sollte es nur auf localhost abhören, daher müssen Sie Ihre MySQL-Installation so ändern, dass sie auf die öffentliche IP-Adresse hört. Stellen Sie außerdem sicher, dass keine Firewall den Zugriff blockiert. Versuchen Sie, sich mit der Workbench auf dem Laptop zu verbinden, um den MySQL-Server auf der anderen Box zu erreichen. Wenn Sie das Problem haben, versuchen Sie es erneut mit Ihrem Java-Code.

+0

können Sie mich zu einem Tutorial leiten, das schlägt vor, welche Einstellung zu verwenden, damit der Laptop die Datenbank auf meinem Server abfragen kann – user217339

+0

In '/ etc/mysql/my.cnf' set' bind-Adresse' von '127.0.0.1' zu die IP, auf die es hören soll, oder "0.0.0.0", wenn Sie möchten, dass es auf allen Schnittstellen einschließlich "127.0.0.1" hört. Und vergiss nicht, es zu kommentieren, wenn es mit einem # -Zeichen auskommentiert ist. – Vampire

+0

Ich kann nicht scheinen, das Verzeichnis usw. im MySQL-Ordner zu finden, den ich auf Fenstern laufen lasse, würde es irgendwo anders gelegen sein? – user217339

2

Ich habe MySQL Workbench auf beide meinem Laptop und Computer installiert ist, es notwendig ist, auf beiden Rechnern zu sein, wenn der Computer die Daten gespeichert werden und der Laptop nur Daten extrahiert.

Nein, was Sie den "Computer" nennen, ist Ihr Server hier. es benötigt keine mysql workbench. es braucht nur MySQL-Server

die öffentliche IP sollte

Eine Datenbank soll so gut wie nie auf der öffentlichen IP-Adresse ausgesetzt wird für die Computer in der URL anstelle der IP verwendet werden. Wenn Sie beiden Computer im LAN haben, ist der private Netzwerk-IP, was der Server auf hören sollte, und das ist, was Sie auf der Verbindungszeichenfolge verwendet werden sollen.

CommunicationsException zusammen mit "Connection timed out" im Stapel Spur

Da der Server nicht ausgeführt wird, nicht auf dieser IP hören: port oder Firewall-Pakete fallen zu lassen.

Verwandte Themen