【问题标题】:Querying an sql database on a remote machine using java code使用java代码查询远程机器上的sql数据库
【发布时间】:2016-12-06 00:24:24
【问题描述】:

我正在尝试在远程机器上的 mysql 数据库上运行一些查询。我在这台远程机器上没有管理员访问权限,所以我需要先在这台机器上验证我的凭据,然后才能访问数据库(这也需要我的用户名和密码验证)。阅读这篇文章 (Read remote file in java which needs username and password) 后,我可以看到如何使用身份验证来访问远程计算机,并且我熟悉使用 DriverManager 在本地数据库上运行查询;我只是不确定如何将这两个功能结合起来。有什么建议吗?

【问题讨论】:

  • 一般情况下,远程机器上的mysql数据库认证与远程机器上的认证是不同的。这意味着 mysql 有自己的用户名和密码,您应该能够使用该用户名和密码与远程 mysql 服务器连接。不需要在远程机器上进行身份验证。
  • 哦,很高兴知道。因此,如果我在使用带有 DriverManager.getConnection(...) 的 mysql 身份验证时收到“拒绝访问”错误,可能是什么原因导致的?

标签: java mysql remote-access


【解决方案1】:

看起来你用来连接mysql数据库的用户没有远程访问权限,所以你需要授予该用户远程访问权限。

root用户身份在mysql服务器上执行以下查询,以创建新用户并授予该用户远程访问权限-

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

CREATE USER 'username'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

/etc/mysql/my.cnf 文件下面的行注释-

bind-address = 127.0.0.1

然后重启mysql服务器-

sudo service mysql restart

【讨论】:

  • 您必须绑定到外部 IP 地址才能获得远程访问权限。
  • 谢谢,这确实是问题所在!数据库未配置为远程访问
【解决方案2】:

使用 JDBC http://docs.oracle.com/javase/tutorial/jdbc/basics/index.html。 您之前是如何运行 MySQL 查询的?在 JDBC 中,您可以像访问本地机器一样访问远程机器(编辑:在代码中)。

编辑:本教程的信息有点丰富,所以这里有一些代码可以帮助您入门:

static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
private static Connection co;
private Statement st;

public void connectDb(){
    try{
        String url = "jdbc:mysql://localhost/dataset"; //url to _DATABASE_ create as mysqlroot first!
    String user = "theuser";
    String password = "thepassword";

    Class.forName("com.mysql.jdbc.Driver");
    co = DriverManager.getConnection(url, user, password);
    st = co.createStatement();
    co.setAutoCommit(false);
} catch(Exception e){
    e.printStackTrace();
}
}

您需要先获取 JDBC 驱动程序才能使用它(参见教程)!

这是您可以运行查询的方式:

private ResultSet executeQuery(String query){
    ResultSet rs = null;
    try{
         rs = st.executeQuery(query);
         return rs;
        } catch(Exception e){
            System.out.println(query);
            e.printStackTrace();
        }
    return rs;
}

这就是执行更新的方式,注意更新和查询之间的区别!

private void executeUpdate(String query){
    try{
        st.executeUpdate(query);//data manipulation = executeUpdate
        } catch(Exception e){
            System.out.println(query);
            e.printStackTrace();
        }
}

希望对你有所帮助^^-d

【讨论】:

  • 这就是我用来查询本地数据库的代码;但是,当我尝试查询远程数据库(通过将 localhost 更改为远程服务器 IP)时,出现“ 的访问被拒绝”错误。
  • 您好,您需要知道凭据,并且必须配置数据库,以便可以使用这些凭据和远程访问它。因此,您应该与管理员联系。这可以帮助管理员:stackoverflow.com/questions/6239131/…stackoverflow.com/questions/16287559/… 希望这有助于 ^^
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多