Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> расширения таблицы для БД, добавления запятой... как "или" 
:(
    Опции темы
InNEROS
Дата 15.11.2008, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 15.11.2008

Репутация: нет
Всего: нет



Добрый день всем...
возник вопрос... как можно реализовать... сам в Java не особо селен...
по этому прощу помощи smile



собственно нужно изменить данный код:

Код

public class ArmorSetsTable
{
    private final static Log _log = LogFactory.getLog(ArmorSetsTable.class.getName());
    private static ArmorSetsTable _instance;
    
    private FastMap<Integer,L2ArmorSet> _armorSets;
    
    public static ArmorSetsTable getInstance()
    {
        if(_instance == null)
            _instance = new ArmorSetsTable();
        return _instance;
    }
    private ArmorSetsTable()
    {
        _armorSets = new FastMap<Integer,L2ArmorSet>();
        loadData();
    }
    private void loadData()
    {
        Connection con=null;
         try
         {
             con = L2DatabaseFactory.getInstance().getConnection(con);
             PreparedStatement statement = con.prepareStatement("SELECT chest, legs, head, gloves, feet, skill_id, shield, shield_skill_id, enchant6skill FROM armorsets");
             ResultSet rset = statement.executeQuery();
            
             while(rset.next())
             {
                 int chest = rset.getInt(chest,chest);
                 int legs  = rset.getInt("legs");
                 int head  = rset.getInt("head");
                 int gloves = rset.getInt("gloves");
                 int feet  = rset.getInt("feet");
                 int skill_id = rset.getInt("skill_id");
                 int shield = rset.getInt("shield");
                 int shield_skill_id = rset.getInt("shield_skill_id");
                 int enchant6skill = rset.getInt("enchant6skill");
                 _armorSets.put(chest, new L2ArmorSet(chest, legs, head, gloves, feet,skill_id, shield, shield_skill_id, enchant6skill));
             }
            
             _log.info("ArmorSetsTable: Loaded "+_armorSets.size()+" armor sets.");
            
             rset.close();
             statement.close();
             con.close();
         }
            catch (Exception e) 
            {
                _log.warn("Error while loading buff templates "+e.getMessage());
            }
        finally
        {
            try
            {
                if (con != null)
                {
                    con.close();
                    con=null;
                }
            }
            catch (Exception e) {}
        }
    }
    public boolean setExists(int chestId)
    {
        return _armorSets.containsKey(chestId);
    }
    public L2ArmorSet getSet(int chestId)
    {
        return _armorSets.get(chestId);
    }
}


зада состоит... чтобы в столбики (chest, legs, head, gloves, feet, shield ) можно было заносить значения через запятую...
и они учитывались как "или"

сама таблица:
Код

DROP TABLE IF EXISTS `armorsets`;
CREATE TABLE `armorsets` (
  `id` int(3) NOT NULL auto_increment,
  `chest` varchar(15) NOT NULL default '',
  `legs` varchar(15) NOT NULL default '',
  `head` varchar(15) NOT NULL default '',
  `gloves` varchar(15) NOT NULL default '',
  `feet` varchar(15) NOT NULL default '',
  `skill_id` decimal(11,0) NOT NULL default '0',
  `shield` decimal(11,0) NOT NULL default '0',
  `shield_skill_id` decimal(11,0) NOT NULL default '0',
  `enchant6skill` decimal(11,0) NOT NULL default '0',
  PRIMARY KEY (`id`,`chest`)
) DEFAULT CHARSET=utf8;


пример:

Код

INSERT INTO armorsets VALUES(1,  23,   2386, 43,   0,    0,      3500,   0,    0,    0); 


... сейчас работает только если так...

а нужно чтобы:
Код

INSERT INTO `armorsets` VALUES ('1', '23,1101', '2386', '43', '0', '0', '3500', '0', '0', '0');

тоесть будет или 23 или 1101... без разницы... эффект будет давать ( но это уже про другое )

даже особо не знал как написать... написал как смог!
спасибо заранее за помощь!!!
PM MAIL   Вверх
v2v
Дата 15.11.2008, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



java код , который ты привёл не заносит в базу данных ничего, он наоборот извлекает из базы.



--------------------
PM   Вверх
InNEROS
Дата 15.11.2008, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 15.11.2008

Репутация: нет
Всего: нет



Цитата(v2v @ 15.11.2008,  22:41)
java код , который ты привёл не заносит в базу данных ничего, он наоборот извлекает из базы.

да не... понятно что не заносит)
но и данный Java код плюет... с высокой башни.. на то что написано через запятую в БД

а нужно чтобы он значения через запятую считал как "или"
тобишь.. или 23 или 1101

P.S. Java код и не должен вносить ничего в таблицу.. возможно выразился не правильно... сорри!
PM MAIL   Вверх
v2v
Дата 15.11.2008, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



Цитата(InNEROS @  15.11.2008,  22:44 Найти цитируемый пост)
возможно выразился не правильно... 

угу.

Ясное дело что код ругаться будет. Вопрос: что значит ИЛИ? ... что мы берём только одно значение в зависимости от каких то условий, или мы создаём массив и в него записываем оба значения??
Менять надо много:
1. строки 30 - 38 : все int надо заменить на String , getInt на getString.
2. Надо почти полностью переписать L2ArmorSet класс. Вместо int параметров в конструкторе он должен принимать либо String либо маcсив int. Показывай код  L2ArmorSet класса.

p.s. убейте архитекторов, которые придумали хранить значения в реляционной бд через запятую.

Это сообщение отредактировал(а) v2v - 16.11.2008, 01:10


--------------------
PM   Вверх
InNEROS
Дата 15.11.2008, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 15.11.2008

Репутация: нет
Всего: нет



Код

package net.sf.l2j.gameserver.model;

import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;

/**
 * 
 *
 * @author  Luno
 */
public final class L2ArmorSet
{
    private final int _chest;
    private final int _legs;
    private final int _head;
    private final int _gloves;
    private final int _feet;
    private final int _skillId;
    
    private final int _shield;
    private final int _shieldSkillId;
    
    private final int _enchant6Skill;
    
    public L2ArmorSet(int chest, int legs, int head, int gloves, int feet, int skillId, int shield, int shieldSkillId, int enchant6Skill)
    {
        _chest = chest;
        _legs  = legs;
        _head  = head;
        _gloves = gloves;
        _feet  = feet;
        _skillId = skillId;
        
        _shield = shield;
        _shieldSkillId = shieldSkillId;
        
        _enchant6Skill = enchant6Skill;
    }
    /**
     * Checks if player have equiped all items from set (not checking shield)
     * @param player whose inventory is being checked
     * @return True if player equips whole set
     */
    public boolean containAll(L2PcInstance player)
    {
        Inventory inv = player.getInventory();
        
        L2ItemInstance legsItem   = inv.getPaperdollItem(Inventory.PAPERDOLL_LEGS);
        L2ItemInstance headItem   = inv.getPaperdollItem(Inventory.PAPERDOLL_HEAD);
        L2ItemInstance glovesItem = inv.getPaperdollItem(Inventory.PAPERDOLL_GLOVES);
        L2ItemInstance feetItem   = inv.getPaperdollItem(Inventory.PAPERDOLL_FEET);
        
        int legs = 0;
        int head = 0;
        int gloves = 0;
        int feet = 0;
        
        if(legsItem != null)   legs = legsItem.getItemId();
        if(headItem != null)   head = headItem.getItemId();
        if(glovesItem != null) gloves = glovesItem.getItemId();
        if(feetItem != null)   feet = feetItem.getItemId();
        
        return containAll(_chest,legs,head,gloves,feet);
        
    }
    public boolean containAll(int chest, int legs, int head, int gloves, int feet)
    {
        if(_chest != 0 && _chest != chest)
            return false;
        if(_legs != 0 && _legs != legs)
            return false;
        if(_head != 0 && _head != head)
            return false;
        if(_gloves != 0 && _gloves != gloves)
            return false;
        if(_feet != 0 && _feet != feet)
            return false;
    
        return true;
    }
    public boolean containItem(int slot, int itemId)
    {
        switch(slot)
        {
        case Inventory.PAPERDOLL_CHEST:
            return _chest == itemId;
        case Inventory.PAPERDOLL_LEGS:
            return _legs == itemId;
        case Inventory.PAPERDOLL_HEAD:
            return _head == itemId;
        case Inventory.PAPERDOLL_GLOVES:
            return _gloves == itemId;
        case Inventory.PAPERDOLL_FEET:
            return _feet == itemId;
        default:
            return false;
        }
    }
    public int getSkillId()
    {
        return _skillId;
    }
    public boolean containShield(L2PcInstance player)
    {
        Inventory inv = player.getInventory();
        
        L2ItemInstance shieldItem   = inv.getPaperdollItem(Inventory.PAPERDOLL_LHAND);
        if(shieldItem!= null && shieldItem.getItemId() == _shield)
            return true;
    
        return false;
    }
    public boolean containShield(int shield_id)
    {
        return _shield == 0 ? false : (_shield == shield_id);
    }
    public int getShieldSkillId()
    {
        return _shieldSkillId;
    }
    public int getEnchant6skillId()
    {
        return _enchant6Skill;
    }
    /**
     * Checks if all parts of set are enchanted to +6 or more
     * @param player
     * @return 
     */
    public boolean isEnchanted6(L2PcInstance player)
    {
         // Player don't have full set
        if(!containAll(player))
            return false;
        
        Inventory inv = player.getInventory();
        
        L2ItemInstance chestItem  = inv.getPaperdollItem(Inventory.PAPERDOLL_CHEST);
        L2ItemInstance legsItem   = inv.getPaperdollItem(Inventory.PAPERDOLL_LEGS);
        L2ItemInstance headItem   = inv.getPaperdollItem(Inventory.PAPERDOLL_HEAD);
        L2ItemInstance glovesItem = inv.getPaperdollItem(Inventory.PAPERDOLL_GLOVES);
        L2ItemInstance feetItem   = inv.getPaperdollItem(Inventory.PAPERDOLL_FEET);
        
        if(chestItem.getEnchantLevel() < 6)
            return false;
        if(_legs != 0 && legsItem.getEnchantLevel() < 6)
            return false;
        if(_gloves != 0 && glovesItem.getEnchantLevel() < 6)
            return false;
        if(_head != 0 && headItem.getEnchantLevel() < 6)
            return false;
        if(_feet != 0 && feetItem.getEnchantLevel() < 6)
            return false;
        
        return true;
    }
}



Цитата


Ясное дело что код ругаться будет. Вопрос: что значит ИЛИ? ... что мы берём только одно значение в зависимости от каких то условий, или мы создаём массив и в него записываем оба значения??


попробую обьяснить!
в столбик вписываются два значения через запятую!
условия: использовать можно только одно из двух! этих значений! 23 или 1101
нужно чтобы они оба понимались Java кодом....

но и чтобы небыло так: что будет требоваться 23 и 1101
а только чтобы что-то одно из двух!!!

Это сообщение отредактировал(а) InNEROS - 15.11.2008, 23:24
PM MAIL   Вверх
InNEROS
Дата 16.11.2008, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 15.11.2008

Репутация: нет
Всего: нет



up... может кто подскажет?
PM MAIL   Вверх
garbuz
Дата 18.11.2008, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 677
Регистрация: 22.1.2008

Репутация: 3
Всего: 11



Извините за флуд, а это что, исходники LA 2?  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0462 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.