Avatar billede Slettet bruger
24. januar 2005 - 16:17 Der er 1 kommentar og
1 løsning

java.io.EOFException og java.sql.SQLException

Hej

Jeg 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.
Avatar billede Slettet bruger
24. januar 2005 - 19:03 #1
Det virker fint hvis jeg bruger close() og open() efter hver eneste query/update.
Avatar billede arne_v Ekspert
24. januar 2005 - 21:24 #2
Kunne du ikke nøjes med at close result settet efter hver query ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester