@Override
  public void loadCraftCooldowns(final Player player) {
    Connection con = null;
    FastMap<Integer, Long> craftCoolDowns = new FastMap<Integer, Long>();
    try {
      con = DatabaseFactory.getConnection();
      PreparedStatement stmt = con.prepareStatement(SELECT_QUERY);

      stmt.setInt(1, player.getObjectId());
      ResultSet rset = stmt.executeQuery();

      while (rset.next()) {
        int delayId = rset.getInt("delay_id");
        long reuseTime = rset.getLong("reuse_time");
        int delay = (int) ((reuseTime - System.currentTimeMillis()) / 1000);

        if (delay > 0) {
          craftCoolDowns.put(delayId, reuseTime);
        }
      }
      player.getCraftCooldownList().setCraftCoolDowns(craftCoolDowns);
      rset.close();
      stmt.close();
    } catch (SQLException e) {
      log.error("LoadcraftCoolDowns", e);
    } finally {
      DatabaseFactory.close(con);
    }
  }
  @Override
  public void storeCraftCooldowns(final Player player) {
    deleteCraftCoolDowns(player);
    Map<Integer, Long> craftCoolDowns = player.getCraftCooldownList().getCraftCoolDowns();

    if (craftCoolDowns == null) {
      return;
    }

    for (Map.Entry<Integer, Long> entry : craftCoolDowns.entrySet()) {
      final int delayId = entry.getKey();
      final long reuseTime = entry.getValue();

      if (reuseTime < System.currentTimeMillis()) {
        continue;
      }

      Connection con = null;

      try {
        con = DatabaseFactory.getConnection();
        PreparedStatement stmt = con.prepareStatement(INSERT_QUERY);

        stmt.setInt(1, player.getObjectId());
        stmt.setInt(2, delayId);
        stmt.setLong(3, reuseTime);
        stmt.execute();
      } catch (SQLException e) {
        log.error("storecraftCoolDowns", e);
      } finally {
        DatabaseFactory.close(con);
      }
    }
  }
 @Override
 public List<ToyPet> getPlayerPets(int playerId) {
   List<ToyPet> pets = new ArrayList<ToyPet>();
   Connection con = null;
   try {
     con = DatabaseFactory.getConnection();
     PreparedStatement stmt =
         con.prepareStatement("SELECT * FROM player_pets WHERE player_id = ?");
     stmt.setInt(1, playerId);
     ResultSet rs = stmt.executeQuery();
     while (rs.next()) {
       ToyPet pet = new ToyPet();
       pet.setName(rs.getString("name"));
       pet.setDecoration(rs.getInt("decoration"));
       pet.setPetId(rs.getInt("pet_id"));
       pet.setDatabaseIndex(rs.getInt("idx"));
       pets.add(pet);
     }
     stmt.close();
   } catch (Exception e) {
     log.error("Error getting pets for " + playerId, e);
   } finally {
     DatabaseFactory.close(con);
   }
   return pets;
 }
 @Override
 public ToyPet getPlayerPet(int playerId, int petId) {
   ToyPet pet;
   Connection con = null;
   try {
     con = DatabaseFactory.getConnection();
     PreparedStatement stmt =
         con.prepareStatement("SELECT * FROM player_pets WHERE player_id = ? AND pet_id = ?");
     stmt.setInt(1, playerId);
     stmt.setInt(2, petId);
     ResultSet rs = stmt.executeQuery();
     if (rs.first()) {
       pet = new ToyPet();
       pet.setName(rs.getString("name"));
       pet.setDecoration(rs.getInt("decoration"));
       pet.setPetId(rs.getInt("pet_id"));
       pet.setDatabaseIndex(rs.getInt("idx"));
     } else {
       pet = null;
     }
     stmt.close();
   } catch (Exception e) {
     log.error("Error getting pets for " + playerId, e);
     pet = null;
   } finally {
     DatabaseFactory.close(con);
   }
   return pet;
 }
  private void deleteCraftCoolDowns(final Player player) {
    Connection con = null;

    try {
      con = DatabaseFactory.getConnection();
      PreparedStatement stmt = con.prepareStatement(DELETE_QUERY);

      stmt.setInt(1, player.getObjectId());
      stmt.execute();
    } catch (SQLException e) {
      log.error("deletecraftCoolDowns", e);
    } finally {
      DatabaseFactory.close(con);
    }
  }
 @Override
 public void removePlayerPet(Player player, int petId) {
   Connection con = null;
   try {
     con = DatabaseFactory.getConnection();
     PreparedStatement stmt =
         con.prepareStatement("DELETE FROM player_pets WHERE player_id = ? AND pet_id = ?");
     stmt.setInt(1, player.getObjectId());
     stmt.setInt(2, petId);
     stmt.execute();
     stmt.close();
   } catch (Exception e) {
     log.error("Error removing pet #" + petId, e);
   } finally {
     DatabaseFactory.close(con);
   }
 }
 /* (non-Javadoc)
  * @see com.aionengine.gameserver.dao.PlayerTitleListDAO#removeTitle(int, int)
  */
 @Override
 public boolean removeTitle(int playerId, int titleId) {
   Connection con = null;
   try {
     con = DatabaseFactory.getConnection();
     PreparedStatement stmt = con.prepareStatement(DELETE_QUERY);
     stmt.setInt(1, playerId);
     stmt.setInt(2, titleId);
     stmt.execute();
     stmt.close();
   } catch (Exception e) {
     log.error("Could not delete title for player " + playerId + " from DB: " + e.getMessage(), e);
     return false;
   } finally {
     DatabaseFactory.close(con);
   }
   return true;
 }
 @Override
 public void deletePlayerGameStat(final int playerId) {
   Connection con = null;
   try {
     con = DatabaseFactory.getConnection();
     PreparedStatement stmt = con.prepareStatement(DELETE_QUERY);
     stmt.setInt(1, playerId);
     stmt.execute();
     stmt.close();
   } catch (Exception e) {
     log.error(
         "Could not delete PlayerGameStat data for player "
             + playerId
             + " from DB: "
             + e.getMessage(),
         e);
   } finally {
     DatabaseFactory.close(con);
   }
 }
 @Override
 public void insertPlayerPet(Player player, int petId, int decoration, String name) {
   Connection con = null;
   try {
     con = DatabaseFactory.getConnection();
     PreparedStatement stmt =
         con.prepareStatement(
             "INSERT INTO player_pets(player_id, pet_id, decoration, name) VALUES(?, ?, ?, ?)");
     stmt.setInt(1, player.getObjectId());
     stmt.setInt(2, petId);
     stmt.setInt(3, decoration);
     stmt.setString(4, name);
     stmt.execute();
     stmt.close();
   } catch (Exception e) {
     log.error("Error inserting new pet #" + petId + "[" + name + "]", e);
   } finally {
     DatabaseFactory.close(con);
   }
 }
 @Override
 public void insertPlayerGameStat(final Player player) {
   Connection con = null;
   try {
     con = DatabaseFactory.getConnection();
     PreparedStatement stmt = con.prepareStatement(INSERT_QUERY);
     stmt.setInt(1, player.getObjectId());
     stmt.setInt(2, player.getGameStats().getPDef().getCurrent());
     stmt.setInt(3, player.getGameStats().getBlock().getCurrent());
     stmt.setInt(4, player.getGameStats().getParry().getCurrent());
     stmt.setInt(5, player.getGameStats().getMCritical().getCurrent());
     stmt.setInt(6, player.getGameStats().getWill().getCurrent());
     stmt.setInt(7, player.getGameStats().getAccuracy().getCurrent());
     stmt.setInt(8, player.getGameStats().getPower().getCurrent());
     stmt.setInt(9, player.getGameStats().getMainHandMAccuracy().getCurrent());
     stmt.setInt(10, player.getGameStats().getAttackSpeed().getCurrent());
     stmt.setInt(11, player.getGameStats().getMResist().getCurrent());
     stmt.setInt(12, player.getGameStats().getMainHandMAttack().getCurrent());
     stmt.setInt(13, player.getGameStats().getMainHandPCritical().getCurrent());
     stmt.setInt(14, player.getGameStats().getAttackRange().getCurrent());
     stmt.setInt(15, player.getGameStats().getMDef().getCurrent());
     stmt.setInt(16, player.getGameStats().getAgility().getCurrent());
     stmt.setInt(17, player.getGameStats().getKnowledge().getCurrent());
     stmt.setInt(18, player.getGameStats().getWill().getCurrent());
     stmt.setInt(19, player.getGameStats().getMBoost().getCurrent());
     stmt.setInt(20, player.getGameStats().getMBResist().getCurrent());
     stmt.setInt(21, player.getGameStats().getPCR().getCurrent());
     stmt.setInt(22, player.getGameStats().getMCR().getCurrent());
     stmt.execute();
     stmt.close();
   } catch (Exception e) {
     log.error(
         "Could not store PlayerGameStat data for player "
             + player.getObjectId()
             + " from DB: "
             + e.getMessage(),
         e);
   } finally {
     DatabaseFactory.close(con);
   }
 }
 @Override
 public boolean storeTitles(Player player, Title entry) {
   Connection con = null;
   try {
     con = DatabaseFactory.getConnection();
     PreparedStatement stmt = con.prepareStatement(INSERT_QUERY);
     stmt.setInt(1, player.getObjectId());
     stmt.setInt(2, entry.getId());
     stmt.setInt(3, entry.getExpireTime());
     stmt.execute();
     stmt.close();
   } catch (Exception e) {
     log.error(
         "Could not store emotionId for player "
             + player.getObjectId()
             + " from DB: "
             + e.getMessage(),
         e);
     return false;
   } finally {
     DatabaseFactory.close(con);
   }
   return true;
 }