Latest web development tutorials

SQLite - C / C ++

instalar

No programa C / C ++ antes de usar SQLite, precisamos garantir que não é a biblioteca SQLite na máquina. Você pode ver a secção de instalação SQLite para o processo de instalação.

C / C ++ API de interface

A seguir estão o importante programa de interface ++ / SQLite C & C para atender às suas necessidades usando banco de dados SQLite em programas C / C ++. Se você precisar de mais detalhes, consulte a documentação oficial SQLite.

序号API & 描述
1sqlite3_open(const char *filename, sqlite3 **ppDb)

该例程打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对象。

如果filename参数是 NULL 或 ':memory:',那么 sqlite3_open() 将会在 RAM 中创建一个内存数据库,这只会在 session 的有效时间内持续。

如果文件名 filename 不为 NULL,那么 sqlite3_open() 将使用这个参数值尝试打开数据库文件。如果该名称的文件不存在,sqlite3_open() 将创建一个新的命名为该名称的数据库文件并打开。

2sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)

该例程提供了一个执行 SQL 命令的快捷方式,SQL 命令由 sql 参数提供,可以由多个 SQL 命令组成。

在这里,第一个参数sqlite3是打开的数据库对象,sqlite_callback是一个回调,data作为其第一个参数,errmsg 将被返回用来获取程序生成的任何错误。

sqlite3_exec() 程序解析并执行由sql参数所给的每个命令,直到字符串结束或者遇到错误为止。

3sqlite3_close(sqlite3*)

该例程关闭之前调用 sqlite3_open() 打开的数据库连接。所有与连接相关的语句都应在连接关闭之前完成。

如果还有查询没有完成,sqlite3_close() 将返回 SQLITE_BUSY 禁止关闭的错误消息。

Conectar-se ao banco de dados

O seguinte trecho de código C mostra como se conectar a um banco de dados existente. Se o banco de dados não existir, ele é criado, e, finalmente, retorna um objeto de banco de dados.

#include <stdio.h>
#include <sqlite3.h>

int main (int argc, char * argv [])
{
   sqlite3 * db;
   char * zErrMsg = 0;
   int rc;

   rc = sqlite3_open ( "test.db", e db);

   if (rc) {
      fprintf (stderr, "Não é possível abrir banco de dados:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stderr, "banco de dados aberto \ êxito n");
   }
   sqlite3_close (db);
}

Agora, vamos compilar e executar o programa acima, criar o nossotest.db banco de dados no diretório atual.Você pode alterar o caminho conforme necessário.

$ Gcc test.c -l sqlite3
$. / A.out
banco de dados aberto com sucesso

Se você quiser usar o código fonte C ++ pode ser elaborada em conformidade com o código a seguir mostra:

$ G ++ test.c -l sqlite3

Aqui, o nosso Programa ligações sqlite3 biblioteca para o programa C para fornecer as funções necessárias. Isto irá criar uma test.db arquivo de banco em seu diretório, você receberá os seguintes resultados:

-rwxr-xr-x. raiz 1 raiz 7383 08 de maio 02:06 a.out
-rw-r - r-- 1 root root 323 08 de maio 02:05 test.c.
-rw-r - r-- 1 root root 0 08 de maio 02:06 test.db.

Criar uma tabela

O seguinte trecho de código C será utilizado para criar uma tabela no banco de dados criado anteriormente:

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h> 

int callback estático (void * NotUsed, int argc, char ** argv, char ** azColName) {
   int i;
   for (i = 0; i & lt; argc; i ++) {
      printf ( "% s =% s \ n", azColName [i], argv [i] argv [i]: "NULL");
   }
   printf ( "\ n");
   return 0;
}

int main (int argc, char * argv [])
{
   sqlite3 * db;
   char * zErrMsg = 0;
   int rc;
   char * sql;

   / * Abrir banco de dados * /
   rc = sqlite3_open ( "test.db", e db);
   if (rc) {
      fprintf (stderr, "Não é possível abrir banco de dados:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stdout, "banco de dados aberto \ êxito n");
   }

   / * Criar instrução SQL * /
   sql = "CREATE TABLE COMPANY (" \
         "ID INT chave primária não NULL," \
         "NAME texto não NULL," \
         "INT idade não NULL," \
         "CHAR ADDRESS (50)," \
         "Salário real);";

   / * Executar instrução SQL * /
   rc = sqlite3_exec (db, sql, callback, 0, & zErrMsg);
   if (rc! = SQLITE_OK) {
   fprintf (stderr, "Erro de SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (stdout, "Table criado com sucesso \ n");
   }
   sqlite3_close (db);
   return 0;
}

Quando o programa acima é compilado e executado, ele cria a tabela COMPANY em test.db arquivo, a lista final dos arquivos da seguinte forma:

-rwxr-xr-x. raiz 1 raiz 9567 08 de maio 02:31 a.out
-rw-r - r-- 1 root root 1207 08 de maio 02:31 test.c.
-rw-r - r-- 1 root root 3072 08 de maio 02:31 test.db.

operação INSERT

O seguinte trecho de código C mostra como criar registros na tabela de empresa criada acima:

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>

int callback estático (void * NotUsed, int argc, char ** argv, char ** azColName) {
   int i;
   for (i = 0; i & lt; argc; i ++) {
      printf ( "% s =% s \ n", azColName [i], argv [i] argv [i]: "NULL");
   }
   printf ( "\ n");
   return 0;
}

int main (int argc, char * argv [])
{
   sqlite3 * db;
   char * zErrMsg = 0;
   int rc;
   char * sql;

   / * Abrir banco de dados * /
   rc = sqlite3_open ( "test.db", e db);
   if (rc) {
      fprintf (stderr, "Não é possível abrir banco de dados:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stderr, "banco de dados aberto \ êxito n");
   }

   / * Criar instrução SQL * /
   sql = "INSERT INTO COMPANY (ID, nome, idade, endereço, SALÁRIO)" \
         "VALUES (1, 'Paul', 32, 'California', 20.000,00);" \
         "INSERT INTO COMPANY (ID, nome, idade, endereço, SALÁRIO)" \
         "VALUES (2, 'Allen', 25, 'Texas', 15.000,00);" \
         "INSERT INTO COMPANY (ID, nome, idade, endereço, SALÁRIO)" \
         "Valores (3, 'Teddy', 23,« Noruega », 20.000,00);" \
         "INSERT INTO COMPANY (ID, nome, idade, endereço, SALÁRIO)" \
         "Valores (4, 'Mark', 25, 'Rich-Mond', 65.000,00);";

   / * Executar instrução SQL * /
   rc = sqlite3_exec (db, sql, callback, 0, & zErrMsg);
   if (rc! = SQLITE_OK) {
      fprintf (stderr, "Erro de SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (stdout, "registros criados com sucesso \ n");
   }
   sqlite3_close (db);
   return 0;
}

Quando o programa acima é compilado e executado, ele irá criar na tabela de empresa por um determinado registro e exibe as duas linhas seguintes:

banco de dados aberto com sucesso
Registros criados com êxito

operações SELECT

Antes de começar explicando exemplos documentados, vamos primeiro entender alguns dos detalhes da função de retorno de chamada, que será o nosso exemplo de usar. Esta chamada de retorno fornece os resultados obtidos a partir de um método de comando SELECT. Declara-se da seguinte forma:

int typedef (* sqlite3_callback) (
void *, / * Dados fornecidos no quarto argumento da sqlite3_exec () * /
int, / * O número de colunas na linha * /
char **, / * Uma matriz de strings representando campos na linha * /
char ** / * Uma matriz de strings representando os nomes das colunas * /
);

Se o retorno de chamada acima como o terceiro parâmetro no procedimento sqlite_exec (), em seguida, SQLite SQL para cada registro dentro dos parâmetros de cada processo de execução instrução SELECT chama a função de retorno de chamada.

O seguinte trecho de código C mostra como obter da tabela A empresa criou mais cedo e exibe o registro:

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>

callback static int (void * data, int argc, char ** argv, char ** azColName) {
   int i;
   fprintf (stderr, "% s:", (const char *) Dados);
   for (i = 0; i & lt; argc; i ++) {
      printf ( "% s =% s \ n", azColName [i], argv [i] argv [i]: "NULL");
   }
   printf ( "\ n");
   return 0;
}

int main (int argc, char * argv [])
{
   sqlite3 * db;
   char * zErrMsg = 0;
   int rc;
   char * sql;
   const char * data = "Função de callback chamado";

   / * Abrir banco de dados * /
   rc = sqlite3_open ( "test.db", e db);
   if (rc) {
      fprintf (stderr, "Não é possível abrir banco de dados:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stderr, "banco de dados aberto \ êxito n");
   }

   / * Criar instrução SQL * /
   sql = "SELECT * from empresa";

   / * Executar instrução SQL * /
   rc = sqlite3_exec (db, sql, chamada de retorno, (void *) de dados, & zErrMsg);
   if (rc! = SQLITE_OK) {
      fprintf (stderr, "Erro de SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (stdout, "Operação feito com sucesso \ n");
   }
   sqlite3_close (db);
   return 0;
}

Quando o programa acima é compilado e executado, ele produz o seguinte resultado:

banco de dados aberto com sucesso
função de retorno de chamada: ID = 1
NAME = Paul
IDADE = 32
ADDRESS = California
SALÁRIO = 20000,0

função de retorno de chamada: ID = 2
NAME = Allen
IDADE = 25
ADDRESS = Texas
SALÁRIO = 15000,0

função de retorno de chamada: ID = 3
NAME = Teddy
IDADE = 23
ADDRESS = Noruega
SALÁRIO = 20000,0

função de retorno de chamada: ID = 4
NAME = Mark
IDADE = 25
ADDRESS = Rich-Mond
SALÁRIO = 65000,0

Operação realizada com sucesso

operação UPDATE

O seguinte trecho de código C mostra como usar a instrução UPDATE para atualizar os registros, em seguida, obter da tabela COMPANY e exibir o registro atualizado:

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h> 

callback static int (void * data, int argc, char ** argv, char ** azColName) {
   int i;
   fprintf (stderr, "% s:", (const char *) Dados);
   for (i = 0; i & lt; argc; i ++) {
      printf ( "% s =% s \ n", azColName [i], argv [i] argv [i]: "NULL");
   }
   printf ( "\ n");
   return 0;
}

int main (int argc, char * argv [])
{
   sqlite3 * db;
   char * zErrMsg = 0;
   int rc;
   char * sql;
   const char * data = "Função de callback chamado";

   / * Abrir banco de dados * /
   rc = sqlite3_open ( "test.db", e db);
   if (rc) {
      fprintf (stderr, "Não é possível abrir banco de dados:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stderr, "banco de dados aberto \ êxito n");
   }

   / * Criar instrução SQL resultante da fusão * /
   sql = "UPDATE empresa criada SALÁRIO = 25000.00 onde ID = 1;" \
         "SELECT * from empresa";

   / * Executar instrução SQL * /
   rc = sqlite3_exec (db, sql, chamada de retorno, (void *) de dados, & zErrMsg);
   if (rc! = SQLITE_OK) {
      fprintf (stderr, "Erro de SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (stdout, "Operação feito com sucesso \ n");
   }
   sqlite3_close (db);
   return 0;
}

Quando o programa acima é compilado e executado, ele produz o seguinte resultado:

banco de dados aberto com sucesso
função de retorno de chamada: ID = 1
NAME = Paul
IDADE = 32
ADDRESS = California
SALÁRIO = 25000,0

função de retorno de chamada: ID = 2
NAME = Allen
IDADE = 25
ADDRESS = Texas
SALÁRIO = 15000,0

função de retorno de chamada: ID = 3
NAME = Teddy
IDADE = 23
ADDRESS = Noruega
SALÁRIO = 20000,0

função de retorno de chamada: ID = 4
NAME = Mark
IDADE = 25
ADDRESS = Rich-Mond
SALÁRIO = 65000,0

Operação realizada com sucesso

operação DELETE

O seguinte trecho de código C mostra como usar a instrução DELETE exclui os registros, em seguida, extraídos da tabela da COMPANHIA e exibe o restante de gravação:

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h> 

callback static int (void * data, int argc, char ** argv, char ** azColName) {
   int i;
   fprintf (stderr, "% s:", (const char *) Dados);
   for (i = 0; i <argc; i ++) {
      printf ( "% s =% s \ n", azColName [i], argv [i] argv [i]: "NULL");
   }
   printf ( "\ n");
   return 0;
}

int main (int argc, char * argv [])
{
   sqlite3 * db;
   char * zErrMsg = 0;
   int rc;
   char * sql;
   const char * data = "Função de callback chamado";

   / * Abrir banco de dados * /
   rc = sqlite3_open ( "test.db", e db);
   if (rc) {
      fprintf (stderr, "Não é possível abrir banco de dados:% s \ n", sqlite3_errmsg (db));
      exit (0);
   } Else {
      fprintf (stderr, "banco de dados aberto \ êxito n");
   }

   / * Criar instrução SQL resultante da fusão * /
   sql = "DELETE FROM empresa onde ID = 2;" \
         "SELECT * from empresa";

   / * Executar instrução SQL * /
   rc = sqlite3_exec (db, sql, chamada de retorno, (void *) de dados, & zErrMsg);
   if (rc! = SQLITE_OK) {
      fprintf (stderr, "Erro de SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } Else {
      fprintf (stdout, "Operação feito com sucesso \ n");
   }
   sqlite3_close (db);
   return 0;
}

Quando o programa acima é compilado e executado, ele produz o seguinte resultado:

banco de dados aberto com sucesso
função de retorno de chamada: ID = 1
NAME = Paul
IDADE = 32
ADDRESS = California
SALÁRIO = 20000,0

função de retorno de chamada: ID = 3
NAME = Teddy
IDADE = 23
ADDRESS = Noruega
SALÁRIO = 20000,0

função de retorno de chamada: ID = 4
NAME = Mark
IDADE = 25
ADDRESS = Rich-Mond
SALÁRIO = 65000,0

Operação realizada com sucesso