2

我的目标是创建一个可以用 Java 读写的本地数据库。我在使用 Python 操作本地 sqlite 数据库以及通过 VB.Net 与 Microsoft Azure 上现有的网络数据库进行交互方面有一些经验,但是用于创建数据库的 Java 公式让我无法理解。

大多数来源(如JDBC Docs)似乎都假设您正在通过网络协议或托管在 localhost 上的数据库访问数据库。我想要的实现是创建数据库并将其存储在一个文件(或文件集合)中,以便可以在本地存储和访问它,而无需网络连接(可能通过“文件:”协议)。

JDBC 教程看起来在我启动并运行后会非常有用,但目前超出了我的范围,因为我什至还没有现有的数据库。

许多 消息来源都提出了 H2、MySQL、Derby 或 Hypersonic DB 等解决方案。但是,出于多种原因,我不愿意安装扩展程序(如果这是正确的术语):

  • 这个项目最初是为了帮助我了解 Java ——扩大项目范围会削弱我对“基础”语言的经验,并且可能会增加从事“货物崇拜编程”的诱惑
  • 如果这个项目真的被分发给其他用户(诚然不太可能,但仍然如此!),我不想强​​迫他们安装更多的 Java 核心。
  • 我根本不知道如何在 Java 中安装扩展(附加组件?模块?)——一次一步!

出于类似的原因,安装 Microsoft SQL Server 不会有成效。

这个答案看起来接近我的目标;但是,它给出了错误:

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/?user=root&password=rootpassword

并尝试“jdbc:file://targetFile.sql”会给出类似的错误。

我见过术语“嵌入式”数据库,我认为它是“本地数据库”的子集(即本地数据库存储在同一系统上 - 嵌入式数据库是仅由单个应用程序使用的本地数据库) - 如果我的定义有误,请随时纠正我!

4

4 回答 4

6

最有可能的是,您收到错误的原因是您在实际使用它来建立连接之前没有注册驱动程序(使用反射......)等。

大概你会想做一些类似的事情Class.forName("driver")

然后在必要时进行转换,然后在调用该getConnection()方法之前将其注册到 DriverManager 中。

这是一个非常有用的链接,可以帮助您解决问题:

http://www.kfu.com/~nsayer/Java/dyn-jdbc.html

但是,如果你真的想使用本地数据库/文件,你可能想看看 SQLite,这可能是一种方法,尽管我建议使用 MySQL 方法,因为它更容易配置并了解事物如何与 JDBC 一起工作。

如果您仍在考虑使用 SQLite,请查看:

Java 和 SQLite

我看到您在将外部 .jar 文件导入您的代码时需要一些指导(例如,您将用于 JDBC 驱动程序的第三方库)。您是在使用 IDE(例如 Eclipse、Netbeans 等)还是在文本编辑器中编写并手动编译?

于 2012-12-03T22:24:34.377 回答
3

最近出现了一些嵌入式纯Java数据库,它们的接口非常简单,通常只是java.util.Map,不涉及使用JDBC或其他SQL工件,并将它们的数据存储在单个文件或目录中:

主要缺点是大多数此类数据库仅提供简单的键值模型。

于 2016-07-08T12:19:52.563 回答
0

DBC 可以与任何具有 JDBC 驱动程序的数据库一起使用,它不一定是“网络模式”下的数据库,它也可以与嵌入式数据库一起使用。

以下是一些 Java 和可嵌入数据库:

http://www.h2database.com/html/main.html

http://db.apache.org/derby/

http://hsqldb.org/

于 2012-12-03T22:08:08.507 回答
0

Java 的 JDK 不包括任何数据库的实现或访问它的驱动程序。它只提供 JDBC 作为连接到“数据库”的抽象。由您决定在代码中包含所有需要的库。

如果你想拥有一个自包含的代码,你可以简单地在你的类路径中包含一个可嵌入数据库的 .jar 文件。这样,您可以在代码中创建数据库实例并最小化外部依赖项。

您可以在此处找到java 可嵌入数据库的列表

您可以在此处找到如何在代码中嵌入 HSQLDB 的示例。

于 2012-12-03T23:16:12.047 回答