こんにちは私は基本的なストームアプリケーションを設定して、ツイートのストリームを受け取り、MySQLデータベースに格納します。アプリケーションは最初の〜23時間かかります。それでは、次のエラーが発生します。ストーム23時間後にクラッシュする
SQL Exception
SQL State: 08003
これが数回終了すると、それが終了します。私は標準のJBDCコネクタを使ってJavaからデータベースに接続しています。
private String _db="";
private Connection conn = null;
private PreparedStatement pst = null;
public ArchiveBolt(String db){
_db = db;
}
private void setupConnection() {
//Connect to the database
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:8889/twitter_recording", "root", "root");
} catch (Exception e){
e.printStackTrace();
}
}
public void execute(Tuple tuple, BasicOutputCollector collector) {
Status s = (Status) tuple.getValue(0);
//setup the connection on the first run through or if the connection got closed down
try {
setupConnection();
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.toString());
}
try {
pst = conn.prepareStatement("INSERT INTO " + _db + " (tweet)" +
"VALUES (?);");
pst.setString(1, s.toString());
//execute the SQL
pst.executeUpdate();
} catch (SQLException ex) {
// handle any errors
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
if(ex.getSQLState().equals("08003")){
setupConnection();
}
} finally {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
それはので、私はそれがそのエラーを投げた場合、それはセットを再試行することを決めた08003エラーでクラッシュしたことが明らかになった後、次のように保存し、DBの接続を設定するための関数のコードは、しかし、それはどちらも役に立たなかった。誰もがこの問題を解決するための正しい方向に私を指摘できますか?
[08003 \t接続が存在しません](http://dev.mysql.com/doc/refman/5。0/en/connector-odbc-reference-errorcodes.html) –
接続は常に同じ時刻に切断されますか?その場合は、スケジュールされたイベント(DBが毎日再起動されるなど)によって接続が切断されている可能性があります。 –
はい私はこれを知っています。そのため、このエラーが発生した場合に再度接続をセットアップしました。上記のように、catch(SQLException ex){ //エラーを処理します。 System.out.println( "SQLException:" + ex.getMessage()); System.out.println( "SQLState:" + ex.getSQLState());System.out.println( "VendorError:" + ex.getErrorCode()); if(ex.getSQLState()。equals( "08003")){ setupConnection(); } } ' –