3

我是 Ubuntu 的新手,我刚刚将它安装在计算机上。我安装了 Samba 并共享文件夹“/samba”和“/hd”。我下载并安装了 Firebird 并复制了我在 Windows 上创建的数据库并将其放在“/samba”中。这是我的 Java 代码:

public static Connection getConnection() throws SQLException {
        Connection connection = null;
        try {
            Class.forName("org.firebirdsql.jdbc.FBDriver");
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
        connection = DriverManager.getConnection("jdbc:firebirdsql://localhost:3050/samba/LNX.FDB", "sysdba",
                "masterkey");
        return connection;
    }

    public static void main(String[] args) throws SQLException {
        getConnection();
    }

我收到此错误:

Exception in thread "main" org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544344. I/O error during "open" operation for file "samba/LNX.FDB"
Error while trying to open file
null
    at org.firebirdsql.jdbc.FBDataSource.getConnection(FBDataSource.java:120)
    at org.firebirdsql.jdbc.AbstractDriver.connect(AbstractDriver.java:136)
    at java.sql.DriverManager.getConnection(DriverManager.java:571)
    at java.sql.DriverManager.getConnection(DriverManager.java:215)
    at br.com.ipsnet.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:16)
    at br.com.ipsnet.jdbc.ConnectionFactory.main(ConnectionFactory.java:22)
Caused by: org.firebirdsql.gds.GDSException: I/O error during "open" operation for file "samba/LNX.FDB"
Error while trying to open file
null
    at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.readStatusVector(AbstractJavaGDSImpl.java:2098)
    at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.receiveResponse(AbstractJavaGDSImpl.java:2048)
    at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.internalAttachDatabase(AbstractJavaGDSImpl.java:463)
    at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.iscAttachDatabase(AbstractJavaGDSImpl.java:411)
    at org.firebirdsql.jca.FBManagedConnection.<init>(FBManagedConnection.java:105)
    at org.firebirdsql.jca.FBManagedConnectionFactory.createManagedConnection(FBManagedConnectionFactory.java:509)
    at org.firebirdsql.jca.FBStandAloneConnectionManager.allocateConnection(FBStandAloneConnectionManager.java:65)
    at org.firebirdsql.jdbc.FBDataSource.getConnection(FBDataSource.java:118)
    ... 5 more

如果我转到“/samba”并输入:

isql-fb
connect "localhost:/samba/LNX.FDB" user 'SYSDBA' password 'masterkey';

它工作得很好,我可以选择、删除、更新、插入……完全没有问题。

如果我在我的 Windows 机器上使用 IBExpert 连接到我在 Ubuntu 中的数据库,它会显示:

Unable to complete network request to host "Server-Test".
Failed to estabilish connection.

如果我使用 Flamerobin,它会说:

An assertion failed!

../src/common/strconv.cpp(3031): assert "Assert failure" failed in wxCSConv(): invalid encoding value in wxCSConv ctor

但它连接。我可以选择、删除、更新、...

4

2 回答 2

2

问题是您在连接字符串中指定的路径jdbc:firebirdsql://localhost:3050/samba/LNX.FDBsamba/LNX.FDB,而不是/samba/LNX.FDB。相对路径取决于平台、用户和 Firebird 配置。

正如Jaybird 发行说明中所述,您需要使用jdbc:firebirdsql://localhost:3050//samba/LNX.FDB

在 Linux 上,根目录/应该包含在路径中。位于的数据库/opt/firebird/db.fdb应使用下面的 URL(注意端口后的双斜杠!)。

jdbc:firebirdsql://host:port//opt/firebird/db.fdb

或者,您可以定义一个别名并使用它。

至于您对 IB Expert 和 Flamerobin 的问题,它们似乎无关,应该是单独的问题。IB Expert 问题似乎是您指定的主机名 ( Server-Test) 无法解析为 (IPv4) IP 地址,或者服务器不接受连接请求。一个原因可能是 Firebird 服务没有监听该 IP 地址;默认情况下,在 Ubuntu 上,Firebird 仅在 localhost 上侦听。Flamerobin 错误听起来像是 Flamerobin 中的错误(或者您正在指定不受支持的连接字符集(?))。

关于您使用 samba 和使用网络共享:不要将 Firebird 数据库放在网络共享上。访问网络共享上的 Firebird 数据库(尤其是从多个服务器)可能会损坏数据库。如果您想从多个主机访问 Firebird 数据库,那么您需要使用 Firebird 服务器并通过它进行连接。

于 2016-04-11T15:54:36.817 回答
0

关于 IBExpert :此屏幕截图是如何查看注册表以连接 ubuntu 的示例:

在此处输入图像描述

于 2016-04-12T07:29:36.287 回答