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]