Home > Backend Development > C++ > body text

SQL using C/C++ and SQLite

WBOY
Release: 2023-09-19 19:49:02
forward
757 people have browsed it

SQL using C/C++ and SQLite

In this section, you will learn how to use SQLite in C/C programs.

Installation

Before you start using SQLite in a C/C program, you need to make sure that the SQLite library is set up on your computer. You can view the SQLite installation chapter to understand the installation process.

C/C Interface API

The following are important C/C SQLite interface routines that can meet your requirements for using SQLite databases from your C/C program. If you are looking for a more complex application, then you can check out the SQLite official documentation.

Serial number API and description
1
sqlite3_open(const char *filename, sqlite3 **ppDb)
Copy after login
This routine opens a connection to a SQLite database file and returns a database connection object for use by other SQLite routines.

If the filename parameter is NULL or ':memory:', sqlite3_open() will create an in-memory database in RAM that lasts only for the duration of the session.

If the file name is not NULL, sqlite3_open() attempts to open the database file using its value. If a file with that name does not exist, sqlite3_open() will open a new database file with that name.

2
sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)
Copy after login
This routine provides a quick and easy way to execute SQL commands provided with the sql parameter, which can Contains multiple SQL commands.

Here, the first parameter sqlite3< /em> is an open database object, sqlite_callback is a callback, where data is the first parameter, and errmsg will be returned to Catch any errors raised by the routine. The

SQLite3_exec () routine parses and executes each command given in the sql argument until the end of the string is reached or an error is encountered.

3
sqlite3_close(sqlite3*)
Copy after login
This routine closes a database connection that was previously opened by calling sqlite3_open(). All prepared statements related to the connection should be completed before closing the connection.

If any queries are still outstanding, sqlite3_close() will return SQLITE_BUSY and display the error message Unable to close due to unfinished statements.

Connecting to a database

The following C code snippet shows how to connect to an existing database. If the database does not exist, create the database and finally return the database object.

Sample Code

#include <stdio.h>
#include <sqlite3.h>
int main(int argc, char* argv[]) {
   sqlite3 *db;
   char *zErrMsg = 0;
   int rc;
   rc = sqlite3_open("test.db", &db);
   if( rc ) {
      fprintf(stderr, "Can&#39;t open database: %s\n", sqlite3_errmsg(db));
      return(0);
   } else {
      fprintf(stderr, "Opened database successfully\n");
   }
   sqlite3_close(db);
}
Copy after login

Output

$gcc test.c -l sqlite3
$./a.out
Opened database successfully
Copy after login

Create Table

The following C code snippet will be used to create a table in the previously created database-

Sample code

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
static int callback(void *NotUsed, int argc, char **argv, char **azColName) {
   int i;
   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;
   /* Open database */
   rc = sqlite3_open("test.db", &db);
   if( rc ) {
      fprintf(stderr, "Can&#39;t open database: %s\n", sqlite3_errmsg(db));
      return(0);
   } else {
      fprintf(stdout, "Opened database successfully\n");
   }
   /* Create SQL statement */
   sql = "CREATE TABLE COMPANY(" \
      "ID INT PRIMARY KEY NOT NULL," \
      "NAME TEXT NOT NULL," \
      "AGE INT NOT NULL," \
      "ADDRESS CHAR(50)," \
      "SALARY REAL );";
   /* Execute SQL statement */
   rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
   if( rc != SQLITE_OK ) {
      fprintf(stderr, "SQL error: %s\n", zErrMsg);
      sqlite3_free(zErrMsg);
   } else {
      fprintf(stdout, "Table created successfully\n");
   }
   sqlite3_close(db);
   return 0;
}
Copy after login

Output (check database file status):

-rwxr-xr-x. 1 root root 9567 May 8 02:31 a.out
-rw-r--r--. 1 root root 1207 May 8 02:31 test.c
-rw-r--r--. 1 root root 3072 May 8 02:31 test.db
Copy after login

Insert operation

The following C code snippet shows how to create the COMPANY table in the above example Creating a Record in –

Sample Code

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
static int callback(void *NotUsed, int argc, char **argv, char **azColName) {
   int i;
   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;
   /* Open database */
   rc = sqlite3_open("test.db", &db);
   if( rc ) {
      fprintf(stderr, "Can&#39;t open database: %s\n", sqlite3_errmsg(db));
      return(0);
   } else {
      fprintf(stderr, "Opened database successfully\n");
   }
   /* Create SQL statement */
   sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \
      "VALUES (1, &#39;Paul&#39;, 32, &#39;California&#39;, 20000.00 ); " \
      "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \
      "VALUES (2, &#39;Allen&#39;, 25, &#39;Texas&#39;, 15000.00 ); " \
      "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \
      "VALUES (3, &#39;Teddy&#39;, 23, &#39;Norway&#39;, 20000.00 );" \
      "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" \
      "VALUES (4, &#39;Mark&#39;, 25, &#39;Rich-Mond &#39;, 65000.00 );";
   /* Execute SQL statement */
   rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
   if( rc != SQLITE_OK ) {
      fprintf(stderr, "SQL error: %s\n", zErrMsg);
      sqlite3_free(zErrMsg);
   } else {
      fprintf(stdout, "Records created successfully\n");
   }
   sqlite3_close(db);
   return 0;
}
Copy after login

Output

Opened database successfully
Records created successfully
Copy after login

SELECT Action

Before moving on to the actual example of getting a record, let’s look at a related example Some details on the callback functions used in . This callback provides a way to obtain results from a SELECT statement. It has the following statement – ​​

typedef int (*sqlite3_callback)(
   void*, /* Data provided in the 4th argument of sqlite3_exec() */
   int, /* The number of columns in row */
   char**, /* An array of strings representing fields in the row */
   char** /* An array of strings representing column names */
);
Copy after login

If the above callback is provided as the third parameter in the sqlite_exec() routine, SQLite will call this callback for every record processed in every SELECT statement executed within the SQL parameter function.

The following C code snippet shows how to get and display records from the COMPANY table created in the above example –

Sample code

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
static int callback(void *data, int argc, char **argv, char **azColName) {
   int i;
   fprintf(stderr, "%s: ", (const char*)data);
   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 = "Callback function called";
   /* Open database */
   rc = sqlite3_open("test.db", &db);
   if( rc ) {
      fprintf(stderr, "Can&#39;t open database: %s\n", sqlite3_errmsg(db));
      return(0);
   } else {
      fprintf(stderr, "Opened database successfully\n");
   }
   /* Create SQL statement */
   sql = "SELECT * from COMPANY";
   /* Execute SQL statement */
   rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
   if( rc != SQLITE_OK ) {
      fprintf(stderr, "SQL error: %s\n", zErrMsg);
      sqlite3_free(zErrMsg);
   } else {
      fprintf(stdout, "Operation done successfully\n");
   }
   sqlite3_close(db);
   return 0;
}
Copy after login

Output

Opened database successfully
Callback function called: ID = 1
NAME = Paul
AGE = 32
ADDRESS = California
SALARY = 20000.0
Callback function called: ID = 2
NAME = Allen
AGE = 25
ADDRESS = Texas
SALARY = 15000.0
Callback function called: ID = 3
NAME = Teddy
AGE = 23
ADDRESS = Norway
SALARY = 20000.0
Callback function called: ID = 4
NAME = Mark
AGE = 25
ADDRESS = Rich-Mond
SALARY = 65000.0
Operation done successfully
Copy after login

The above is the detailed content of SQL using C/C++ and SQLite. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:tutorialspoint.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template