Also vorweg einmal ... der Code ist in modifizierter Art und Weise auch schon als Timertask funktionsfähig, jedoch mache ich das ganze in einem Thread da ich den in unterschiedlichen Intervallen aufrufen muss (mit sleep Befehl und dann mit this.run(); )
Der Fehler tritt nach einigen Stunden auf....
Die Fehlermeldung:
Exception in thread "Thread-4" java.lang.StackOverflowError
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:426)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at DB.news_info(DB.java:1824)
at BroadcastServer2$news_info_bot.run(BroadcastServer2.java:279)
at BroadcastServer2$news_info_bot.run(BroadcastServer2.java:420)
at BroadcastServer2$news_info_bot.run(BroadcastServer2.java:420)
at BroadcastServer2$news_info_bot.run(BroadcastServer2.java:420)
at DB.news_info(DB.java:1824)..... betrifft->>
conn = DriverManager.getConnection( this.url, this.strDbUser, this.strDbPw );
[HIGHLIGHT="Java"]public Vector news_info() throws SQLException
{
Connection conn = null;
Statement stmt = null;
ResultSet rSet = null;
int retryCount = this.reConnect;
boolean transactionCompleted = false;
boolean okay = false;
Vector tmp = new Vector();
do{
try
{
conn = DriverManager.getConnection( this.url, this.strDbUser, this.strDbPw );
stmt = conn.createStatement();
String sqlQuery = "SELECT id,objekt,antwort FROM `news` WHERE zeige = 1";
rSet = stmt.executeQuery( sqlQuery );
while ( rSet.next() )
{
okay = true;
tmp.add(rSet.getString(1));
tmp.add(rSet.getString(2));
tmp.add(rSet.getString(3));
}
if(okay){
stmt.executeUpdate("UPDATE `news` SET `gezeigt` = '0' WHERE `news`.`id` ="+ tmp.elementAt(0).toString()+ " LIMIT 1 ;");
}
rSet.close();
rSet = null;
stmt.close();
stmt = null;
conn.close();
conn = null;
transactionCompleted = true;
} catch(Exception e) {
System.out.println("Fehler bei den news");
tmp.add("1");
tmp.add("-- kein objekt --");
tmp.add("keine news");
return tmp;
}finally {
if (rSet != null) {
try {
rSet.close();
} catch (SQLException sqlEx) {
sql_log("67",true,sqlEx);
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException sqlEx) {
sql_log("68",true,sqlEx);
}
}
if (conn != null) {
try {
try {
conn.rollback();
} finally {
conn.close();
}
} catch (SQLException sqlEx) {
throw sqlEx;
}
}
}
} while (!transactionCompleted && (retryCount > 0));
if(!okay){
tmp.add("1");
tmp.add("-- kein objekt --");
tmp.add("keine news");
}
return tmp;
}[/HIGHLIGHT]
Der Fehler tritt nach einigen Stunden auf....
Die Fehlermeldung:
Exception in thread "Thread-4" java.lang.StackOverflowError
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:426)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at DB.news_info(DB.java:1824)
at BroadcastServer2$news_info_bot.run(BroadcastServer2.java:279)
at BroadcastServer2$news_info_bot.run(BroadcastServer2.java:420)
at BroadcastServer2$news_info_bot.run(BroadcastServer2.java:420)
at BroadcastServer2$news_info_bot.run(BroadcastServer2.java:420)
at DB.news_info(DB.java:1824)..... betrifft->>
conn = DriverManager.getConnection( this.url, this.strDbUser, this.strDbPw );
[HIGHLIGHT="Java"]public Vector news_info() throws SQLException
{
Connection conn = null;
Statement stmt = null;
ResultSet rSet = null;
int retryCount = this.reConnect;
boolean transactionCompleted = false;
boolean okay = false;
Vector tmp = new Vector();
do{
try
{
conn = DriverManager.getConnection( this.url, this.strDbUser, this.strDbPw );
stmt = conn.createStatement();
String sqlQuery = "SELECT id,objekt,antwort FROM `news` WHERE zeige = 1";
rSet = stmt.executeQuery( sqlQuery );
while ( rSet.next() )
{
okay = true;
tmp.add(rSet.getString(1));
tmp.add(rSet.getString(2));
tmp.add(rSet.getString(3));
}
if(okay){
stmt.executeUpdate("UPDATE `news` SET `gezeigt` = '0' WHERE `news`.`id` ="+ tmp.elementAt(0).toString()+ " LIMIT 1 ;");
}
rSet.close();
rSet = null;
stmt.close();
stmt = null;
conn.close();
conn = null;
transactionCompleted = true;
} catch(Exception e) {
System.out.println("Fehler bei den news");
tmp.add("1");
tmp.add("-- kein objekt --");
tmp.add("keine news");
return tmp;
}finally {
if (rSet != null) {
try {
rSet.close();
} catch (SQLException sqlEx) {
sql_log("67",true,sqlEx);
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException sqlEx) {
sql_log("68",true,sqlEx);
}
}
if (conn != null) {
try {
try {
conn.rollback();
} finally {
conn.close();
}
} catch (SQLException sqlEx) {
throw sqlEx;
}
}
}
} while (!transactionCompleted && (retryCount > 0));
if(!okay){
tmp.add("1");
tmp.add("-- kein objekt --");
tmp.add("keine news");
}
return tmp;
}[/HIGHLIGHT]