2010-05-26 284 views
3

我想创建一个嵌入式数据库的桌面应用程序。数据库是JavaDB(德比)。我已将jar文件derby.jar连接到我的项目。问题是我不明白如何注册一个驱动程序来使用这个数据库。据说我应该使用 Class.forName(“org.apache.derby.jdbc.EmbeddedDriver”) 但是如果这是另一个数据库,并且它的驱动程序不在java标准包中呢?如你所见,我对此感到困惑。我想知道,如何使用我的连接derby.jar,如何使用其jdbc驱动程序以及如何在指定目录中创建表。Java:嵌入式数据库

请尽可能详细地给出答案。 (我是这个虚拟的)))

+0

在这种情况下'Class.forName()'用于加载驱动程序类: http://www.herongyang.com/jdbc/sqljdbc-jar-Loading-Driver-Class.html – 2010-05-26 08:44:54

+0

嗯,我不喜欢不知道这是什么意思... – Dmitry 2010-05-26 14:47:10

回答

5

您可以使用如下语句:

Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); 

加载和注册JDBC驱动程序类的德比,让JDBC java.sql.DriverManager可以找到驱动程序时要连接到数据库。如果您想连接到不同的数据库或使用不同的驱动程序实现,则必须更改所用驱动程序的名称。当然,您可以将信息放在配置文件中,而不是将其硬编码到您的程序中,以便您可以更改驱动程序而无需重新编译程序。

例如,将必要的信息在一个配置文件database.properties

jdbc.driver=org.apache.derby.jdbc.EmbeddedDriver 
jdbc.url=jdbc:derby:derbyDB;create=true 
jdbc.username=dbusername 
jdbc.password=dbpassword 

然后在你的程序加载这些设置,并利用它们来打开一个数据库连接:

InputStream in = new FileInputStream("database.properties"); 
Properties props = new Properties(); 
props.load(in); 
in.close(); 

String driver = props.getProperty("jdbc.driver"); 
Class.forName(driver); 

String url = props.getProperty("jdbc.url"); 
String username = props.getProperty("jdbc.username"); 
String password = props.getProperty("jdbc.password"); 

Connection conn = DriverManager.getConnection(url, username, password); 

Apache Derby Tutorial和Sun的JDBC Tutorial

+0

非常感谢您提供这样详细的答案! – Dmitry 2010-05-26 09:55:18

+0

这些如何与嵌入式数据库一起工作?我的意思是我该如何处理嵌入式数据库?或者jvm在其连接的库中搜索可用的数据库?最后,我如何在指定的目录中创建数据库? – Dmitry 2010-05-26 10:01:14

+0

嵌入式数据库是一种与应用程序本身运行相同进程的数据库(而不是在单独的进程中,甚至在不同的计算机上运行)。在JDBC中使用嵌入式数据库的方式与任何其他数据库相同。请注意,Apache Derby教程的第3步解释了如何将其用作嵌入式数据库。 – Jesper 2010-05-26 10:06:49

1

实际上,Derby不是“标准”Java包的一部分,它包含在Sun的Windows发行版中,但默认情况下它不包含在OS X中。

要回答看起来是你的问题,你需要将所需数据库的jar文件添加到你的类路径中,并使用Class.forName(“”)和该数据库的相应驱动程序。

+1

它也是Linux的标准发行版的一部分。 – 2010-05-26 09:08:18

+0

谢谢=) 那么在指定的目录中创建数据库呢? – Dmitry 2010-05-26 10:02:42

1

如果您使用的是JDBC 4附带的Java 6,则根本不需要驱动程序注册。JDBC 4会根据连接URL推断所需的驱动程序。当然,驱动程序应该放在你的类路径中的某个地方......否则,我会再次选择Jesper的答案。

+0

好的,但在这种情况下,我应该programmaticaly设置类路径? – Dmitry 2010-05-26 10:01:44

+0

通常在运行应用程序之前设置正确的类路径。 – 2010-05-26 11:28:42

+0

但是如果我的程序会被其他人使用呢? – Dmitry 2010-05-26 14:45:17

2

要在德比另一个目录创建一个数据库,指定要在JDBC连接URL的目录,例如:

Connection conn = DriverManager.getConnection("jdbc:derby:c:/otherDirectory/myDB"); 

Apache Derby documentation;本示例来自Derby开发人员指南的Connecting to databases部分。