【问题标题】:Derby: Another instance of Derby may have already booted the databaseDerby:另一个 Derby 实例可能已经启动了数据库
【发布时间】:2014-05-27 18:18:26
【问题描述】:

我想在网络服务器模式下使用 Derby,并按照他们网站上的说明进行操作。

首发德比:

/opt/glassfish/4.0/javadb/bin/NetworkServerControl start -noSecurityManager

Sun Apr 13 23:47:57 CEST 2014 : Apache Derby Network Server - 10.9.1.0 - (1344872) started and ready to accept connections on port 1527

正在连接ij:

$ /opt/glassfish/4.0/javadb/bin/ij
ij version 10.9
ij> connect 'jdbc:derby:testDB';
ij> create table testt ( x varchar(200), y varchar(200), z varchar(13));
0 rows inserted/updated/deleted
ij> select * from testt;

X   

|Y        



|Z         
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


0 rows selected
ij> commit;
ij> 

用 Java 连接到 Derby:

static{

        try {
            Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
        } catch (Throwable e) {
            e.printStackTrace();
        }
    }

public void readData(){
   final Connection connection = DriverManager.getConnection("jdbc:derby://localhost:1527/testDB");
   ....
}

DriverManager.getConnection() 失败:

java.sql.SQLException: DERBY SQL error: SQLCODE: -1, SQLSTATE: XJ040, 
SQLERRMC: Failed to start database 'testDB' with class loader sun.misc.Launcher$AppClassLoader@23137792, see the next exception for details.::
SQLSTATE: XSDB6Another instance of Derby may have already booted the database

我不是刚刚在网络服务器模式下启动了 derby 吗?为什么我会收到此错误?

【问题讨论】:

    标签: java derby


    【解决方案1】:

    删除以下文件

    ../metastore_db/dbex.lck 和 ../metastore_db/db.lck

    谢谢

    【讨论】:

      【解决方案2】:

      你的 ij 连接做了:

        connect 'jdbc:derby:testDB';
      

      这意味着它没有连接到网络服务器,而是直接使用嵌入式驱动程序打开了数据库。

      如果你已经指定:

        connect 'jdbc:derby://localhost:1527/testDB';
      

      那么两个应用程序(IJ 和您的程序)将通过客户端驱动程序连接,并且第二个连接不会被拒绝。

      【讨论】:

        【解决方案3】:

        虽然问题已经得到解答,但以防其他人在 glassfish/payara 容器上遇到此错误...

        我在服务器重新启动时遇到此错误,在部署应用程序时也是如此,问题是即使在服务器关闭并重新启动后相关的 java 进程也没有被杀死......从终端杀死进程然后启动应用程序解决了错误

        【讨论】:

        • 应该正确关闭数据库。尝试注册 ServletContextListener 并在其“contextDestroyed()”方法调用中:DriverManager.getConnection("jdbc:derby:mydatabase;shutdown=true");。这将引发您可以忽略的信息异常。
        猜你喜欢
        • 2017-12-06
        • 2016-03-31
        • 2019-12-25
        • 2015-09-26
        • 1970-01-01
        • 2013-12-13
        • 2014-07-18
        • 2012-09-21
        • 1970-01-01
        相关资源
        最近更新 更多