📜  使用C C++和SQLite的SQL(1)

📅  最后修改于: 2023-12-03 15:36:35.332000             🧑  作者: Mango

使用C/C++和SQLite的SQL

简介

SQLite是一种嵌入式关系型数据库,它支持 SQL 语句和事务。SQLite的特点是轻量级、可嵌入、可移植、易于使用和高效。使用C/C++和SQLite的SQL可以在嵌入式设备和移动设备上开发本地应用程序,而无需使用独立的数据库服务器。

安装SQLite

在使用SQLite之前,需要先安装SQLite库。SQLite的官方网站提供了预编译的二进制文件和源代码。安装SQLite的方法不同于不同的平台,可以访问 SQLite 的官方网站 查看如何在你的平台上安装SQLite。

使用SQLite

使用 SQLite 时,首先需要创建一个数据库。在SQLite中,数据库是一个文件,可以通过文件系统中的路径来识别。可以使用SQLite提供的命令行工具或API来访问数据库。

创建数据库

可以使用SQLite提供的命令行工具或API创建数据库。在命令行中,使用以下命令来创建数据库:

sqlite3 test.db

这将创建一个名为test.db的数据库文件。在C/C++中,可以使用以下代码来创建数据库:

#include <sqlite3.h>

sqlite3 *db;

int rc = sqlite3_open("test.db", &db);

if(rc){
  fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
  sqlite3_close(db);
  return 1;
} else {
  fprintf(stdout, "Opened database successfully\n");
  sqlite3_close(db);
  return 0;
}
创建表

在SQLite中,表是存储数据的对象。可以使用SQL语句来创建表。以下是创建一个名为employee的表的SQL语句:

CREATE TABLE employee(
   ID INT PRIMARY KEY NOT NULL,
   NAME TEXT NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR(50),
   SALARY REAL
);

在C/C++中,可以使用以下代码来创建表:

sqlite3_stmt *stmt;
int rc = sqlite3_prepare_v2(db, "CREATE TABLE employee(ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL);",-1,&stmt,0);

if(rc != SQLITE_OK){
  fprintf(stderr, "create table failed:%s\n", sqlite3_errmsg(db));
  sqlite3_close(db);
  return 1;
} else {
  rc = sqlite3_step(stmt);
  if(rc != SQLITE_DONE){
    fprintf(stderr, "create table failed:%s\n", sqlite3_errmsg(db));
    sqlite3_close(db);
    return 1;
  } else {
    fprintf(stdout, "Create table employee successfully\n");
    sqlite3_finalize(stmt);
    sqlite3_close(db);
    return 0;
  }
}
插入数据

可以使用SQL语句来向表中插入数据。以下是向employee表中插入一条记录的SQL语句:

INSERT INTO employee (ID,NAME,AGE,ADDRESS,SALARY) 
VALUES (1, 'John Smith', 25, 'New York', 5000.00 );

在C/C++中,可以使用以下代码来插入数据:

sqlite3_stmt *stmt;
int rc = sqlite3_prepare_v2(db, "INSERT INTO employee (ID,NAME,AGE,ADDRESS,SALARY) VALUES (?,?,?,?,?);",-1,&stmt,0);

if(rc != SQLITE_OK){
  fprintf(stderr, "insert data failed:%s\n", sqlite3_errmsg(db));
  sqlite3_close(db);
  return 1;
} else {
  rc = sqlite3_bind_int(stmt,1,1);
  rc = sqlite3_bind_text(stmt,2,"John Smith",-1,SQLITE_STATIC);
  rc = sqlite3_bind_int(stmt,3,25);
  rc = sqlite3_bind_text(stmt,4,"New York",-1,SQLITE_STATIC);
  rc = sqlite3_bind_double(stmt,5,5000.00);

  if(rc != SQLITE_OK){
    fprintf(stderr, "insert data failed:%s\n", sqlite3_errmsg(db));
    sqlite3_close(db);
    return 1;
  } else {
    rc = sqlite3_step(stmt);
    if(rc != SQLITE_DONE){
      fprintf(stderr, "insert data failed:%s\n", sqlite3_errmsg(db));
      sqlite3_close(db);
      return 1;
    } else {
      fprintf(stdout, "Insert data successfully\n");
      sqlite3_finalize(stmt);
      sqlite3_close(db);
      return 0;
    }
  }
}
查询数据

可以使用SQL语句来从表中查询数据。以下是从employee表中查询所有记录的SQL语句:

SELECT * FROM employee;

在C/C++中,可以使用以下代码来查询数据:

sqlite3_stmt *stmt;
int rc = sqlite3_prepare_v2(db, "SELECT * FROM employee;",-1,&stmt,0);

if(rc != SQLITE_OK){
  fprintf(stderr, "select data failed:%s\n", sqlite3_errmsg(db));
  sqlite3_close(db);
  return 1;
} else {
  int cols = sqlite3_column_count(stmt);
  while(sqlite3_step(stmt) == SQLITE_ROW){
    for(int i = 0; i < cols; i++){
      fprintf(stderr, "%s = ", sqlite3_column_name(stmt,i));
      switch(sqlite3_column_type(stmt,i)){
        case SQLITE_INTEGER:
          fprintf(stderr, "%d", sqlite3_column_int(stmt,i));
          break;
        case SQLITE_FLOAT:
          fprintf(stderr, "%.2f", sqlite3_column_double(stmt,i));
          break;
        case SQLITE_TEXT:
          fprintf(stderr, "%s", sqlite3_column_text(stmt,i));
          break;
        case SQLITE_BLOB:
          fprintf(stderr, "%d", sqlite3_column_bytes(stmt, i));
          break;
        case SQLITE_NULL:
          fprintf(stderr, "%s", "NULL");
          break;
      }
      fprintf(stderr, " | ");
    }
    fprintf(stderr, "\n");
  }
  sqlite3_finalize(stmt);
  sqlite3_close(db);
  return 0;
}
总结

使用C/C++和SQLite的SQL可以在嵌入式设备和移动设备上开发高效的本地应用程序。我们可以使用SQLite提供的命令行工具或API来访问数据库,使用SQL语句来创建表、插入数据、查询数据等。SQLite是一种轻量级、可嵌入、可移植、易于使用和高效的嵌入式关系型数据库,是开发本地应用程序的一个不错选择。