I realize that since UNIX sockets are platform-specific, there has to be some non-Java code involved. Specifically, we\'re interested in using JDBC to connect to a MySQL in
The JNR project (which is a loose basis for project panama) has a unix socket implementation.
Some searching on the internet has uncovered the following useful-looking library:
http://www.nfrese.net/software/gnu_net_local/overview.html
Wayback Link
Writing a socket factory should be easy enough. Once you've done so, you can pass it to your driver 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);
}
}
}
Check out the JNA library. It's a halfway house between pure Java and JNI native code
https://github.com/twall/jna/
As the original kohlschutter/junixsocket , mentioned in another answer seems to be dead, you can check out its forks.
Especially fiken/junixsocket looks promising. Its author has added support for connection to PostgreSQL using unix socket via pgjdbc, for example.
The MariaDB JDBC driver now supports this and is compatible with the MySQL JDBC driver.
Use a JDBC url like:
jdbc:mariadb://localhost:3306/revmgt?localSocket=/var/run/mysqld/mysqld.sock
Worth noting that this library require including the JNA library as it uses JNA to access native unix domain sockets. It works pretty well in my testing. I saw speed improvements on CPU bound java processes from the offload to native code.
You could use junixsocket: https://github.com/kohlschutter/junixsocket
It already provides code for connecting to MySQL from Java (Connector/J) via Unix sockets.
One big advantage compared to other implementations is that junixsocket uses the standard Java Socket API.