O melhor tutorial SQLite - C / C ++ em 2024. Neste tutorial você pode aprender instalar,C / C ++ API de interface,Conectar-se ao banco de dados,Criar uma tabela,operação INSERT,operações SELECT,operação UPDATE,operação DELETE,
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.
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 & 描述 |
---|---|
1 | sqlite3_open(const char *filename, sqlite3 **ppDb) 该例程打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对象。 如果filename参数是 NULL 或 ':memory:',那么 sqlite3_open() 将会在 RAM 中创建一个内存数据库,这只会在 session 的有效时间内持续。 如果文件名 filename 不为 NULL,那么 sqlite3_open() 将使用这个参数值尝试打开数据库文件。如果该名称的文件不存在,sqlite3_open() 将创建一个新的命名为该名称的数据库文件并打开。 |
2 | sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg) 该例程提供了一个执行 SQL 命令的快捷方式,SQL 命令由 sql 参数提供,可以由多个 SQL 命令组成。 在这里,第一个参数sqlite3是打开的数据库对象,sqlite_callback是一个回调,data作为其第一个参数,errmsg 将被返回用来获取程序生成的任何错误。 sqlite3_exec() 程序解析并执行由sql参数所给的每个命令,直到字符串结束或者遇到错误为止。 |
3 | sqlite3_close(sqlite3*) 该例程关闭之前调用 sqlite3_open() 打开的数据库连接。所有与连接相关的语句都应在连接关闭之前完成。 如果还有查询没有完成,sqlite3_close() 将返回 SQLITE_BUSY 禁止关闭的错误消息。 |
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.
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.
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
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
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
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