Apache Derby数据库是一个小巧的、支持内嵌模式的数据库,他实现了SQL-99 和 SQL-2003 标准。最近由于项目的原因,开始使用Derby,以下是一些使用心得:
-
SQL语句不支持rownum关键字
虽然不直接支持rownum关键字,但是可以通过ROW_NUMBER函数实现。用法如下:
SELECT * FROM ( SELECT ROW_NUMBER() OVER () AS rownum, columns FROM tablename ) AS foo WHERE rownum
-
修改derby.log文件存储目录
derby.log记录了数据库启动、运行、结束的日志信息,这个日志文件默认并不会跟随着数据库存储,而是存放在了工程根目录下。通过设置derby.system.home属性,我们可以解决derby.log日志文件存储路径的问题。在Java应用启动的时候增加一下参数:
-Dderby.system.home=/home/leo/derby
系统启动之后,derby.log文件就会存放在/home/leo/derby目录下
-
关闭Derby数据库
Apache Derby在作为内嵌数据库运行的时候, 我们需要在系统退出之前停止Derby数据库。方法如下:
DriverManager.getConnection("jdbc:derby:;shutdown=true");
可以直接用以上语句停止数据库。执行停止命令时,数据库名称不是必须的。Apache Derby数据库在停止成功后,会抛出java.sql.SQLException,这是正常的。 更详细的描述请参考:Shutting down the system
-
同一个JVM实例中如何重启Derby
首先按照第三步关闭数据库,然后执行下面的代码,需要特别注意的是newInstance()方法。重新注册驱动,必须增加newInstance()方法。
Class.forName(org.apache.derby.jdbc.EmbeddedDriver).newInstance();
或者增加 deregister=false属性,然后关闭数据库。通过设置deregister=false属性后,可以避免重新注册驱动。
DriverManager.getConnection("jdbc:derby:;shutdown=true;deregister=false");