0

次のコードを使用して mysqlDatasource 接続を作成しました。

MysqlDataSource d = new MysqlDataSource();
d.setUser("user");
d.setPassword("pass");
d.setServerName("hostname.com");
d.setDatabaseName("db");
Connection c = d.getConnection();

アプリケーションを実行していて、mysql の再起動またはその他の理由で接続が切断された場合、mysql サーバー インスタンスが実行されていても、残りの操作は失敗します。

その場合、接続を再作成しますか? これは可能ですか?どうすればこれを行うことができますか?

4

4 に答える 4

0

ほとんどの場合、複数の接続を作成してジャグリングする場合は、接続プールを使用することをお勧めします。この場合、Connectionオブジェクトはまさにオブジェクトであり、基礎となる実装によって処理される実際のソケット接続に多重化されます。これは、必要なときに接続が自動的に作成されることを意味し、リソースの再利用や適切な数の接続の作成について心配する必要はありません。

2 つの顕著な例はBoneCPC3P0です。

于 2013-02-28T04:00:27.207 に答える
0

毛沢東氏の方法に加えて、setURL を使用してURL を明示的に定義し、 autoReconnect パラメータを使用して自動再接続を許可する方法もありますが、この方法はお勧めできません。ここでの回答は、完全を期すためにのみ提供されています。

于 2013-02-28T04:10:24.750 に答える
0

DBCP CONNECTIONを利用して、以下のコードのように接続プールを作成してください。validation query一定の間隔でデータベースに ping を送信し、プールを更新するものがあることがわかります。validateConnectionこのプロパティを に設定できるような他のプロパティがありますtrue

BasicDataSource dataSource = new BasicDataSource();

dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUsername("username");
dataSource.setPassword("password");
dataSource.setUrl("jdbc:mysql://<host>:<port>/<database>");
dataSource.setMaxActive(50);
dataSource.setMaxIdle(5);
dataSource.setInitialSize(5);
dataSource.setValidationQuery("SELECT 1");
于 2013-02-28T04:15:43.560 に答える
0

これを試して。

String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
Class.forName(driver);
String url = "jdbc:microsoft:sqlserver://host:1433/database";
Connection conn = DriverManager.getConnection(url, "username", "password");
于 2013-02-28T04:23:50.587 に答える