由于某些 BI 工具软件限制,我需要通过 JDBC 公开 Web 服务。
非常有限的支持需要很少的定义的选择查询。
据我所知,我需要在接口 java.sql 下实现所有类才能实现这一点。有没有人做过类似的事情?
我们是否有一些自定义实现,我们需要实现最少的代码。
Pet*_*erB 16
我写了一个“csv-jdbc-driver”只是为了好玩。它距离生产质量代码还很远,我的目标只是(为我自己)演示如何编写 jdbc 驱动程序。
以下是我的经历:
正如其他人所写,从 java.sql 实现 4 个接口就足够了:Driver、Statement、Connection、ResultSet。
要知道哪种方法应该用“真实代码”来实现,我必须知道我想如何使用 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));
}
Run Code Online (Sandbox Code Playgroud)
我给 DriverManager.getConnection 提供了一个 jdbc url。在 url 中,我必须指定一个目录,其中包含不同的 csv 文件。DriverManager getConnection 方法调用 Driver.connect(url, info)。此 connect 方法应检查 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 未找到它。
我还必须从我的驱动程序实现的静态初始化程序中调用 DriverManager.registerDriver(INSTANCE),其中 INSTANCE 是我的驱动程序实现中的一个对象。在我看来这是多余的(因为我编写了一个java服务来避免这种情况)。
以下是来源:
我也遇到过类似的情况。很高兴看到一个简约的示例,但当时我没有找到这样的示例。
我的经验是,考虑任何 API,研究现有的“类似参考”的实现都非常有用。就 JDBC 而言,H2是一个很好的研究示例。
实现的主要接口是java.sql.Driver. 这就是 H2 的实现方式:
https://github.com/h2database/h2database/ 。。。/驱动程序.java
这个包中还有其他类:
https://github.com/h2database/h2database/ 。。。/jdbc
H2是一个成熟且复杂的软件,但代码仍然具有可读性和可研究性。
如果您好奇,这里是miniconnect项目(由我维护)的一个更简单的实现:
https://github.com/miniconnect/miniconnect/ 。。。/jdbc
是的,我已经编写了自定义驱动程序。
你的想法是正确的,但是要interfaces在java.sql包中实现。研究 API 文档以了解每种方法的用途,以便您能够以有意义的方式实现它。
UnsupportedOperationException从您的简单驱动程序不支持的任何方法抛出。
有关良好的演练,请参阅此 Java World 教程。
基本上你需要创建4个类:
但是正如您将在该教程中看到的那样,事情并没有那么简单。
| 归档时间: |
|
| 查看次数: |
8759 次 |
| 最近记录: |