我寫了一個應用程序,它工作正常3年,但!今天 當他們嘗試運行該應用程序,一個意外的異常引發:不幸的Java異常:java.lang.NoSuchMethodError
代碼INFO | jvm 1 | 2013/04/17 10:02:40 | Exception in thread "Thread-1" java.lang.NoSuchMethodError: java.sql.Connection.isValid(I)Z
INFO | jvm 1 | 2013/04/17 10:02:40 | at lib.MySQLConnectionPatch.SearchInCache(MySQLConnectionPatch.java:103)
INFO | jvm 1 | 2013/04/17 10:02:40 | at lib.MySQLConnectionPatch.getConnection(MySQLConnectionPatch.java:79)
INFO | jvm 1 | 2013/04/17 10:02:40 | at lib.SQLManager.establishSqlConnection(SQLManager.java:62)
INFO | jvm 1 | 2013/04/17 10:02:40 | at lib.SQLManager.establishSqlConnection(SQLManager.java:30)
INFO | jvm 1 | 2013/04/17 10:02:40 | at lib.tasks.classes.sql.executeQuery.execute(executeQuery.java:49)
INFO | jvm 1 | 2013/04/17 10:02:40 | at Components.TTask.run(TTask.java:86)
INFO | jvm 1 | 2013/04/17 10:02:40 | at Components.ThreadTask.run(ThreadTask.java:29)
INFO | jvm 1 | 2013/04/17 10:02:40 | at lib.tasks.classes.fori.execute(fori.java:66)
INFO | jvm 1 | 2013/04/17 10:02:40 | at Components.TTask.run(TTask.java:86)
INFO | jvm 1 | 2013/04/17 10:02:40 | at Components.ThreadTask.run(ThreadTask.java:29)
INFO | jvm 1 | 2013/04/17 10:02:40 | at lib.tasks.classes.fori.execute(fori.java:66)
INFO | jvm 1 | 2013/04/17 10:02:40 | at Components.TTask.run(TTask.java:86)
INFO | jvm 1 | 2013/04/17 10:02:40 | at Components.ThreadTask.run(ThreadTask.java:29)
INFO | jvm 1 | 2013/04/17 10:02:40 | at Components.ThreadTask.run(ThreadTask.java:44)
INFO | jvm 1 | 2013/04/17 10:02:40 | at LauncherService.LaunchService.run(LaunchService.java:38)
MySQLConnectionPatch.java/SearchInCache是
private Connection SearchInCache(String key) {
Connection result = null;
try{
if (!connections.isEmpty())
result = connections.get(key);
} catch (Exception ex){
}
if (result != null){
boolean isValid = false; /** THIS IS LINE 103 WHERE EXCEPTION RAISED **/
try {
Statement s = result.createStatement();
if (s.execute("SHOW STATUS;")){
isValid = true;
}
s.close();
} catch (Exception ex) {
isValid = false;
}
if (!isValid){
connections.remove(key);
messageLog.stdwar("MySQL_PATCH: ONE CONNECTION EXPIRED :: force close");
try {
result.close();
} catch (SQLException ex) {
messageLog.stderr("MySQL_PATCH: CLOSING CONNECTION ERROR: "+ex.getMessage());
}
result = null;
}
}
return result;
}
我不知道爲什麼boolean isValid = false;
引發異常java.lang.NoSuchMethodError: java.sql.Connection.isValid(I)Z
。
注意的唯一不同的是JRE(前者爲1.6,而新的1.7)
應用程序工作正常3年,現在崩潰了?你必須更改代碼/系統/依賴庫 – Apurv
你是否更改MySQL jdbc庫? –
你確定你的應用程序使用1.7而不是1.5嗎?這種方法從1.6開始才存在。 –