49

UNIX ソケットはプラットフォーム固有であるため、Java 以外のコードが含まれている必要があることを認識しています。具体的には、JDBC を使用して、UNIX ドメイン ソケットのみが有効になっている MySQL インスタンスに接続することに関心があります。

これはサポートされていないようですが、私が読んだ限りでは、Java 用の UNIX ソケットの適切な実装が 見つかれば、少なくとも UNIX ソケットに基づく JDBC 用の SocketFactory を作成できるはずです。

誰もこれを試しましたか?誰もそのような実装を知っていますか?

4

8 に答える 8

30

JUDSライブラリをチェックアウトしてください。これはJavaUnixドメインソケットライブラリです...

https://github.com/mcfunley/juds

于 2008-10-04T16:46:07.860 に答える
26

junixsocket を使用できます: https://github.com/kohlschutter/junixsocket

Unix ソケット経由で Java (Connector/J) から MySQL に接続するためのコードが既に提供されています。

他の実装と比較した大きな利点の 1 つは、junixsocket が標準の Java ソケット API を使用することです。

于 2009-09-09T06:07:36.490 に答える
3

JNAライブラリをチェックしてください。これは、純粋なJavaとJNIのネイティブコードの中間にあります。

https://github.com/twall/jna/

于 2008-10-04T16:29:39.623 に答える
1

JNR プロジェクト(プロジェクト panamaの緩い基盤) には、UNIX ソケットの実装があります。

于 2015-01-03T16:50:47.900 に答える
-2

インターネットで検索すると、次の便利なライブラリが見つかりました。

http://www.nfrise.net/software/gnu_net_local/overview.html

ウェイバックリンク

ソケットファクトリを書くのは簡単です。完了したら、それをドライバーに渡すことができますTHUSLY .( Wayback Link )。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import com.mysql.management.driverlaunched.ServerLauncherSocketFactory;

public class ConnectorMXJTestExample {
    public static void main(String[] args) throws Exception {
        String hostColonPort = "localhost:3336";

        String driver = com.mysql.jdbc.Driver.class.getName();
        String url = "jdbc:mysql://" + hostColonPort + "/" + "?"
                + "socketFactory="
                + ServerLauncherSocketFactory.class.getName();
        String userName = "root";
        String password = "";

        Class.forName(driver);
        Connection conn = null;
        try {
            conn = DriverManager.getConnection(url, userName, password);
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT VERSION()");
            rs.next();
            String version = rs.getString(1);
            rs.close();
            stmt.close();

            System.out.println("------------------------");
            System.out.println(version);
            System.out.println("------------------------");
        } finally {
            try {
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            ServerLauncherSocketFactory.shutdown(hostColonPort);
        }
    }
}
于 2009-05-13T02:52:28.483 に答える