更新:友人が提案したのとまったく同じ方法でこの問題を解決しました。しかし、結果を得るためにmysqlのプロトコルに従わなければならないという事実を見逃していました。mysql では、最初のハンドシェーク パケットにデータ フィールドがないため、getInputStream でデータを取得できません。唯一の方法は、独自のサーバーで mysql 接続を作成し、結果をクライアントに送信することです。それは非常にうまく機能します。みんなありがとう
javaでmysqlの接続情報を読みたい。たとえば、ポート 4444 で Java を使用してサーバー ソケットを作成しました。次に、ポート 4444 で jdbc 接続を作成しました。しかし、うまくいきません。理由はわかりませんし、それが可能かどうかもわかりません。これはサーバーコードです:
int portNr = 4444;
// Create a ServerSocket object to watch that port for clients
ServerSocket ss;
try {
ss = new ServerSocket(portNr);
System.out.println("starting...");
// Here we loop indefinitely, just waiting for clients to connect
while (true) {
// accept() does not return until a client requests a connection
// Now that a client has arrived, create an instance of our
// special
// thread subclass to respond to it.
Socket clientSocket = null;
try {
clientSocket = ss.accept();
System.err.println("heheh"+clientSocket);
// PrintWriter out = new
// PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
String inputLine = in.readLine();
System.err.println(inputLine)....;</i>
「へへへ」と表示されます。ただし、入力行は出力されません。
そして、これは私の接続コードです:
public class messagetest
{
// The JDBC Connector Class.
private static final String dbClassName = "com.mysql.jdbc.Driver";
private static final String CONNECTION =
"jdbc:mysql://127.0.0.1:4444/shadi";
public static void main(String[] args) throws
Exception,SQLException
{
System.out.println(dbClassName);
Class.forName(dbClassName);
// Properties for user and password. Here the user and password are both 'paulr'
Properties p = new Properties();
p.put("user","--------");
p.put("password","-------");
System.err.println("after p");
Connection c = DriverManager.getConnection(CONNECTION,p);
System.err.println("client:");
「client:」は表示されません。ご協力ありがとうございます。