通过SQuirreL连接工作,但通过自己的应用程序不起作用。接收用户拒绝访问权限

时间:2017-10-22 18:26:10

标签: java mysql

抱歉我的英语不好,不是母语人士:)

这是我的问题: 我尝试通过JDBC连接到MySQL服务器上托管的数据库(版本:5.6.37)。我没有托管服务器,也无法更改任何服务器配置。 当我尝试使用SQuirreL进行连接时,一切都按预期工作。我可以访问数据库。 当我尝试通过我的IDE(eclipse)通过自行编写的应用程序进行连接时,我得到一个引发者:java.sql.SQLException:用户拒绝访问...(使用密码:是)

我使用HikariCP来管理连接。通过DriverManager.getConnection尝试了非连接池aproach。两次都一样。

我使用的驱动程序是mysql-connector-java-5.1.44-bin.jar

// DriverManager approach
private static final Properties dbProps = new Properties();
static {
    dbProps.put("password", dbPass);
    dbProps.put("user", dbUser);
    dbProps.put("autoReconnect", "true");
    dbProps.put("failOverReadOnly", "false");
    dbProps.put("maxReconnects", "1");
}

...
public static Connection getConnection() {
    Connection con = null;
    try {
    con = DriverManager.getConnection(connectionString, dbProps);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return con;
}
...
// HakiriCP approach
private static HikariConfig config = new HikariConfig();
private static HikariDataSource ds;
private static final Properties dbProps = new Properties();
static {
    PropertyLoader.loadPropertiesFromFile(dbProps); // read properties from external source

    config.setJdbcUrl(String.format("jdbc:mysql://%s:%s/%s", dbProps.getProperty("db.server"),
        dbProps.getProperty("db.port"), dbProps.getProperty("db.database")));
    config.setUsername(dbProps.getProperty("db.user"));
    config.setPassword(dbProps.getProperty("db.pass"));
    config.addDataSourceProperty("cachePrepStmts", dbProps.getProperty("db.cachePrepStmts", "true"));
    config.addDataSourceProperty("prepStmtCacheSize", dbProps.getProperty("db.prepStmtCacheSize", "250"));
    config.addDataSourceProperty("prepStmtCacheSqlLimit", dbProps.getProperty("db.prepStmtCacheSqlLimit", "2048"));
    ds = new HikariDataSource(config);
}

...

public static Connection getConnection() {
    Connection con = null;
    try {
        con = ds.getConnection();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return con;
}
...

编辑 - 当我尝试连接尝试时,我会看到不同的编码密码(SQuirreL vs App)。但是,当我将密码打印到控制台时,它正是与SQuirreL一起使用的密码。

编辑 - 连接处理在一个单独的类中完成。当我单独测试它而没有任何其他逻辑(它是一个旧的摇摆应用程序)一切正常。但是,当我从swing应用程序发出完全相同的调用时,它将失败(发送不同的密码字符串)。 我做错了什么?

我感谢你的每一次帮助。

干杯!

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。对于所有项目,我都有UTF-8编码。但eclipse决定在运行或调试代码时使用UTF-16。 选项可以在这里找到:运行配置 - >常见 - >编码

好的,eclipse跟我开了个玩笑。 感谢wireshark为我提供了编码错误的提示。

感谢你们帮助我们(包括那些给我-1的人,他们不知道更好;)

干杯!