【问题标题】:How do I implement getConnection() in DataSource in Java?如何在 Java 中的 DataSource 中实现 getConnection()?
【发布时间】:2010-11-02 07:50:14
【问题描述】:

我正在阅读 DataSource here,并尝试通过使用一个简单文件作为我的“数据源”在我自己的小项目中实现它。我现在创建了一个非常简单的类...

public class QueueData implements DataSource { ... }

虽然它很简单的原因是因为我无法找到一个资源来解释实现的方法应该如何工作。每个人似乎都只是列出了一个上下文的初始化和一个神奇的 getConnection() 调用,就像这样。

    Context ctx = new InitialContext(env1);
    DataSource ds = (DataSource)ctx.lookup("jdbc/mydatasource");
    Connection conn = ds.getConnection(); // Magical method!

但是你们中的哪一位真的可以给我一个例子,说明 getConnection() 中的代码应该是什么样子的吗?

【问题讨论】:

  • 我认为这里有些混乱。你的功能需求到底是什么?只是通过数据源使用特定的 JDBC 驱动程序连接特定的数据库?或者您真的想自己开发自己的 JDBC 驱动程序,因为您的问题目前正在暗示?
  • 总是参考最新的文档,这样你就不会得到任何“逐步淘汰”的建议; download.oracle.com/javase/6/docs/technotes/guides/jdbc/…
  • javax.sql.DataSource 是定义该方法的接口。实现该方法是驱动程序供应商的工作。如果您打算编写自己的驱动程序(无论出于何种原因),则必须实现该接口。 getConnection 中的代码将取决于它建立连接的底层“数据库”。

标签: java interface jdbc connection datasource


【解决方案1】:

没有人展示如何实现 DataSource 的示例而“只是”使用它们的原因是只有 JDBC 驱动程序供应商(通常是数据库制造商)需要编写它们。

它应该做的当然是返回一个 Connection 对象,该对象也需要是驱动程序特定类的实例。在您的情况下,可以接受 SQL 语句从文件中读取。

您的代码可能如下所示:

 public Connection getConnection(){
      final String fileName = getFileNameFromMyDatabaseUrl();
      return new MyFileConnection(new File(fileName));
 }

当然也不是很有趣的代码。

您可以查看一些开源 DataSource 实现以了解它们的作用:

【讨论】:

  • 谢谢,这很有意义。我回家后会尝试该代码。出于好奇,您是如何知道“MyFileConnection”类的?看来这是我缺少的链接!
  • 那是我缺少的链接,而不是。
【解决方案2】:

这并不神奇。您检索绑定到 JNDI 服务器的 DataSource 对象,通常是在您在应用程序服务器中设置连接池时。此设置要求您提供所有必要的数据库详细信息,例如连接 url、身份验证凭据和其他选项,例如该特定数据库的 DataSource 类(存在于该数据库附带的 jdbc 驱动程序中)。此设置信息用于创建DataSource,它知道如何为给定数据库分发连接。

假设您要编写自己的实现,该实现为客户端提供 NOOP 连接(所有操作都不会产生任何结果的连接对象)。您所要做的就是向应用服务器 JNDI 服务器“注册”一个自定义的DataSource 实现。该实现的 getConnection() 方法只会返回一个实现 Connection 接口的类和什么都不做的方法。

【讨论】:

    【解决方案3】:

    Connection 本身就是一个接口,你也需要实现它。然后,您的 getConnection() 将返回您自己的类的实例。但是,请为大量工作做好准备……(例如,如果您希望能够通过上下文获取数据源,则需要先注册您的实现。)

    为什么要开发自己的数据源?网络上有非常轻量级的基于文件和进程内的数据库库(虽然我不得不承认我不太了解它们),例如HSQLDB (Wikipedia article)、H2 (@ 987654324@)...

    如果您使用 C# 进行开发,我还建议您学习 Linq To XML,但我不知道 Java 世界是否已经提出了对应的...

    【讨论】:

    • 谢谢,这很有用。我不知道网络上有基于文件的轻量级数据库库。如果您想向我发送一些参考资料或文字进行搜索,我将不胜感激。
    猜你喜欢
    • 2016-06-21
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    • 2020-04-08
    • 2011-05-13
    • 2010-10-02
    • 2017-03-20
    • 2011-05-11
    相关资源
    最近更新 更多