我有一台运行在bluehost机器上的数据库服务器,我给自己提供远程IP访问(通过我的IP地址)。
在我的客户端机器上,我有MySQL工作台,还有一些Java代码。MySQL工作台正在使用我想要的数据库获取连接。使用驱动程序管理器连接,我无法指定我的数据库,例如在URL中的端口#后使用正斜杠,否则会出现连接错误。
我可以使用Workbench或驱动程序管理器获得具有相同用户ID和密码的连接,但使用JDBC,它不想让我访问相同的数据库。
当我尝试执行这个(JDBC): "use database"
时,我得到:
拒绝用户'userid'@'184.11.22.%'访问数据库'database'
我使用的URL是
jdbc:mysql://(server-ip):(port)
如果我试图在URL上附加一个"/(数据库)",则会导致访问冲突。MySQL工作台没有获得任何其他特殊信息,但似乎与指定的默认模式连接。相同的客户端机器;相同的用户id和密码。JDBC连接出了什么问题?
添加Java代码:
db = DriverManager.getConnection(
"jdbc:mysql://74.220.192.113/advanfc7_atm?" +
"user=(myuserid&password=(mypwd)");
System.out.println("Connected.");
statement = db.createStatement();
statement.execute("use advanfc7_atm");
} catch (Exception e) {
System.out.println("InitDB() "+e.getMessage());
}
我还使用了getConnection()的3个参数,将userid和password分隔为第二个和第三个参数。
getConnection代码中有一个小语法错误:
db = DriverManager.getConnection(
"jdbc:mysql://74.220.192.113/advanfc7_atm?" +
"user=(myuserid&password=(mypwd)");
请注意,user=(myuserid
上缺少右括号。应该是user=(myuserid)
。
改为:
由于每个驱动程序都有不同的url语法,因此通常使用DriverManager.getConnection(String url, String user, String password)
方法更安全。
示例用法:
db = DriverManager.getConnection(
"jdbc:mysql://74.220.192.113/advanfc7_atm",
"myuserid",
"mypwd");