java.io.EOFException og java.sql.SQLException
HejJeg har et underligt problem som jeg ikke lige kan gennemskue. På mit domæne har jeg MySQL server tilsluttet og jeg forbinder så til den MySQL via min irc-bot (kodet i java) men problemet er nu at nogle gange virker det hele fint og andre gange får jeg en java.io.EOFException og java.sql.SQLException når jeg kalder forskellige metoder.
Fejlen når jeg kalder !listbans:
java.sql.SQLException: Communication link failure: java.io.EOFException, underlying cause: null
** BEGIN NESTED EXCEPTION **
java.io.EOFException
STACKTRACE:
java.io.EOFException
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1394)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:1538)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1929)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1167)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1278)
at com.mysql.jdbc.MysqlIO.sqlQuery(MysqlIO.java:1224)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2248)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2196)
at com.mysql.jdbc.Statement.executeQuery(Statement.java:1163)
at DatabaseModel.DB.executeQuery(DB.java:134)
at DatabaseModel.BannedUserAdministrator.getAllObjects(BannedUserAdministrator.java:121)
at Model.BotSystem.getAlleBannedUsers(BotSystem.java:61)
at Model.MyBot.onPrivateMessage(MyBot.java:560)
at org.jibble.pircbot.PircBot.handleLine(PircBot.java:931)
at org.jibble.pircbot.InputThread.run(InputThread.java:95)
** END NESTED EXCEPTION **
*******************************************************
Jeg kalder denne metode via irc:
if (message.indexOf("!listbans") > -1) {
if (userIsOp(sender)) {
sendMessage(sender, "Start of !listbans");
// Løb alle users igennem
bannedUserVector = GlobalModel.getBotSystem().getAlleBannedUsers();
for(int i = 0; i < bannedUserVector.size(); i++) {
BannedUser bannedUser = (BannedUser) bannedUserVector.get(i);
sendMessage(sender, bannedUser.toString());
}
sendMessage(sender, "End of !listbans");
return;
}
}
Jeg får så fejlen ved:
bannedUserVector = GlobalModel.getBotSystem().getAlleBannedUsers();
getAlleBannedUsers ser sådan ud:
public Vector getAlleBannedUsers() {
return getBannedUserAdministrator().getAllObjects();
}
getAllObjects ser sådan ud:
public Vector getAllObjects() {
try {
String sql = "SELECT * FROM "+table;
ResultSet resultSet = db.executeQuery(sql);
Vector tempVector = new Vector();
while(resultSet.next()) {
BannedUser bannedUser = new BannedUser(resultSet.getInt("id"),
resultSet.getString("nick"),
resultSet.getString("hostname"),
resultSet.getInt("bantype"),
resultSet.getString("reason"),
resultSet.getString("bannedby"),
resultSet.getString("dato"),
resultSet.getString("tid"),
resultSet.getString("udloebsdato"),
resultSet.getString("udloebstid"));
tempVector.add(bannedUser);
}
return tempVector;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
db.executeQuery(sql) ser sådan ud:
protected ResultSet executeQuery(String sql) {
try {
s = getStatement();
rs = s.executeQuery(sql);
return (rs);
}
catch (SQLException e) {
e.printStackTrace();
System.err.println("fejl: <" + sql + "> kunne ikke udføres");
System.exit(2);
return (null);
}
}
getStatement() ser sådan ud:
public Statement getStatement() {
try {
s = getConnection().createStatement();
return (s);
}
catch (SQLException e) {
e.printStackTrace();
System.err.println("fejl: statement kunne ikke dannes kunne ikke udføres");
System.exit(3);
return (null);
}
}
getConnection ser sådan ud:
protected Connection getConnection() {
if (conn == null)
open();
return (conn);
}
open() ser sådan ud:
public void open() {
if (conn == null) {
try {
conn = DriverManager.getConnection("jdbc:mysql://db.lancelot.dk/" +
databasename,
"SECRET", "SECRET");
conn.setAutoCommit(true);
}
catch (SQLException e) {
System.err.println("fejl: i connection til <" + databasename);
System.exit(2);
}
}
}
Det der ikke giver mening er at min bot automatisk joiner de rigtige kanaler (som den får fra min MySQL database) og når jeg kalder "!listchannels" så giver den nogle gange den ovenstående fejl og andre gange skriver den dem rigtigt ud. Jeg håber at der er en der kan gennemskue det her... på forhånd, tak.
