[前][次][番号順一覧][スレッド一覧]

mysql:9640

From: "Kageyama Takahiro" <"Kageyama Takahiro" <kageyama329@xxxxxxxxxx>>
Date: Mon, 14 Jun 2004 20:23:36 +0900
Subject: [mysql 09640] Insert 毎に接続・切断を繰り返すと不特定な場所でエラーが発生する。


初めまして、かげやまと申します。


書き込みをする度に接続・切断という処理を繰り返し行うと、何回目かでエラーに
なる問題が発生しました。毎回違う回数でエラーになります。
どうしたら発生しないようでできますでしょうか?

以下に、環境・再現方法・エラーメッセージの順番で説明します。


・環境:WindowsXP HomeEdition
        MySQL(4.0.15)
        JDBC Driver(mysql-connector-java-3.0.7-stable-bin.jar)
        両方とも同一 PC で稼動しています。


・再現方法:以下の Test.java をコンパイルして、test.bat を実行します。
            ドライバー・クラスファイル・バッチファイルは全て同一ディレクトリ
に
            置いてください。


-------------------------------- test.bat 
-------------------------------------

java -classpath .;.\mysql-connector-java-3.0.7-stable-bin.jar Test

-------------------------------- Test.java 
------------------------------------

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

class Test {
  private static final String CREATE_QUERY = "CREATE TABLE IF NOT EXISTS 
test"+
                                             " ( ip VARCHAR(255) PRIMARY 
KEY)";
  private static final String INSERT_QUERY="INSERT INTO test (ip) VALUES 
(?);";
  private static final String FLUSH_QUERY = "FLUSH TABLES;";

  public static void main(String[] args) {
    try {
      loadMysqlDriver();
      createTable();
      loop();
    } catch (SQLException e) {
      e.printStackTrace();
    }
  }
  static void loadMysqlDriver() {
    try {
      Class.forName("com.mysql.jdbc.Driver");
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
  }
  static Connection getNewConnection() throws SQLException {
    Properties info = new Properties();
    info.setProperty("user", "");
    info.setProperty("password", "");
    info.setProperty("useUnicode", "true");
    info.setProperty("characterEncoding", "shift_jis");
    return DriverManager.getConnection("jdbc:mysql://localhost/test", 
info);
  }
  static void createTable() throws SQLException {
    Connection conn = null;
    PreparedStatement pstmt = null;
    try {
      conn = getNewConnection();
      pstmt = conn.prepareStatement(CREATE_QUERY);
      pstmt.executeUpdate();
    } finally {
      if (pstmt != null) {
        pstmt.close();
      }
      if (conn != null) {
        conn.close();
      }
    }
  }
  static void loop() throws SQLException {
    String COMMA = ".";
    for (int i = 0; i < 256; i++) {
      for (int j = 0; j < 256; j++) {
        for (int k = 0; k < 256; k++) {
          for (int l = 0; l < 256; l++) {
            StringBuffer buf = new StringBuffer();
            buf.append(i).append(COMMA).append(j).append(COMMA);
            buf.append(k).append(COMMA).append(l);
            String ip = buf.toString();
            System.out.println("ip = " + ip);
            insert(ip);
          }
          showStatus();
        }
      }
    }
  }
  static void insert(String ip) throws SQLException {
    Connection conn = null;
    PreparedStatement pstmt = null;
    try {
      conn = getNewConnection();
      pstmt = conn.prepareStatement(INSERT_QUERY);
      pstmt.setString(1, ip);
      pstmt.executeUpdate();
    } finally {
      if (pstmt != null) {
        pstmt.close();
      }
      if (conn != null) {
        conn.close();
      }
    }
  }
  static void showStatus() throws SQLException {
    String TYPE = "Threads_connected";
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet result = null;
    try {
      conn = getNewConnection();
      pstmt = conn.prepareStatement("show status;");
      result = pstmt.executeQuery();
      while (result.next()) {
        String key = result.getString(1);
        if (TYPE.equals(key)) {
          System.out.println("接続数 = " + result.getString(2));
          break;
        }
      }
    } finally {
      if (result != null) {
        result.close();
      }
      if (pstmt != null) {
        pstmt.close();
      }
      if (conn != null) {
        conn.close();
      }
    }
  }
}


・エラーメッセージ

ip = 0.0.0.0
ip = 0.0.0.1
ip = 0.0.0.2
     ・
     ・
     ・
     ・
ip = 0.0.15.103
ip = 0.0.15.104
java.sql.SQLException: Unable to connect to any hosts due to exception: 
java.net.BindException: Address already in use: connect
        at com.mysql.jdbc.Connection.createNewIO(Connection.java:1592)
        at com.mysql.jdbc.Connection.<init>(Connection.java:486)
        at 
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java
:326)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at Test.getNewConnection(Test.java:37)
        at Test.insert(Test.java:77)
        at Test.loop(Test.java:66)
        at Test.main(Test.java:19)


以上です。

_________________________________________________________________
メッセンジャーで総額1億円プレゼント! http://im.msn.co.jp/home.htm 


[前][次][番号順一覧][スレッド一覧]

->    9640 2004-06-14 20:23 ["Kageyama Takahiro" ] Insert 毎に接続・切断を繰り返すと不特定な場所でエラーが発生する。
      9641 2004-06-14 20:59 ┣[ML account <ml@xxxxx]                                       
      9642 2004-06-14 21:31 ┣["Haruki Nakayama" <h]                                       
      9645 2004-06-15 10:24 ┃┗[Murayama Toshikiyo <]                                     
      9643 2004-06-14 23:42 ┣[<oouchi@xxxxxxxxxx> ]                                       
      9644 2004-06-15 00:01 ┃┗[<oouchi@xxxxxxxxxx> ]                                     
      9651 2004-06-15 18:21 ┗[<yasuyuki@xxxxxxxxxx]                                       
      9652 2004-06-15 19:00  ┣["HIROSE, Masaaki" <h]                                     
      9654 2004-06-15 19:29  ┃┗[ML account <ml@xxxxx]                                   
      9658 2004-06-16 01:47  ┃ ┗["HIROSE, Masaaki" <h]                                 
      9655 2004-06-15 19:42  ┗[seiji takegata <take]