如何使用java SQL连接器连接到另一台计算机上的数据库

时间:2017-01-03 17:34:52

标签: java mysql remote-access

我的计算机上有一个简单的数据库用于测试目的,我试图从我的笔记本电脑中检索数据库中的一些信息。所以我希望我的笔记本电脑请求查看我的计算机MySQL数据库中的信息。下面显示了我试图在笔记本电脑上运行以收集学生表中第一个条目的java代码,该表位于我的计算机上。

我的笔记本电脑和计算机上都安装了MySQL工作台,如果计算机存储数据并且笔记本电脑只提取数据,则需要在两台机器上安装。

我迄今为止从研究中学到的是,应该在网址中使用公共IP而不是计算机的ip,所以我添加了,但我收到了一个CommunicationsException以及" Connection超时"在堆栈跟踪中。我已经通过this回答和this回答了类似的问题,但我很难理解这两个解决方案,有人可以向我推荐一个远程访问数据的初学者指南使用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 个答案:

答案 0 :(得分:2)

  

我的笔记本电脑和电脑都安装了MySQL工作台,是吗?   如果计算机将存储数据,则必须在两台机器上   而笔记本电脑只提取数据。

没有你称之为&#34;计算机&#34;你的服务器在这里。它不需要mysql工作台。它只需要mysql服务器

  

应该在url中使用public ip而不是ip   计算机

数据库几乎永远不会暴露在公共IP地址上。如果您在LAN上同时拥有这两台计算机,那么专用网络IP就是服务器应该监听的内容,以及您应该在连接字符串上使用的内容。

  

CommunicationsException以及&#34;连接超时&#34;在堆栈中   微量

因为服务器没有运行,所以没有监听ip:port或firewalled来丢弃数据包。

答案 1 :(得分:2)

您的Java代码可能很好。但问题是,在另一台机器上运行和侦听公共IP上的端口3306的MySQL服务器是什么?默认情况下,它应该只监听localhost,因此您需要更改MySQL安装,以便它监听公共IP。还要确保没有防火墙阻止访问。尝试连接笔记本电脑上的Workbench以访问另一个盒子上的MySQL服务器。如果运行正常,请再次尝试Java代码。

相关问题