我正在创建一个可以管理mySql数据库的应用程序,首先我希望用户通过提供主机名,用户名和密码来连接到主机。这是我的代码:
try {
Class.forName(ServerConnect.JDBC_DRIVER);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("Cannot register JDBC Driver...");
}
try {
conn = DriverManager.getConnection("jdbc:mysql://"
+ toServer.getHostname() + "/hrmanagement?" + "user=" + toServer.getUsername()
+ "&password=" + toServer.getPassword());
System.out.println("Connected to the server!");
} catch (SQLException e) {
System.out
.println("Not Connected to the server. Make sure username or password is correct!");
}
我的问题是,如何在不指定数据库的情况下进行连接,以便我可以让用户选择可以连接的数据库。我试过删除“/ hrmanagement?”但它没有连接到服务器。我该怎么办?
答案 0 :(得分:2)
MySQL Connector / J的JDBC URL格式如下,方括号([,])中的项是可选的:
jdbc:mysql://[host][,failoverhost...][:port]/[database] » [?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]...
因此,请删除hrmanagement
,请注意/
和?user...
部分仍然存在
答案 1 :(得分:1)
我的问题是,如何在不指定数据库的情况下进行连接 我可以让我的用户选择他可以连接到哪个数据库。一世 试图删除" / hrmanagement?"但它没有连接到服务器。 我该怎么办?
将问号移至"?user ="。我认为另一个答案是正确的。
在更改数据库方面,我相信您可以使用setCatalog()来使用不同的数据库。
从连接页面:
void setCatalog(String catalog) 抛出SQLException
设置给定的目录名称以选择此子空间 连接对象的工作数据库。
如果驱动程序不支持目录,它将默默忽略它 请求。
调用setCatalog对以前创建或准备没有影响 声明对象。它是实现定义DBMS是否准备 Connection方法时立即进行操作 调用prepareStatement或prepareCall。为了最大的便携性, 应在创建或准备Statement之前调用setCatalog。
参数: catalog - 要在其中工作的目录的名称(此Connection对象的数据库中的子空间)抛出: SQLException - 如果发生数据库访问错误或在已关闭的连接上调用此方法另请参见: getCatalog()
使用这个版本的呼叫可能会更容易,但不那么令人困惑
public static Connection getConnection(String url,
String user,
String password)
throws SQLException
所以你的代码看起来像
try {
conn = DriverManager.getConnection("jdbc:mysql://" + toServer.getHostname(),
toServer.getUsername(),
toServer.getPassword());
conn.setCatalog("someDifferentDB");
System.out.println("Connected to the server!");
} catch (SQLException e) {
System.out.println(e.toString());
}
作为旁注,getConnection将尝试为您加载JDBC驱动程序,因此您并不需要整个Class.forName try / catch块。这是旧代码的遗迹,大多数现代JDBC驱动程序都不需要它。还有一些人需要它,但我相信mysql符合更新的风格。只需确保驱动程序位于命令行的类路径中
java -cp \ path \ to \ mysql \ driver \ driver.jar myProgram