DBManager

A DBManager é uma biblioteca de gerenciamento de banco de dados de código aberto desenvolvido pela equipe Nintersoft. Ela foi desenvolvida como parte do projeto SmartClass, agora ele é um projeto independente também incorporado a outros projetos por nós desenvolvidos.

Menu

Detalhes da DBManager

Nome do arquivo: DBManager.dll, DBManager.so
Versão: 1.0.0.0
Preço: Grátis
Ano de lançamento: 2018
Sistema Operacional: Windows, MAC, Linux
Licença: Sob Licença de Código Aberto Nintersoft

Para que serve

A DBManager é uma biblioteca de interface de banco de dados criada a partir da biblioteca Qt. Esta classe serve para auxiliar estudantes e programadores inexperientes a gerenciar e manipular tabelas em bancos de dados SQLITE ou MySQL. Ou seja, você conseguirá realizar operações mais simples, tais como: criar tabelas, inserir valores, checar a existência de chaves, recuperar valores, entre outros; em banco de dados de forma fácil e descomplicada, sem sequer saber a linguagem de requisições SQL.

Dependências (Windows)

Para utilizar o DBManager você deve incluir mais algumas informações na hora de desenvolver. Mas não se preocupe, além do programa de exemplo, a seguir o daremos o passo a passo do que dever ser feito.

    Diretório do projeto

Crie uma pasta chamada dbmanager (se der outro nome, atualize a variável de diretório no passo da configuração do QMake), copie os arquivos de cabeçalho (*.h) e o arquivo de link de biblioteca (*.lib) para lá.

Coloque o arquivo dbmanager.dll no diretório de seu executável após a compilação (antes de executá-lo).

    QMake (arquivo .pro)

Você deve adicionar as seguintes linhas:

    Cabeçalho

Você deve adicionar as seguintes linhas:

Dependências (Linux/MAC)

Em sistemas que não são o Windows, você deverá baixar o código fonte em nosso repositório oficial e compilar o projeto.

Depois, basta seguir os passos contidos neste tutorial (em inglês) : https://wiki.qt.io/How_to_create_a_library_with_Qt_and_use_it_in_an_application.

Métodos, classes e enumeradores

    enum DBManager::DBConnectionType

       DBManager::DBConnectionType::SQLITE (0x00)

Indica que a instância de trabalho atual é SQLite.

       DBManager::DBConnectionType::MYSQL (0x01)

Indica que a instância de trabalho atual é MySQL.

    class DBManager::DBData

É uma classe de armazenamento de dados que serve de parâmetro para as configurações do gerenciador do banco de dados atual. Ela possui as seguintes propriedades:

Que devem ser acessadas/modificadas através dos seguintes métodos:

    DBManager(const DBManager::DBData &data = DBData(), const QString &tablePrefix = “”,
DBConnectionType connectionType = SQLITE, const QString &connectionName = QString(“default”));

Constrói e retorna um objeto com as propriedades definidas na classe DBManager::DBData, incluindo o nome da tabela, host, usuário, senha, etc.

Os outros parâmetros de inicialização servem para definir um prefixo comum às tabelas manipuladas pela aplicação, a informação do tipo de banco de dados ao qual a aplicação irá conectar-se (MySQL ou SQLite) e o nome da conexão, que é extremamente importante para o caso de haver o uso de múltiplas conexões simultâneas ao mesmo banco de dados.

Vale notar que a conexão não é aberta assim que o construtor é executado, ou seja, a chamada do método “openDB()” deve ser feita para que a conexão seja estabelecida.

    DBManager(const QStringList &data, DBConnectionType connectionType = SQLITE,
const QString &connectionName = QString(“default”));

Esta é um construtor sobrecarregado, que constrói os dados internos a partir dos dados fornecidos na QStringList.

Vale lembrar que para usar este método, os dados possuem ordem certa na lista passada ao construtor (e tamanho fixo de 7), os dados necessários são os seguintes:

MySQL

SQLite

Os outros parâmetros de inicialização servem para definir um prefixo comum às tabelas manipuladas pela aplicação, a informação do tipo de banco de dados ao qual a aplicação irá conectar-se (MySQL ou SQLite) e o nome da conexão, que é extremamente importante para o caso de haver o uso de múltiplas conexões simultâneas ao mesmo banco de dados.

    bool createTable(const QString &tableName, const QStringList &columns);

Este método cria novas tabelas no banco de dados, onde o primeiro parâmetro é o nome da tabela e o segundo é a lista de strings contendo o nome da coluna e o tipo de dado que será armazenado nela.

Retorna true caso consiga executar a requisição, ou falso, caso contrário.

    bool insertRow(const QString &tableName, const QStringList &columnName, const QList<QVariant> &data);

Este método insere dados na tabela já existente (recebida como primeiro parâmetro), onde o segundo parâmetro é o nome das colunas e o terceiro são os dados correspondentes às colunas.

Retorna true caso consiga executar a requisição, ou falso, caso contrário.

    bool updateRow(const QString &tableName, const QString &columnNameCond, const QVariant &condition, const QStringList &columnName, const QList<QVariant> &data, const QString &operation = “=”);

Este método atualiza os valores da tabela fornecida no primeiro parâmetro.
Os novos valores são fornecidos no quinto parâmetro e suas respectivas colunas no quarto parâmetro.
Por fim, o segundo e o terceiro parâmetro fornecem as condições das colunas cuja linha será atualizada. A operação de comparação a ser realizada na condição de coluna é fornecida no quinto parâmetro (a operação é de igualdade, por padrão).

Retorna true caso consiga executar a requisição, ou falso, caso contrário.

    bool updateRow(const QString &tableName, const QStringList &columnNameCond, const QList<QVariant> &condition, const QStringList &columnName, const QList<QVariant> &data, const QString &operation = “=”);

Esta função é uma sobrecarga, onde é possível fornecer mais de uma coluna e valores para comparação do condicional.

Retorna true caso consiga executar a requisição, ou falso, caso contrário.

    bool removeRow(const QString &tableName, const QString &columnNameCond, const QVariant &condition, const QString &operation = “=”);

Este método remove da tabela (indicada no primeiro parâmetro da chamada) todas as ocorrências de linhas que satisfazerem a condição imposta pela operação sobre as colunas e valores fornecidos.

Retorna true caso consiga executar a requisição, ou falso, caso contrário.

   bool removeRow(const QString &tableName, const QStringList &columnNameCond, const QList<QVariant> &condition, const QString &operation = “=”);

Este método é uma sobrecarga, onde é possível fornecer mais de uma coluna e valores para comparação do condicional.

Retorna true caso consiga executar a requisição, ou falso, caso contrário.

    bool rowExists(const QString &tableName, const QString &columnNameCond, const QVariant &data, const QString &operation = “=”);

Este método verifica se há alguma linha da tabela onde as colunas assumem os valores dos dados definidos de acordo com a operação requisitada. Ele retorna true caso exista, ou false caso não exista ou haja algum erro na sintaxe da coluna ou do dado fornecido.

    bool rowExists(const QString &tableName, const QStringList &columnNameCond, const QList<QVariant> &data, const QString &operation = “=”);

Este método é uma sobrecarga, onde é possível fornecer mais de uma coluna e valores para comparação do condicional.

Ele retorna true caso exista, ou false caso não exista ou haja algum erro na sintaxe da coluna ou do dado fornecido.

    QList<QVariant> retrieveRow(const QString &tableName, const QString &columnNameCond, const QVariant &condition, const QString &operation = “=”);

Este método é similar ao “rowExists”, porém ao invés de apenas informar se existe alguma linha ou não, este método retorna a primeira ocorrência por completo, isto é, os dados de todas as colunas correspondentes ao resultado dos termos de busca.

Retorna uma lista vazia caso não haja resultado de requisição ou se houver algum erro (de sintaxe ou tamanho) nos parâmetros.

    QList<QVariant> retrieveRow(const QString &tableName, const QStringList &columnNameCond, const QList<QVariant> &condition, const QString &operation = “=”);

Este método é uma sobrecarga, onde é possível fornecer mais de uma coluna e valores para comparação do condicional.

Retorna uma lista vazia caso não haja resultado de requisição ou se houver algum erro (de sintaxe ou tamanho) nos parâmetros.

    QList<QVariant> retrieveRow(const QString &tableName, const QStringList &columnNameCond, const QList<QVariant> &condition, QStringList columnName, const QString &operation = “=”);

Este método é uma sobrecarga, onde é possível fornecer mais de uma coluna e valores para comparação do condicional. Também é possível especificar quais colunas deverão constar na lista retornada.

Retorna uma lista vazia caso não haja resultado de requisição ou se houver algum erro (de sintaxe ou tamanho) nos parâmetros.

    QList< QList<QVariant> > retrieveAll(const QString &tableName);

Este método é similar ao “retrieveRow”, porém, ao invés de retornar apenas a primeira ocorrência, ele retorna todas elas (por isso é utilizado uma lista de lista de QVariant).

Retorna uma lista vazia caso não haja resultado de requisição ou se houver algum erro (de sintaxe ou tamanho) nos parâmetros.

    QList< QList<QVariant> > retrieveAll(const QString &tableName, const QStringList &columns);

Este método é uma sobrecarga, onde é possível especificar quais colunas deverão constar na lista retornada.

Retorna uma lista vazia caso não haja resultado de requisição ou se houver algum erro (de sintaxe ou tamanho) nos parâmetros.

    QList< QList<QVariant> > retrieveAllCond(const QString &tableName, const QString &columnCondition, const QVariant &condition, const QString &operation = “=”);

Este método é similar ao “retrieveAll”, porém, ele retorna todas as linhas da tabela onde as colunas assumem os valores dos dados definidos de acordo com a operação requisitada.

Retorna uma lista vazia caso não haja resultado de requisição ou se houver algum erro (de sintaxe ou tamanho) nos parâmetros.

    QList< QList<QVariant> > retrieveAllCond(const QString &tableName, const QStringList &columnCondition, const QList<QVariant> &condition, const QString &operation = “=”);

Este método é uma sobrecarga, onde é possível fornecer mais de uma coluna e valores para comparação do condicional.

Retorna uma lista vazia caso não haja resultado de requisição ou se houver algum erro (de sintaxe ou tamanho) nos parâmetros.

    QList< QList<QVariant> > retrieveAllCond(const QString &tableName, const QStringList &columnName, const QString &columnCondition, const QVariant &condition, const QString &operation = “=”);

Este método é uma sobrecarga, onde também é possível especificar quais colunas deverão constar na lista retornada.

Retorna uma lista vazia caso não haja resultado de requisição ou se houver algum erro (de sintaxe ou tamanho) nos parâmetros.

    QList< QList<QVariant> > retrieveAllCond(const QString &tableName, const QStringList &columnName, const QStringList &columnCondition, const QList<QVariant> &condition, const QString &operation = “=”);

Este método é uma sobrecarga, onde é possível fornecer mais de uma coluna e valores para comparação do condicional. Também é possível especificar quais colunas deverão constar na lista retornada.

Retorna uma lista vazia caso não haja resultado de requisição ou se houver algum erro (de sintaxe ou tamanho) nos parâmetros.

    int rowsCount(const QString &tableName);

Este método retorna a quantidade de linhas da tabela.

Retorna -1 caso haja algum erro.

    int rowsCountCond(const QString &tableName, const QString &columnCondition, const QVariant &condition, const QString &operation = “=”);

Este método retorna a quantidade de linhas da tabela que satisfazem a condição especificada no quarto parâmetro. Onde, os valores e colunas a serem comparados devem ser fornecidos no segundo e terceiro parâmetro.

Retorna -1 caso haja algum erro.

    int rowsCountCond(const QString &tableName, const QStringList &columnCondition, const QList<QVariant> &condition, const QString &operation = “=”);

Este método é uma sobrecarga, onde é possível fornecer mais de uma coluna e valores para comparação do condicional.

Retorna -1 caso haja algum erro.

    bool clearTable(const QString &tableName);

Este método limpa a tabela especificada como parâmetro, mas não a exclui.

Retorna true caso consiga executar a requisição, ou falso, caso contrário.

    bool dropTable(const QString &tableName);

Este método exclui a tabela especificada como parâmetro.

Retorna true caso consiga executar a requisição, ou falso, caso contrário.

    QSqlQuery runCustomQuery();

Retorna um objeto QSqlQuery construído com base na conexão ao banco de dados atual. Com este objeto, o desenvolvedor estará hábil a executar qualquer comando SQL desejado.

    QVariant pixmapToVariant(const QPixmap &pixmap);

Este método retorna um QVariant gerado a partir do QPixmap fornecido como parâmetro. Ele é útil ao armazenar imagens no banco de dados.

    QPixmap variantToPixmap(const QVariant &variant);

Este método retorna um uma imagem gerada a partir do QVariant fornecido como parâmetro. Ele é útil para recuperar imagens do banco de dados.

Caso haja uma entrada inválida, um QPixmap nulo é retornado.

    static QString getUniqueConnectionName(const QString &partname = “”);

Este método retorna uma QString única, que pode ser utilizada como nome de conexão para o banco de dados (evita que conexões com mesmo nome possam ser interrompidas). O parâmetro partName é usado como prefixo.

    bool setConnectionType(DBConnectionType cType);

Troca o tipo de banco de dados ao qual o DBManager deverá conectar-se.

Retorna true caso seja possível defini-lo ou false, caso contrário (note que não é possível trocar o tipo de banco de dados enquanto a conexão estiver ativa).

    DBConnectionType connectionType();

Retorna o tipo de banco de dados atualmente configurado.

    bool setConnectionName(const QString &cName);

Define um novo nome para a conexão ao banco de dados.

Retorna true caso seja possível defini-la ou false, caso contrário (note que não é possível trocar o nome da conexão enquanto ela estiver ativa).

    QString currentConnectionName();

Retorna o nome atual da conexão.

    bool setDatabaseData(const DBManager::DBData &dbData);

Define uma nova configuração para a conexão ao banco de dados.

Retorna true caso seja possível defini-la ou false, caso contrário (note que não é possível trocar as configurações enquanto a conexão estiver ativa).

    const DBManager::DBData databaseData();

Retorna as configurações atuais do banco de dados.

    bool setDBPrefix(const QString &prefix);

Define um novo prefixo padrão para as tabelas da conexão do banco de dados.

Retorna true caso seja possível defini-lo ou false, caso contrário (note que não é possível trocar o prefixo das tabelas enquanto a conexão estiver ativa).

    inline QString dbPrefix();

Retorna o prefixo atual do banco de dados.

    bool openDB();

Inicia a conexão com o banco de dados (de acordo com o nome da conexão). Retorna true caso haja sucesso, ou falso, caso contrário.

Veja a documentação em: http://doc.qt.io/qt-5/qsqldatabase.html#open.

    bool isOpen();

Returna true caso a conexão atual estiver aberta. Método idêntico à QSqlDatabase::isOpen();

Veja a documentação em: http://doc.qt.io/qt-5/qsqldatabase.html#isOpen;

    bool isValid();

Retorna true caso o banco de dados tenha um driver válido. Método identico à QSqlDatabase::isValid();

Veja a documentação em: http://doc.qt.io/qt-5/qsqldatabase.html#isValid;

    void closeDB();

Encerra a conexão atual com o banco de dados.

    QSqlError lastError();

Este método retorna a causa do último erro com relação à manipulação do banco de dados, como por exemplo, sintaxe da requisição, posição ou tipo inválido, etc. Vide documentação do QSqlError para maiores detalhes.

Caso não hajam quaisquer erros durante e uso do banco de dados, será retornado um objeto QSqlError(“”, “”, “”);

    bool hasValidSettings();

Indica se os valores configurados para o banco de dados estão de acordo. Este método retorna true caso as configurações sejam válidas (vide tabela a seguir, ela explica os dados necessários para estabelecer conexão com cada tipo de banco de dados), ou false caso contrário.

MySQL

SQLite

Para verificar, basta invocar o método:

Programa de exemplo

Este projeto também possui um programa base, onde é possível testar a conexão e compreender um pouco melhor como que a biblioteca funciona.

Ele está disponível na pasta “Sample program” do repositório do projeto. Ele pode ser acessado via: https://github.com/Nintersoft/DBManager/blob/master/sample%20program/. Lá, é possível baixar o código fonte que está contido em um arquivo zipado ou ainda explorá-lo no próprio GitHub.

Expansões

A DBManager pode ser utilizada em qualquer aplicação gui que necessite de conexão à bancos de dados MySQL ou SQLite que utilize a biblioteca Qt.

Atualmente ela já é parte de alguns projetos desenvolvidos por nossa equipe, inclusive do SmartClass, o projeto de onde a DBManager surgiu.

Você também pode utilizá-la em suas próprias aplicações e, para facilitar para você, disponibilizamos a biblioteca compilada para Windows (nas versões MSVC2017_x86, MSVC2017_x64 e MinGW_x86), contendo os cabeçalhos necessários a biblioteca de link dinâmico e o arquivo de link estático. Mas, caso você esteja desenvolvendo para MAC ou Linux, basta clonar o diretório do projeto em nosso repositório oficial, compilá-la e conectá-la à sua aplicação (você pode seguir este tutorial oficial para obter ajuda na implementação da biblioteca).

Código Aberto

A DBManager encontra-se sob a Licença de Código Aberto Nintersoft, portanto pode ser utilizada para fins pessoais e comerciais, compartilhada e recompilada sob a mesma licença.

Sidebar