关于关闭Java DB(Derby)时抛出异常的问题 博客分类: BlogJava2 DerbyJavaApacheJDBCJVM
在前面两篇 http://blog.matrix.org.cn/comments/icess/Weblog/use_derby_with_clob_and 文章中,我简单介绍了如何使用Java DB操作数据,今天发现一个关于关闭数据库的问题, 就是在调用前面例子中的关闭数据库代码时候总是抛出异常 ,后来到文档里面看看 ,原来在关闭数据库时候, Derby总是抛出异常,我还以为是我那个地方写错了呢?
以前例子中没有显示异常信息 是应为 在关闭数据库的方法中没有使用 打印异常信息的语句, 如下
public void disconnect() {
if(isConnected) {
String dbUrl = getDatabaseUrl();
dbProperties.put("shutdown", "true");
try {
DriverManager.getConnection(dbUrl, dbProperties);
} catch (SQLException ex) {
//ex.printStackTrace(); // 前面的例子没有该句, 如果加上该句,就会看的异常信息
}
isConnected = false;
}
}
所以,当大家看到下面的异常时候,不用担心 不是你的代码写错了,而是程序正确关闭数据库的提示(有点违背异常的设计初衷哦).
ERROR 08006: Database 'TestClob' shutdown.
at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
at org.apache.derby.impl.jdbc.TransactionResourceImpl.shutdownDatabaseException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source)
...........
21:10 补充:
使用Java DB的最佳实践
Recommended practices
- All databases exist within a system.
- System-wide properties affect the entire system, and persistent system-wide properties live in the system directory.
- You can boot all the databases in the system, and the boot-up times of all databases affect the performance of the system.
- You can preboot databases only if they are within the system. (Databases do not necessarily have to live inside the system directory, but keeping your databases there is the recommended practice.)
- Once you connect to a database, it is part of the current system and thus inherits all system-wide properties.
- Only one instance of Derby can run in a JVM at a single time, and only one instance of Derby should boot a database at one time. Keeping databases in the system directory makes it less likely that you would use more than one instance of Derby.
- The error log is located inside the system directory.