从主机上的java程序访问docker中的mysql数据库

时间:2018-06-08 22:53:51

标签: java mysql docker

我有一个在docker容器上运行的mysql服务器。启用的端口是3306.我尝试连接到一个数据库并使用jdbc从Java进行测试选择。到目前为止,这是我的代码:

Conexion.java

package webscraper;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class Conexion {
    protected Connection cn = null;
    protected PreparedStatement ps = null;
    protected ResultSet rs = null;

    public Connection obtenerConexion() throws Exception {
        Class.forName("com.mysql.jdbc.Driver");
        return DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/prueba","test","testuser");
    }
}

PruebaDao.java

package webscraper;

import java.lang.Exception;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.ArrayList;

public class PruebaDao extends Conexion {

    public static void main(String args[]) throws Exception, SQLException {
        PruebaDao p = new PruebaDao();
        p.test();
    }

    public void test() throws SQLException {
        try {
            String qryUsuario = "SELECT id, usuario FROM usuario;";
            cn = obtenerConexion();
            ps = cn.prepareStatement(qryUsuario);
            rs = ps.executeQuery();
            while (rs.next()) {
                System.out.println("Usuario " + rs.getInt(1) + ": " + rs.getString(2));
            }
        } catch (Exception e) {
            System.out.println("Error en main por " + e.getMessage());
        } finally {
            if (cn != null) {
                cn.close();
            }
        }
    }

}

我想从PruebaDao.java(位于主机上)执行单个选择到docker容器上托管的mysql服务器。但是当我执行PruebaDao.java时,我收到了下一条消息:

通讯链接失败。成功发送到服务器的最后一个数据包是0毫秒前。驱动程序未收到来自服务器的任何数据包。

我尝试在jdbc字符串连接中使用localhost进行连接,但它似乎是一样的。我执行了docker ps并获得了下一个输出:

IMAGE COMMAND创建状态端口名称 ae2161d9724d mysql / mysql-server:5.5" /entrypoint.sh mysq ..." 7天前最多30分钟(健康)3306 / tcp mysql1

这似乎是正确的端口。

任何帮助将不胜感激:)

0 个答案:

没有答案