我有一个项目,到目前为止我一直使用单个数据库。现在需要使用新数据库。我有一个Dbconn java文件,其中我硬编码了数据库名称,用户名和密码,如下所示:
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","pass");
现在我的要求是与新数据库建立另一个连接,以便我可以使用相同的连接对象从中访问数据。换句话说,我想避免硬编码,我想要一种不同的方式,以便将来可以容纳更多的数据库。有谁能告诉我如何处理这件事?
答案 0 :(得分:2)
如果另一个数据库位于同一物理MySQL实例中,您可以通过调用以下内容将test
更改为另一个数据库:con.setCatalog("otherDBName")
。 Java Docs for setCatalog
在JDBC中,catalog
与database
(基本上是服务器中的命名空间)是一回事。如果它不是同一个物理数据库,您将不得不创建一个新的Connection
对象来连接到另一个数据库服务器。
答案 1 :(得分:1)
如果您想手动完成,可以创建一个连接数组,并在程序中调用相应的连接:
Connection[] conArray = new Connection[10]; // Just an example
String db, user, pwd;
db = "test";
user = "root";
password = "pass";
connArray[0] = DriverManager.getConnection("jdbc:mysql://localhost:3306/" + db, user, pwd);
db = "another_db";
user = "hermie";
pwd = "nutsAndBolts";
connArray[1] = DriverManager.getConnection("jdbc:mysql://localhost:3306/" + db, user, pwd);
请注意,您可以在运行时构建连接URL:只需使用适当的值分配变量并使用它们。
当然,您可以使用Connection
个对象的集合。
您可以在方法上调用适当的连接。
您可能需要查看连接池。快速谷歌引导我this。
希望这有帮助。
答案 2 :(得分:1)
建议远离低级JDBC API并转向某种有用的数据访问抽象 - 也许Spring的JdbcTemplate是合适的?从您给出的详细程度来看,我所能想到的是您想要交换/转出相同数据库模式的各种实例(例如,开发,阶段,生产)。如果您决定使用Spring,将各种数据库连接详细信息放入应用程序外部的Spring配置文件(可能引用vanilla属性文件)中是很自然的。使用Spring,您可能希望配置DataSource而不是连接,但是您将因学习使用JdbcTemplate所需的一点点努力而获得丰厚的回报。如果做不到这一点,你当然可以给自己一个返回连接的方法,在那个方法中你可以负责返回哪个连接 - 例如。
public Enum MyDb { DEV, STAGE, PROD }
...
con = getConnection(MyDb.PROD)
只是一个想法..