用java编写一个自定义的jdbc驱动程序,这是一个非常基本的驱动程序
我有Web服务,由于一些BI工具软件限制,我需要通过JDBC公开。
非常有限的支持需要很少定义的选择查询。
我所理解的是,我需要实现java接口下的所有类.sql来实现这一点。有没有人做过类似的事情?
我们是否有一些自定义实现,我们需要实现最低限度的代码。
我有Web服务,由于一些BI工具软件限制,我需要通过JDBC公开。
非常有限的支持需要很少定义的选择查询。
我所理解的是,我需要实现java接口下的所有类.sql来实现这一点。有没有人做过类似的事情?
我们是否有一些自定义实现,我们需要实现最低限度的代码。
我写了一个“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) 方法作为最低限度。
所以我必须实现:
我还在 src/main/resources/MET-INF/services/java.sql.Driver 中创建了一个服务提供程序文件,其中包含 org.example.CsvDriver(我的驱动程序实现类名)的内容。
我想,这些就足够了,但不是。我的驱动程序已加载,但驱动程序管理器未找到它。
我还必须从我的驱动程序实现的静态初始值设定项中调用DriverManager.registerDriver(INSTANCE),其中EXACTION是我的Driver实现中的对象。在我看来,这是多余的(因为我写了一个java服务来避免这种情况)。
以下是来源: