Jump to content
Sign in to follow this  
LG

c++ - Usando sql

Recommended Posts

LG    1
LG

SQL

 

 

Hoje vamos aprender como utilizar sql em servidores de tibia.

 

Vamos começar aprendendo a selecionar um valor.

 


query << "SELECT `id`, `name`, `password`, `premdays`, `lastday`, `key`, `warnings` FROM `accounts` WHERE `id` = " << accId << " LIMIT 1";
DBResult* result;
if(!(result = db->storeQuery(query.str())))
return acc;

acc.number = result->getDataInt("id");
acc.name = result->getDataString("name");
acc.password = result->getDataString("password");
acc.premiumDays = result->getDataInt("premdays");
acc.lastDay = result->getDataInt("lastday");
acc.recoveryKey = result->getDataString("key");
acc.warnings = result->getDataInt("warnings");

Não é muito complicado de entender que a palavra SELECT ira selecionar algum valor, neste caso vai selecionar

 

id, name, password, premdays, lastday, key, warnings

porem é preciso dizer em que tabela o programa ira pegar estes valores por isso usamos o FROM que neste caso ira abrir a tabela accounts.

 

FROM `accounts`
O programa irá abrir a tabela mas para ele saber onde esta estes valores dentro da tabela ele vai usar WHERE.

 

WHERE `id` = " << accId << "
Esta linha faz com que o programa procure na tabela o id que tem o valor de accId.

Pronto agora o programa fez a consulta porem para usarmos este valor será necessário atribuir o valor da consulta a uma variável:

 


acc.password = result->getDataString("password");

A variável 'acc.password' tem o valor do resultado da consulta de 'password'.

Agora para usar este valor no seu programa é só utilizar da variável 'acc.password'.

Vou mostrar uma consulta:

 


Database* db = Database::getInstance();
DBQuery query;

query << "SELECT `premdays` FROM `accounts` WHERE `id` = " << accId << " LIMIT 1";
DBResult* result;
if(!(result = db->storeQuery(query.str())))

acc.premmy = result->getDataInt("premdays");

if (acc.premmy > 0)
{
return true;
else
return false;
}

================================

Agora vamos aprender a fazer update de valores:

 

query << "UPDATE `accounts` SET `password` = " << db->escapeString(newPassword) << " WHERE `id` = " << accountId << db->getUpdateLimiter();

Não é muito dificil de entender, UPDATE `accounts` irá da update na tabela accounts.

Neste caso será mudado o valor de password

SET `password` =
Porem como no caso de select o programa tem que saber onde está na tabela a coluna pasword, para isso usamos o WHERE que neste caso é o id do jogador.

 

WHERE `id` = " << accountId << db->getUpdateLimiter();
pronto o valor de password será trocado, irei mostrar um exemplo.

 



if (acc == true)
{
return false
}
else
{
"UPDATE `accounts` SET `name` = " << db->escapeString(newname) << " WHERE `id` = " << accountId << db->getUpdateLimiter();
}

================================

Vamos ver como deletar algum valor.

 

query << "DELETE FROM `player_depotitems` WHERE `player_id` = " << player->getGUID();

Para deletar um valor é nesseçario dizer aonde está o valor que será deletado.

 

DELETE FROM `player_depotitems`
esta linha de codigo quer dizer que será deletado um valor que esta dentro da tabela player_depotitems.

Para dizer onde está o valor que irá ser deletado usamos o WHERE.

 

WHERE `player_id` = " << player->getGUID();
Com este codigo será deletado um item no depot do player.

olha o exemplo.

 


query << "DELETE FROM `guild_invites` WHERE `guild_id` = " << guildId;

================================

 

Por fim irei mostrar como inserir um valor em uma coluna.


query << "INSERT INTO `server_motd` (`id`, `world_id`, `text`) VALUES (" << ++lastMotdNum << ", " << g_config.getNumber(ConfigManager::WORLD_ID) << ", " << db->escapeString(lastMotdText) << ")";

Este para inserir um valor você tem que primeiro dizer em que coluca ele está neste caso está dentro de server_motd.

 

 

INSERT INTO `server_motd`

Temos que mostrar onde queremos inserir o valor dentro da tabela,

 

(`id`, `world_id`, `text`)
E para dar o valor que será inserido usamos VALUES.

VALUES (" << ++lastMotdNum << ", " << g_config.getNumber(ConfigManager::WORLD_ID) << ", " << db->escapeString(lastMotdText) << ")";

Vou mostrar um exemplo simples:

 


query << "INSERT INTO `accounts` (`id`) VALUES (NULL, " << db->escapeString(name) <<";

Edited by LG

Share this post


Link to post
Share on other sites
Eventide    7
Eventide

tópico aprovado e movido.

 

dica: revize as virgulas e as tags [.code]

Share this post


Link to post
Share on other sites
Mock    32
Mock

otimo tutorial, nao esta impecavel mais nao esta ruim.

so queria saber qual a lib que usa :S

#incluide <...?.h>

eu sei que é de otserv eu queria saber qual a lib que usam.

Share this post


Link to post
Share on other sites
Pynh    0
Pynh

Nossa tutorial muito bom, esclareceu muitas duvidas que eu tinha... como a parte de pegar o valor da coluna e colocar na variavel.

acc.number = result->getDataInt("id");
em minha opnião deveria ser fixado.

Share this post


Link to post
Share on other sites
LG    1
LG
otimo tutorial, nao esta impecavel mais nao esta ruim.

so queria saber qual a lib que usa :S

 

eu sei que é de otserv eu queria saber qual a lib que usam.

é realmente não está otimo vou rever alguns pontos.

 

A lib depende da database como otserv normalmente usa mysql ou sqlite vou falar dos 2.

Mysql

#include <mysql/mysql.h>

ou

#include <mysql.h>

 

sqlite

#include <sqlite3.h>

Share this post


Link to post
Share on other sites
gabrielfilipinho    0
gabrielfilipinho

oOOO

Que Tuto mara vei

parabens

O Tutorial ta de mais

Share this post


Link to post
Share on other sites
LG    1
LG
oOOO

Que Tuto mara vei

parabens

O Tutorial ta de mais

Obrigado, qualquer duvida só falar...

Share this post


Link to post
Share on other sites
Dark Maker    0
Dark Maker

è bom cara mais nao entendi como é o update de valores (Sei que é uma duvida besta)

Share this post


Link to post
Share on other sites
LG    1
LG
è bom cara mais nao entendi como é o update de valores (Sei que é uma duvida besta)

Vou te dar um exemplo:

O serrvidor vai dar save e vai salvar o skill do jogador

query << "UPDATE `[url="http://localhost/phpmyadmin/sql.php?db=fulltera&token=91d12363158a032923ff1ed5f7a66d01&table=player_skills&pos=0"]player_skills[/url]` SET `value` = "skill" WHERE `id` = "playerid";

update é usado para atualizar um valor.

Share this post


Link to post
Share on other sites
Dark Maker    0
Dark Maker

Ah tá, vlw '-'

Share this post


Link to post
Share on other sites
Eventide    7
Eventide

na verdade a instancia do banco de dados é independente do tipo usado, portanto de o include em database.h, mas se der em qualquer outro vai dar na mesma, pois mysql.h e etc tem heranças com database.h

Share this post


Link to post
Share on other sites
LG    1
LG
na verdade a instancia do banco de dados é independente do tipo usado, portanto de o include em database.h, mas se der em qualquer outro vai dar na mesma, pois mysql.h e etc tem heranças com database.h

Realmente se você incluir database.h vai dar no mesmo, porem entendi a pergunta, como usar o mysql ou sqlite sem incluir database.h.

Share this post


Link to post
Share on other sites
patrickdelfim    0
patrickdelfim

Adorei Lg Manja Muito Dessas Coisas ^^

Share this post


Link to post
Share on other sites
Sorcerer of luz    0
Sorcerer of luz

O.o, acho que não consigo usar sql.

Share this post


Link to post
Share on other sites
Lord' Raynex    0
Lord' Raynex

Maneiro cara, Tutorial ta e, obrigado por compartilha-lo conosco e que você continue fazendo város Tutoriais como este...

Abraços

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×