使用Java创建新的本地数据库

时间:2012-12-03 22:01:20

标签: java sql database local embedded-database

我的目标是创建一个可以使用Java读取和写入的本地数据库。我有一些使用Python操作本地sqlite数据库的经验,并通过VB.Net与Microsoft Azure上的现有网络数据库进行交互,但用于创建数据库的Java公式正在逃避我。

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

JDBC Tutorial看起来一旦我启动并运行它将非常有用,但目前超出了我的范围,因为我还没有现有的数据库。

Many sources提出了H2,MySQL,Derby或Hypersonic DB等解决方案。但是,由于以下几个原因,我不愿意安装扩展程序(如果这是正确的术语):

  • 这个项目最初的目的是帮助我学习Java的方法 - 扩大项目的范围会削弱我对“基础”语言的体验,并可能增加参与“货物崇拜编程”的诱惑
  • 如果这个项目确实被分发给其他用户(虽然不太可能,但仍然!),我不想强​​迫他们安装超过Java的核心。
  • 我根本不知道如何在Java中安装扩展程序(附加组件?模块?) - 一次一个小步骤!

出于类似的原因,安装Microsoft SQL Server效率不高。

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

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

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

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

4 个答案:

答案 0 :(得分:6)

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

据推测,你会想要按照Class.forName("driver")

的方式做点什么

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

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

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

但是,如果你真的想使用本地数据库/文件,你可能想看看SQLite,这可能是一种方法,虽然我建议采用MySQL方法,因为它很多更容易配置和了解JDBC的工作原理。

如果你还在考虑SQLite,请查看:

Java and SQLite

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

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

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

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

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

http://hsqldb.org/

答案 3 :(得分:0)

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

如果要拥有自包含代码,只需在类路径中包含可嵌入数据库的.jar文件即可。这样,您就可以在代码中创建数据库实例,并最大限度地减少外部依赖关系。

您可以找到here java嵌入式数据库列表

您可以在here中找到有关如何在代码中嵌入HSQLDB的示例。