【问题标题】:How to maintain multiple SQL database connections in a single Java file?如何在单个 Java 文件中维护多个 SQL 数据库连接?
【发布时间】:2014-01-28 00:32:27
【问题描述】:

我有一个项目,到目前为止我一直在使用单个数据库。现在需要使用新的数据库。我有一个 Dbconn java 文件,我在其中硬编码了数据库名称、用户名、密码,如下所示:

    con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","pass");

现在我的要求是与新数据库建立另一个连接,以便我可以使用相同的连接对象访问其中的数据。换句话说,我想避免硬编码,我想要一种不同的方式,将来可以容纳更多数量的数据库。谁能告诉我如何处理这个问题?

【问题讨论】:

  • 这实际上是 DI/IoC 的一个很好的用途。诚然,DI 可能会很快变得可怕(尤其是在 Java 和以 XML 为中心的系统中),但无论如何都可以使用 IoC 实践..
  • 如,根据配置文件、命令行参数或...选择单个数据库连接以在整个程序中使用?
  • 当你说“一个新的数据库”时,你是指本地的另一个 mysql 实例,即jdbc:mysql://localhost:3306/anotherdb,还是一个完全不同的数据库实例,即jdbc:mysql://someotherhost:3306/anotherdb

标签: java mysql sql database jdbc


【解决方案1】:

如果另一个数据库在同一个物理 MySQL 实例中,您可以通过调用以下命令从 test 更改为另一个数据库:con.setCatalog("otherDBName")Java Docs for setCatalog

在 JDBC 中,catalogdatabase 相同(基本上是服务器中的命名空间)。如果不是同一个物理数据库,您将不得不创建一个新的Connection 对象来连接到另一个数据库服务器。

【讨论】:

    【解决方案2】:

    如果你想手动完成,你可以创建一个连接数组,并在你的程序中调用适当的一个:

    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

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      建议摆脱低级 JDBC API 并转向某种有用的数据访问抽象——也许 Spring 的 JdbcTemplate 是合适的?从您提供的详细程度来看,我只能猜测您想要换入/换出同一数据库模式的各种实例(例如,开发、阶段、生产)。如果您决定使用Spring,将各种数据库连接详细信息放入应用程序外部的 Spring 配置文件(可能引用 vanilla 属性文件)中是很自然的。使用 Spring,您可能想要配置 DataSource 而不是连接,但您会因为学习使用 JdbcTemplate 所需的少量努力而获得丰厚的回报。如果做不到这一点,您当然可以给自己一个返回连接的方法,并且在该方法中您可以处理要返回的连接——例如

      public Enum MyDb { DEV, STAGE, PROD }
      ...
      con = getConnection(MyDb.PROD)
      

      只是一个想法..

      【讨论】:

        猜你喜欢
        • 2017-01-30
        • 2012-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多