这是我的问题: 我尝试通过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应用程序发出完全相同的调用时,它将失败(发送不同的密码字符串)。 我做错了什么?
我感谢你的每一次帮助。
干杯!
答案 0 :(得分:0)
我找到了解决方案。对于所有项目,我都有UTF-8编码。但eclipse决定在运行或调试代码时使用UTF-16。 选项可以在这里找到:运行配置 - >常见 - >编码
好的,eclipse跟我开了个玩笑。 感谢wireshark为我提供了编码错误的提示。
感谢你们帮助我们(包括那些给我-1的人,他们不知道更好;)
干杯!