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

2022-09-04 07:02:13

我有Web服务,由于一些BI工具软件限制,我需要通过JDBC公开。
非常有限的支持需要很少定义的选择查询。
我所理解的是,我需要实现java接口下的所有类.sql来实现这一点。有没有人做过类似的事情?
我们是否有一些自定义实现,我们需要实现最低限度的代码。


答案 1

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

以下是我的经验:

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

  • 要知道,应该用“真实代码”实现哪种方法,我必须知道,我想如何使用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中,我必须指定一个目录,其中有不同的csv文件。DriverManager getConnection 方法调用 Driver.connect(url, info)。此连接方法应检查 jdbc url 并决定它是否可以处理该 url。如果是,则返回一个 Connection 对象,如果不是,则返回 null。

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

我还必须使用 ResultSet.next() 和 ResultSet.getString(int) 方法作为最低限度。

所以我必须实现:

  • Driver.connect(String, Properties)。因为此方法返回的连接类
  • 连接构造函数
  • Connection.createStatement 方法。因为这会返回一个 Statement 类
  • 语句构造函数
  • Statement.executeQuery。因为这会返回一个 ResultSet 类。
  • 结果集构造函数
  • ResultSet.getString(int)
  • ResultSet.next()

我还在 src/main/resources/MET-INF/services/java.sql.Driver 中创建了一个服务提供程序文件,其中包含 org.example.CsvDriver(我的驱动程序实现类名)的内容。

我想,这些就足够了,但不是。我的驱动程序已加载,但驱动程序管理器未找到它。

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

以下是来源:


答案 2

有关一个好的演练,请参阅此 Java 世界教程

基本上你需要创建4个类:

  • 司机
  • 连接
  • 陈述
  • 结果集

但是,正如您将在该教程中看到的那样,它并不那么简单。


推荐