用java编写自定义jdbc驱动程序是一个非常基本的驱动程序

用java编写自定义jdbc驱动程序是一个非常基本的驱动程序,java,jdbc,driver,Java,Jdbc,Driver,由于一些BI工具软件的限制,我需要通过JDBC公开web服务 非常有限的支持需要很少的已定义的select查询。 据我所知,我需要实现接口java.sql下的所有类来实现这一点。有人做过类似的事情吗?我们是否有一些自定义实现,需要实现最简单的代码。是的,我编写了自定义驱动程序 您的想法是正确的,但是实现了包中的接口。研究API文档,了解每个方法的用途,以便以有意义的方式实现它 抛开您的简单驱动程序不支持的任何方法。有关详细介绍,请参阅 基本上,您需要创建4个类: 司机 联系 声明 结果集 但

由于一些BI工具软件的限制,我需要通过JDBC公开web服务
非常有限的支持需要很少的已定义的select查询。

据我所知,我需要实现接口java.sql下的所有类来实现这一点。有人做过类似的事情吗?
我们是否有一些自定义实现,需要实现最简单的代码。

是的,我编写了自定义驱动程序

您的想法是正确的,但是实现了包中的
接口。研究API文档,了解每个方法的用途,以便以有意义的方式实现它


抛开您的简单驱动程序不支持的任何方法。

有关详细介绍,请参阅

基本上,您需要创建4个类:

  • 司机
  • 联系
  • 声明
  • 结果集

但正如您在该教程中所看到的,它并没有那么简单。

我也遇到过类似的情况。看到一个极简主义的例子会很好,但我也没有找到

我的经验是,考虑到任何API,研究现有的“类似引用”的实现都非常有用。就JDBC而言,这是一个值得研究的好例子

要实现的主要接口是
java.sql.Driver
。H2就是这样实现的:

在这个包中还有其他类别:

H2是一款成熟而复杂的软件,但代码仍然可读且易于学习。

我写了一个“csv jdbc驱动程序”只是为了好玩。这远远不是生产质量代码,我的目标只是(为我自己)演示如何编写jdbc驱动程序

以下是我的经验:

  • 正如其他人所写,它足以从java.sql实现4个接口:驱动程序、语句、连接和结果集

  • 要知道,哪种方法应该用“真实代码”实现,我必须知道,我想如何使用csv驱动程序。这是我的示例代码:

         try (
     Connection conn = DriverManager.getConnection("jdbc:csv:/home/peter/csvdir");
     Statement stmt = conn.createStatement();
     ResultSet rs = stmt.executeQuery("SELECT * FROM test.csv")
     ){
         while (rs.next()) System.out.println(rs.getString(1) + " - " + rs.getString(2));
     }
    
我为DriverManager.getConnection提供了一个jdbc url。在url中,我必须指定一个目录,其中包含不同的csv文件。DriverManager getConnection方法调用Driver.connect(url,info)。这个连接方法应该检查JDBCURL,并决定是否可以处理该url。如果是,则返回连接对象,如果不是,则返回null

在stms.executeQuery中,我必须给出一个SQL select,其中“表名”是csv文件的名称。 我不想实现sql解析器,所以这个jdbc驱动程序只考虑表名

我还必须至少使用ResultSet.next()和ResultSet.getString(int)方法

因此,我必须实施:

  • 连接(字符串、属性)。因为这个方法返回一个连接类
  • 连接构造函数
  • Connection.createStatement方法。因为它返回一个语句类
  • 语句构造函数
  • 语句。执行。因为这将返回一个ResultSet类
  • 结果集构造函数
  • ResultSet.getString(int)
  • ResultSet.next()
我还在src/main/resources/MET-INF/services/java.sql.Driver中创建了一个服务提供者文件,内容为org.example.CsvDriver(我的驱动程序实现类名)

我想,这些就足够了,但还不够。我的驱动程序加载了,但驱动程序管理员没有找到它

我还必须从驱动程序实现的静态初始值设定项调用DriverManager.registerDriver(实例),其中实例是驱动程序实现中的一个对象。在我看来,这似乎是多余的(因为我编写了一个java服务来避免这种情况)

以下是资料来源:


这是一个很好的话题,但不清楚你在问什么。你能分享一些编写驱动程序的代码吗
在一个定义良好的简单csv文件上看到类似SQL的支持是很有趣的。我可以分享我所做的,但老实说,对于csv驱动程序来说,这对你没有什么用处。相信我,这真的很容易。首先创建一个
公共类CsvConnection implements java.sql.Connection
,由于接口依赖性,驱动程序实际上会自行编写。如果您能告诉我们哪些方法是最基本的实现方法,这会有所帮助。毕竟,
java.sql.Connection
接口定义了54个方法。正如您所说,您可以通过简单地返回
null
或抛出
UnsupportedOperationException
跳过其中的大部分。现在有了。