2

Firebird データベースに接続してデータを取得する Java アプリケーションを作成しています。プログラムが完成し、私のコンピューターで問題なく動作します。問題は、アプリケーションを実行する必要があるコンピューターで、データベースがローカル ネットワーク内の別のコンピューターにあり、それを実行するために jaybird の接続文字列にどのパスを入力すればよいかわからないことです。少し説明させてください:

アプリケーションをコンピューター X で実行する必要がありますが、実際のデータベースはコンピューターのドライブではなく、ローカル ネットワークのコンピューターにあります。このようなもの (これは例であり、実際に動作させるために必要なサイトではなく、自宅で再現されています):

ここに画像の説明を入力

したがって、データベースのパスは次のようになります。

ここに画像の説明を入力

データベースがドライブ (たとえば、 C:\Users\john\Desktop ) にある場合、Jaybird を使用したデータベースへの接続は次のようになります。

static final String FB_DB_URL = "jdbc:firebirdsql://localhost:3050/C:\\Users\\john\\Desktop\\TEST1.FDB";

FB_connection = DriverManager.getConnection( FB_DB_URL , FB_USER , FB_PASS);

実際、それが私のコンピューターで動作させる方法でした。しかし、この場合、パスがどうあるべきかわかりません。私は次のようなものを試しました:

    static final String FB_DB_URL =  "jdbc:firebirdsql://192.168.0.101:3050/\\\\DESKTOP-1UFA09I\\Documents\\TEST1.FDB"; 

「192.168.0.101」は、データベースがあるコンピューターの ipv4 アドレスです。しかし、これにより、アプリケーションがデータベースを見つけることができなかったという例外が発生しました。これが解決策を見つけるのに最も近いと思いますが、運がありませんでした。追加情報:

  • 両方のコンピューターはファイアウォールをオフにしており、互いに ping を送信できたので、実際には接続されています。

  • Firebird 2.5 と jaybird 2.2.1 を使用しています。

  • 私も運が悪いので、次のことを試しました:

    static final String FB_DB_URL =  "jdbc:firebirdsql://192.168.0.101:3050/C:\\users\\john2\\Documents\\TEST1.FDB"; 
    
  • フォルダーは共有されています (少なくとも、私はそう思います)。これは、Windows 経由でフォルダーにアクセスでき、データベース ファイルがすべてのユーザーに読み取り/書き込みアクセス許可を与えるためです。

  • Firebird が両方の PC で実行されていることは確かです。

この問題の助けをいただければ幸いです。私が言ったように、アプリケーションは私のコンピューターのデータベースでうまく動作するので、問題はパスにあると確信しています。また、DB が保存されているコンピューターの IP を必要としない解決策を教えていただければ、それは素晴らしいことですが、とにかくその情報を取得できると思います。

編集

文書化の目的で、問題の解決策は次のとおりです。

データベースへのパスを作成する正しい方法は次のとおりです。

"jdbc:firebirdsql://192.168.0.101:3050/C:\\folder1\\folder2\\TEST1.FDB";

例外が発生したのは、明らかに、jaybird がusersサーバー内のフォルダーにいくつかのアクセス許可の問題を抱えているためです。私の DB はdocumentsフォルダーにあるため、jaybird がアクセスしようとしたときに問題が発生していました。解決策は、DBを別のフォルダーに移動することですC://

4

2 に答える 2

4

リモート データベースに接続するには、次のことを知っておく必要があります。

  • Firebird サーバーのホスト名または IP アドレス
  • Firebird サーバーのポート番号 (デフォルトは 3050)
  • ユーザー名とパスワード
  • データベースのエイリアスまたはデータベースのフル パス

最初の 3 つの項目はカバーされているようですが、問題は 4 番目の項目にあります。データベースは C:\users\john2\Documents\TEST1.FDB にあると思います。その場合、JDBC URL は次のとおりです。

jdbc:firebirdsql://192.168.0.101:3050/C:\\users\\john2\\Documents\\TEST1.FDB

ただし、デフォルトで Firebird サーバー プロセスを実行しているユーザーは、セキュリティ上の理由からユーザー フォルダーにアクセスできません。

データベースをユーザー フォルダの外の場所に移動し、Firebird サーバー サービスを実行しているアカウントに読み取りおよび書き込みアクセス権があることを確認することをお勧めします (NETWORK SERVICE または LOCAL SYSTEM、どちらを忘れたか、現在アクセス権がありません)。 Windows マシン) .

その他の注意事項:

  • データベースへのリモート アクセスは Firebird サーバーを介して行う必要があるため、Firebird データベースの場所は共有しないでください。
  • Jaybird 2.2.11 に更新する必要があります。2.2.1 はほぼ 4 年前のもので、それ以来多くの修正が行われています。
  • 実際に Firebird 2.5(.0) を使用している場合は、2.5.6 にアップグレードするか、3.0 へのアップグレードを検討してください。
于 2016-09-01T06:44:32.603 に答える
1

クライアント/サーバー モードで Firebird サーバーに接続し、データベースのファイル名をそれに渡したいようです。"host:port" の部分はサーバーに接続するためのもので、次の "/" に続くのはデータベース ファイルの名前です。

使用する192.168.0.101:3050場合は、サーバーが IP を持つ他のマシンで実行されていることを確認する必要があります192.168.0.101。サーバーはすでに他のマシン上にあるため、次のように、そのマシン上のデータベース名のローカル名を指定する必要があります。

static final String FB_DB_URL =  "jdbc:firebirdsql://192.168.0.101:3050/C:\\users\\john2\\Documents\\TEST1.FDB"; 

IP を使用しない場合は、そのマシンにローカル ネットワークで DNS 解決できる名前を付ける必要がありますが、これは難しくありませんhosts。名前のエントリで十分です。ポート 3050 は実際にはデフォルトのポートであるため、省略できます。

これは機能しないため、サーバーがターゲットマシンで実行されていないと思います。データベースファイルだけがそこにあります。この場合、ローカル サーバーに接続する必要がありますが、ネットワークに到達可能なデータベース ファイル名を次のように知らせます。

static final String FB_DB_URL =  "jdbc:firebirdsql://localhost/\\\\DESKTOP-1UFA09I\\Documents\\TEST1.FDB"; 

ローカル Firebird サーバーがローカル ネットワーク経由でファイルを開くことができるようにする必要があり\\DESKTOP-1UFA09I\Documents\TEST1.FDBます。もちろん、ネットワーク共有DESKTOP-1UFA09Iが適切な場所と、ローカル Firebird サーバーが他のマシンで十分なアクセス権を持つアカウントを指している場合です。

于 2016-09-01T06:54:58.683 に答える