/**
* This file is part of aion-emu <aion-emu.com>.
*
* aion-emu 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 3 of the License, or
* (at your option) any later version.
*
* aion-emu 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 aion-emu. If not, see <http://www.gnu.org/licenses/>.
*/
package mysql5;
import com.aionemu.commons.database.DB;
import com.aionemu.commons.database.IUStH;
import com.aionemu.loginserver.dao.AccountDAO;
import com.aionemu.loginserver.model.Account;
import org.apache.log4j.Logger;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* MySQL5 Account DAO implementation
*
* @author SoulKeeper
*/
public class MySQL5AccountDAO extends AccountDAO
{
/**
* Logger
*/
private static final Logger log = Logger.getLogger(MySQL5AccountDAO.class);
/**
* {@inheritDoc}
*/
@Override
public Account getAccount(String name)
{
Account account = null;
PreparedStatement st = DB.prepareStatement("SELECT * FROM account_data WHERE `name` = ?");
try
{
st.setString(1, name);
ResultSet rs = st.executeQuery();
if(rs.next())
{
account = new Account();
account.setId(rs.getInt("id"));
account.setName(name);
account.setPasswordHash(rs.getString("password"));
account.setAccessLevel(rs.getByte("access_level"));
account.setMembership(rs.getByte("membership"));
account.setActivated(rs.getByte("activated"));
account.setLastServer(rs.getByte("last_server"));
account.setLastIp(rs.getString("last_ip"));
account.setIpForce(rs.getString("ip_force"));
}
}
catch (Exception e)
{
log.error("Can't select account with name: " + name, e);
}
finally
{
DB.close(st);
}
return account;
}
/**
* {@inheritDoc}
*/
@Override
public int getAccountId(String name)
{
int id = -1;
PreparedStatement st = DB.prepareStatement("SELECT `id` FROM account_data WHERE `name` = ?");
try
{
st.setString(1, name);
ResultSet rs = st.executeQuery();
rs.next();
id = rs.getInt("id");
}
catch (SQLException e)
{
log.error("Can't select id after account insertion", e);
}
finally
{
DB.close(st);
}
return id;
}
/**
* {@inheritDoc}
*/
@Override
public int getAccountCount()
{
PreparedStatement st = DB.prepareStatement("SELECT count(*) AS c FROM account_data");
ResultSet rs = DB.executeQuerry(st);
try
{
rs.next();
return rs.getInt("c");
}
catch (SQLException e)
{
log.error("Can't get account count", e);
}
finally
{
DB.close(st);
}
return -1;
}
/**
* {@inheritDoc}
*/
@Override
public boolean insertAccount(Account account)
{
int result = 0;
PreparedStatement st =
DB.prepareStatement("INSERT INTO account_data(`name`, `password`, access_level, membership, activated, last_server, last_ip, ip_force) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
try
{
st.setString(1, account.getName());
st.setString(2, account.getPasswordHash());
st.setByte(3, account.getAccessLevel());
st.setByte(4, account.getMembership());
st.setByte(5, account.getActivated());
st.setByte(6, account.getLastServer());
st.setString(7, account.getLastIp());
st.setString(8, account.getIpForce());
result = st.executeUpdate();
}
catch (SQLException e)
{
log.error("Can't inser account", e);
}
finally
{
DB.close(st);
}
if(result > 0)
{
account.setId(getAccountId(account.getName()));
}
return result > 0;
}
/**
* {@inheritDoc}
*/
@Override
public boolean updateAccount(Account account)
{
int result = 0;
PreparedStatement st =
DB.prepareStatement("UPDATE account_data SET `name` = ?, `password` = ?, access_level = ?, membership = ?, last_server = ?, last_ip = ?, ip_force = ? WHERE `id` = ?");
try
{
st.setString(1, account.getName());
st.setString(2, account.getPasswordHash());
st.setByte(3, account.getAccessLevel());
st.setByte(4, account.getMembership());
st.setByte(5, account.getLastServer());
st.setString(6, account.getLastIp());
st.setString(7, account.getIpForce());
st.setInt(8, account.getId());
st.executeUpdate();
}
catch (SQLException e)
{
log.error("Can't update account");
}
finally
{
DB.close(st);
}
return result > 0;
}
/**
* {@inheritDoc}
*/
@Override
public boolean updateLastServer(final int accountId, final byte lastServer)
{
return DB.insertUpdate("UPDATE account_data SET last_server = ? WHERE id = ?", new IUStH()
{
@Override
public void handleInsertUpdate(PreparedStatement preparedStatement) throws SQLException
{
preparedStatement.setByte(1, lastServer);
preparedStatement.setInt(2, accountId);
preparedStatement.execute();
}
});
}
/**
* {@inheritDoc}
*/
@Override
public boolean updateLastIp(final int accountId, final String ip)
{
return DB.insertUpdate("UPDATE account_data SET last_ip = ? WHERE id = ?", new IUStH()
{
@Override
public void handleInsertUpdate(PreparedStatement preparedStatement) throws SQLException
{
preparedStatement.setString(1, ip);
preparedStatement.setInt(2, accountId);
preparedStatement.execute();
}
});
}
/**
* {@inheritDoc}
*/
@Override
public boolean supports(String database, int majorVersion, int minorVersion)
{
return MySQL5DAOUtils.supports(database, majorVersion, minorVersion);
}
}