2017-01-03 10 views
0

テスト目的でコンピュータに簡単なデータベースがあり、ノートパソコンからデータベースから情報を取得しようとしています。だから私は私のコンピュータのMySQLデータベース内の情報を見るように私のラップトップに要求する。以下は、自分のコンピュータにあるstudentsテーブルの最初のエントリを収集するためにラップトップで実行しようとしているJavaコードを示しています。java SQLコネクタを使用して別のコンピュータのデータベースに接続する方法

私は自分のラップトップとコンピュータの両方にMySQLワークベンチをインストールしています。コンピュータがデータを保存し、ラップトップだけがデータを抽出する場合、両方のマシンにいる必要があります。

私がこれまで研究して学んだことは、コンピュータのIPの代わりにURLでパブリックIPを使用する必要があることです。そのために追加しましたが、「Connection timed out」スタックトレース私はthisの回答とthisの回答を読んだことがありますが、両方の解決策を理解するのが難しく、MySQLを使用してデータベースからリモートでデータにアクセスするための初心者ガイドを参照できます。私は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ワークベンチ* - あなたはワークベンチではなく、接続するためにMySQLデータベースが必要です。また、1つだけで問題ありません。 Secondは、そのIPアドレスを使用して同じネットワーク上でアクセスすることができます。 – GurV

答えて

2

あなたのJavaコードはおそらく上手です。しかし、問題は、他のマシン上でMySQLサーバが実行されており、パブリックIP上のポート3306でリッスンしていることです。デフォルトではlocalhostだけをリッスンする必要があるので、パブリックIPをリッスンするようにMySQLインストールを変更する必要があります。また、ファイアウォールがアクセスをブロックしていないことを確認してください。ラップトップ上のWorkbenchに接続して、もう一方のボックスのMySQLサーバーにアクセスしてみてください。これを実行している場合は、Javaコードをもう一度試してみてください。

+0

あなたは私に、ラップトップが自分のサーバ上のデータベースに問い合わせるための設定を示唆するチュートリアルを教えてもらえますか? – user217339

+0

'/ etc/mysql/my.cnf'の' bind-address'を '127.0.0.1'からそれは '127.0.0.1'を含むすべてのインターフェースでリッスンしたい場合は' 0.0.0.0'です。また、 '# '記号でコメントアウトしている場合は、コメントすることを忘れないでください。 – Vampire

+0

私はそれがどこか他の場所にあるだろう私は窓で実行しているMySQLのフォルダ内のディレクトリなどを見つけることができないようですか? – user217339

2

、それは、コンピュータがデータを格納する場合は、両方のマシンであることが必要 で とラップトップは、データのみを抽出します。

"コンピュータ"とは何もあなたのサーバーはここにありません。それはmysqlのワークベンチを必要としません。それだけで

パブリックIPデータベースは、パブリックIPアドレスを公開しないことがほとんどないはずです コンピュータ

のためにIPアドレスの代わりにURLで使用する必要がありますMySQLサーバを必要とします。両方のコンピュータがLAN上にある場合、プライベートネットワークIPはサーバーがリッスンする必要があり、接続文字列で使用する必要があります。ポートまたはファイアウォールがパケットをドロップする:サーバーは、そのIPで待機していない、実行されていないので、スタックに トレース

を「接続がタイムアウトしました」と一緒に

CommunicationsException。

関連する問題