Derby:Derby的另一个实例可能已经启动了数据库

时间:2014-04-13 22:13:19

标签: java derby

我想在网络服务器模式下使用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

Haven我刚开始使用网络服务器模式的德比?为什么我收到此错误?

3 个答案:

答案 0 :(得分:8)

删除以下文件

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

由于

答案 1 :(得分:6)

您的ij连接确实:

  connect 'jdbc:derby:testDB';

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

如果您已指定:

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

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

答案 2 :(得分:0)

尽管问题已经得到回答,以防万一有人在玻璃鱼/ payara容器上遇到此错误...

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