使用java从另一个系统访问mysql数据库

时间:2012-01-21 08:31:12

标签: java mysql

我正在研究java swing中的一个接口。我们有一个与lan连接的四个系统。该接口用于从同一局域网中的另一个系统访问数据库我使用以下代码通过给出来访问数据库IP地址,数据库名称,表名但我无法连接其他系统数据库。我可以这样做吗?

 public void dbconnection() {

        String name = "";
        String port = "3306";
        String user = "systech";
        String pass = "systech";
        String dbname = "cascade_demo";
        String host="192.168.1.61";

        try {

            Class.forName("com.mysql.jdbc.Driver");

              String url = "jdbc:mysql://"+host+":"+  port + "/" + dbname;
            System.out.println("URL:" + url);
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            Connection con = DriverManager.getConnection(url, user, pass);
            String qry2 = "select * from item_master";
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery(qry2);
            while (rs.next()) {

                name = rs.getString(1);
                System.out.println("Name:" + name);

            }


            rs.close();
            st.close();
            con.close();


        } catch (Exception e) {
            System.out.println("Exception:" + e);
        }
    }

3 个答案:

答案 0 :(得分:2)

使用以下代码

public void dbconnection() {

    String name = "";
    String port = "3306";
    String user = "systech";
    String pass = "systech";
    String dbname = "cascade_demo";
    String host="192.168.1.61";

    try {
        String url = "jdbc:mysql://"+host+":"+  port + "/" + dbname;
        Class.forName("com.mysql.jdbc.Driver").newInstance ();
        Connection con = DriverManager.getConnection(url, user, pass);
        String qry2 = "select * from item_master";
        Statement st = con.createStatement();
        ResultSet rs = st.executeQuery(qry2);
        while (rs.next()) {
            System.out.println("Name:" + rs.getString(1));
        }

        rs.close();
        st.close();
        con.close();


    } catch (Exception e) {
        System.out.println("Exception:" + e);
    }
}

另外,请确保包含用于连接的jar文件。您将获得jar文件here

更新1:

所以,你有一个

CommunicationsException: Communications link failure

我引用this answer,其中还包含一步一步的MySQL + JDBC教程:

  

如果您获得SQLException: Connection refusedConnection timed out或MySQL特定CommunicationsException: Communications link failure,则表示根本无法访问该数据库。这可能有以下一个或多个原因:

     
      
  1. JDBC URL中的IP地址或主机名错误。
  2.   
  3. 本地DNS服务器无法识别JDBC URL中的主机名。
  4.   
  5. JDBC URL中缺少或错误端口号。
  6.   
  7. 数据库服务器已关闭。
  8.   
  9. 数据库服务器不接受TCP / IP连接。
  10.   
  11. 数据库服务器已用完连接。
  12.   
  13. Java和DB之间的某些东西阻止了连接,例如防火墙或代理。   

  14.         

    要解决其中一个问题,请遵循以下建议:

         
        
    1. 使用ping验证并测试它们。
    2.   
    3. 刷新DNS或在JDBC URL中使用IP地址。
    4.   
    5. 根据MySQL DB的my.cnf进行验证。
    6.   
    7. 启动数据库。
    8.   
    9. 验证mysqld是否在没有--skip-networking option的情况下启动。
    10.   
    11. 重新启动数据库并相应地修改代码,以关闭finally
    12. 中的连接   
    13. 禁用防火墙和/或配置防火墙/代理以允许/转发端口。   

    14.   

更新2

  1. 如果您的系统是Windows,请转到开始>>运行。
  2. 输入command。这将打开命令提示符。
  3. 输入“ping 192.168.1.61”
  4. 您可能会收到以下格式的回复。
  5. 使用32字节数据对192.168.1.61 [192.168.1.61]进行Ping操作:

    来自192.168.1.61的回复:bytes = 32 time = 101ms TTL = 124

    如果你没有得到上述格式的东西,那么你的MYSQL服务器ip 192.168.1.61是不可访问的。请您的团队先启动服务器。 :(

    如果你有Linux版本,请打开终端并按照步骤3进行操作。

    另请查看以下链接。那些可能会帮助你...

    1. http://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html

答案 1 :(得分:1)

您应该下载jdbc driver并替换

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

通过

Class.forName("com.mysql.jdbc.Driver");

如果您在更换Obdc后仍有问题,请发布例外。 还要检查防火墙设置和数据库权限。

答案 2 :(得分:1)

如果您将获得异常,您的应用将无法释放系统资源。这会更好:

} finally {
    try { 
         rs.close();
         st.close();
         con.close();

    } catch( Exception e ) {
         e.printStackTrace();
    }
}