Portal SAMP
[Include] Easy SQLite - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Lançamentos (https://portalsamp.com/forumdisplay.php?fid=26)
+---- Fórum: Includes (https://portalsamp.com/forumdisplay.php?fid=27)
+---- Tópico: [Include] Easy SQLite (/showthread.php?tid=3729)



Easy SQLite - Dr Editor - 28/06/2023

Easy SQLite
Sobre:

Como o próprio nome sugere, é uma include que facilita a manipulação de informações do banco de dados SQLite.
Inicialmente queria unificar SQLite e MySQL, porém fiquei com preguiça e deixei apenas com SQLite.
Esta include não é uma novidade, porém para novatos que estão começando é uma boa alternativa para fugir de salvamento em texto.


Qual a diferença desta para as demais?

Outras includes, em sua grande maioria, executam cada instrução imediatamente fazendo diversas operações enquanto esta armazena em cache e executa tudo de uma única vez.
As nomenclaturas desta include também são um fator facilitador para quem está começando, pois aos olhos de quem conhece pouco a linguagem acha que esta é apenas uma extensão da include nativa de SQLite.


Menos é mais!

Se comparada com outras includes, contém menos recursos, porém você terá o necessário para qualquer servidor:
  • Criar tabelas
  • Adicionar linhas
  • Atualizar linhas
  • Remover linhas
  • Cláusula WHERE

Exemplos:

Exemplo com DOF2:
Código:
#include <a_samp>
#include <DOF2>

main()
{
    if(DOF2_FileExists("usuario.txt"))
    {
        new idade = DOF2::GetInt("usuario.txt", "idade");
        
        DOF2::SetInt("usuario.txt", "idade", ++idade);
        DOF2_SaveFile();
        
        if(idade > 30)
        {
            DOF2::RemoveFile("usuario.txt");
        }
    }
    else
    {
        DOF2::CreateFile("usuario.txt");
        DOF2::SetString("usuario.txt", "nome", "Eduardo AC");
        DOF2::SetInt("usuario.txt", "idade", 26);
        DOF2::SetString("usuario.txt", "sexo", "Masculino");
        DOF2_SaveFile();
    }
}


Exemplo com Easy SQLite:
Código:
#include <a_samp>
#define MAX_DB_HANDLE 200
#include <e_db>

static DB:__dbHandle;

main()
{
    __dbHandle = db_open("teste.db");
    
    new handle = db_query_handle(__dbHandle);
    db_create_table(handle, "usuarios");
    db_add_column(handle, "id", "INTEGER PRIMARY KEY AUTOINCREMENT");
    db_add_column(handle, "nome", "TEXT");
    db_add_column(handle, "idade", "INTEGER");
    db_add_column(handle, "sexo", "TEXT");
    db_execute_create_table(handle);
    
    handle = db_query_handle(__dbHandle);
    db_set_table(handle, "usuarios");
    db_add_select(handle, "idade");
    db_set_where_clause_ex(handle, "nome='%s'", "Eduardo AC");
    new DBResult:result = db_execute_select(handle, true);
    
    if(db_num_rows(result) > 0)
    {
        new idade = db_get_field_assoc_int(result, "idade");
        
        handle = db_query_handle(__dbHandle);
        db_set_table(handle, "usuarios");
        db_update_int(handle, "idade", ++idade);
        db_set_where_clause_ex(handle, "nome = '%s'", "Eduardo AC");
        db_execute_update(handle);
        
        if(idade > 30)
        {
            handle = db_query_handle(__dbHandle);
            db_set_table(handle, "usuarios");
            db_set_where_clause(handle, "idade > 30");
            db_execute_delete(handle);
        }
    }
    else
    {
        handle = db_query_handle(__dbHandle);
        db_set_table(handle, "usuarios");
        db_insert_string(handle, "nome", "Eduardo AC");
        db_insert_int(handle, "idade", 26);
        db_insert_string(handle, "sexo", "Masculino");
        db_execute_insert(handle);
    }
    db_free_result(result);
}

public OnDbExecuteQuery(DB:handle, sql[], bool:error, elapsed)
{
    printf("Debug [%b - %ims]: %s", error, elapsed, sql);
    return 1;
}


Informações adicionais:
  • Não há ordem para o uso das funções, desde que a função de execução seja chamada por último vide exemplo acima
  • Caso a execução não retorne nenhuma informação é porque faltou alguma função para finalizar a instrução

Prós:
  • Funções básicas
  • Nomenclaturas facilitadas
  • Uso prático
  • Ótimo para iniciantes
  • Eficiente
  • Facilmente identifique erros de instrução
  • Debug individual de consultas
Contras:
  • Maior tamanho do arquivo .amx
  • Quanto maior for o número de instâncias, mais demorada será a compilação
  • Caso se utilize um número de instâncias baixo, pode ocorrer risco de congelamento caso force a criação da instância

Download:

Pastebin


RE: Easy SQLite - xbruno1000x - 28/06/2023

Mais uma boa contribuição sua e com boas instruções de implementação! +rep