Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Проблема с выбором БД(L2JFrozen)
#1
Здравствуйте.
Использую исходный код L2JFrozen(1001).

Вопрос:
Как реализовать правильно использование 2 БД в сервере:

Есть "l2j" база данных в ней хранится все, что нужно для игры.
Есть "forum" база данных в ней хранится все что связанно с форумом.

Как я решил проблему:
1.Создал новый файл L2DatabaseFactory_c3p02 - в Database_URL - записываю имя моей базы данных.

2.L2DatabaseFactory - создал getInstance2() с return _instance2

3. Создал новую VoicedCommand
Код:
con = L2DatabaseFactory.getInstance2().getConnection(false);
             PreparedStatement statement = con.prepareStatement("SELECT post_text FROM phpbb_posts_text LIMIT 3");
             ResultSet rset = statement.executeQuery();

кастыль работаетSmile)))

Как реализовать нормально?
Ответ
#2
Не знаю что за код в L2DatabaseFactory. На каждую базу данный свой pool. Метод getInstance в таком случае будет принимать параметр - какую БД использовать

Пример на скорую руку (не для production)
for(;Forum.getPostCount() < Integer.MAX_VALUE; Forum.writeNewPost()); | TERA Video | GamezTERA Emu
Ответ
#3
Код:
/*
* L2jFrozen Project - www.l2jfrozen.com
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* http://www.gnu.org/copyleft/gpl.html
*/
package com.l2jfrozen.util.database;

import java.sql.Connection;
import java.sql.SQLException;

import org.apache.log4j.Logger;

import com.l2jfrozen.Config;

public abstract class L2DatabaseFactory
{
    private static final Logger LOGGER = Logger.getLogger(L2DatabaseFactory.class);
    
    protected enum ProviderType
    {
        MySql,
        MsSql
    }
    
    // =========================================================
    // Data Field
    protected static L2DatabaseFactory _instance;
        protected static L2DatabaseFactory _instance2;
    protected ProviderType _providerType;
    
    // =========================================================
    // Property - Public
    // SQLException is thrown in order to avoid aplicattion continue on sql error
    @SuppressWarnings("unused")
    public static L2DatabaseFactory getInstance() throws SQLException
    {
        if (_instance == null)
        {
            if (Config.DATABASE_POOL_TYPE.equals("BoneCP"))
            {
                _instance = new L2DatabaseFactory_BoneCP();
                            
            }
            else
            {
                _instance = new L2DatabaseFactory_c3p0();
            }
            
        }
        return _instance;
    }
        
        
        @SuppressWarnings("unused")
    public static L2DatabaseFactory getInstance2() throws SQLException
    {
        if (_instance2 == null)
        {
            if (Config.DATABASE_POOL_TYPE.equals("BoneCP"))
            {
                _instance = new L2DatabaseFactory_BoneCP();
                            
            }
            else
            {
                _instance2 = new L2DatabaseFactory_c3p02();
            }
            
        }
        return _instance2;
    }
        
        
        
        
    
    public final String prepQuerySelect(final String[] fields, final String tableName, final String whereClause, final boolean returnOnlyTopRecord)
    {
        String msSqlTop1 = "";
        String mySqlTop1 = "";
        if (returnOnlyTopRecord)
        {
            if (getProviderType() == ProviderType.MsSql)
                msSqlTop1 = " Top 1 ";
            if (getProviderType() == ProviderType.MySql)
                mySqlTop1 = " Limit 1 ";
        }
        final String query = "SELECT " + msSqlTop1 + safetyString(fields) + " FROM " + tableName + " WHERE " + whereClause + mySqlTop1;
        return query;
    }
    
    public final String safetyString(final String... whatToCheck)
    {
        // NOTE: Use brace as a safty precaution just incase name is a reserved word
        final char braceLeft;
        final char braceRight;
        
        if (getProviderType() == ProviderType.MsSql)
        {
            braceLeft = '[';
            braceRight = ']';
        }
        else
        {
            braceLeft = '`';
            braceRight = '`';
        }
        
        int length = 0;
        
        for (final String word : whatToCheck)
        {
            length += word.length() + 4;
        }
        
        final StringBuilder sbResult = new StringBuilder(length);
        
        for (final String word : whatToCheck)
        {
            if (sbResult.length() > 0)
            {
                sbResult.append(", ");
            }
            
            sbResult.append(braceLeft);
            sbResult.append(word);
            sbResult.append(braceRight);
        }
        
        return sbResult.toString();
    }
    
    public Connection getConnection() throws SQLException
    {
        return getConnection(true);
    }
    
    public final ProviderType getProviderType()
    {
        return _providerType;
    }
    
    public static void close(final Connection con)
    {
        if (con == null)
            return;
        
        try
        {
            con.close();
        }
        catch (final SQLException e)
        {
            LOGGER.error("Failed to close database connection!", e);
        }
    }
    
    public abstract void shutdown();
    
    public abstract Connection getConnection(boolean checkclose) throws SQLException;
    
    public abstract Connection getConnection(long max_connection_time) throws SQLException;
    
    public abstract int getBusyConnectionCount() throws SQLException;
    
}
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  GUI. Проблема с перемещением картинки coldy 6 3,236 12-29-2012, 10:27 AM
Последний пост: [STIGMATED]
  Начал Читать Книгу по Java возникла проблема Fant1K 12 3,725 03-17-2012, 05:55 AM
Последний пост: Fant1K

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)