美文网首页
SQL C语言基本操作

SQL C语言基本操作

作者: 二进制人类 | 来源:发表于2022-10-07 10:48 被阅读0次

相关API

打开

#include <sqlite3.h>
/**
 * [sqlite3_open 如果数据库文件不存在则创建并打开数据文件,否则数据库文件存在直接打开数据库文件。 ]
 * @param  filename [数据库文件名(相对路径或者绝对路径),若文件名包含ASCII码表范围的之外的字符,则其必需是(UTF-8)编码]
 * @param  ppDb     [数据库标识,此结构体为数据库操作句柄。通过此句柄可对数据库文件进行相应操作]
 * @return          [成功返回SQLITE_OK,失败返回错误号]
 */
int sqlite3_open(const char *filename,sqlite3 **ppDb);

int sqlite3_open16(const void *filename,sqlite3 **ppDb);

int sqlite3_open_v2(const char *filename,sqlite3 **ppDb,int flags,const char *zVfs);

实例

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

int main()
{
    int ret;
    sqlite3 *db;
    /* 打开数据库文件my.db:   相当于执行命令sqlite3 my.db */
    ret = sqlite3_open("my.db", &db);
    if (ret != SQLITE_OK)
    {
        fprintf(stderr, "open my.db fail\n");
        return -1;
    }
    printf("open my.db success\n");
}

关闭

#include <sqlite3.h>
int sqlite3_close(sqlite3 *db);    
int sqlite3_close_v2(sqlite3 *db);

实例

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

int main()
{
    int ret;
    sqlite3 *db;
    /* 打开数据库文件my.db */
    ret = sqlite3_open("my1.db", &db);
    if (ret != SQLITE_OK)
    {
        fprintf(stderr, "open my.db fail\n");
        return -1;
    }
    /* 关闭数据库句柄 */
    ret = sqlite3_close(db);
    if (ret != SQLITE_OK)
    {
        fprintf(stderr, "close my.db fail\n");
        return -1;
    }
    printf("close my.db success\n");
    return 0;
}

获取错误消息

#include <sqlite3.h>
/*得到错误消息*/
const char *sqlite3_errmsg(sqlite3 *db);

操作表

#include <sqlite3.h>
/**
 * [sqlite3_exec 执行sql指向SQL语句,实现对于数据库表的操作]
 * @param  db     [db标识需要操作数据库文件的句柄]
 * @param  sql    [需要执行的SQL语句]
 * @param  callback[
 * 回调函数
 * 参数1:arg是由sqlite3_exec的第4个参数传递过来的数据;
   参数2:column标识所查询到的记录的列数;
   参数3:key_value标识数据记录的字段值:
   由一维数组存储,数组中的每一个元素类型都是char *,指向字段值;
   参数4:key_name标识数据记录的字段名称:
   由一维数组存储,数组中的每一个元素类型都是char *,指向字段值;
 * ]
 * @param  arg    [数据传递给回调函数的第1个参数]
 * @param  errmsg [
 * 返回函数执行的错误消息
 * errmsg是一个char类型指针,对于使用者只是定义了指针变量,没有具体指向,
   在sqlite3_exec函数异常返回,此时可以访问errmsg指向的空间,
   该空间是在sqlite3_exec函数内部动态开辟的空间,对于使用者需要手动释放。
 * ]
 * @return        [成功返回SQLITE_OK,失败返回错误号]
 */
int sqlite3_exec(
  sqlite3 *db,                                  /* An open database */
  const char *sql,                           /* SQL to be evaluated */
  int (*callback)(void* arg,int column,char** key_value,char** key_name),  /* Callback function */
  void *arg,                                    /* 1st argument to callback */
  char **errmsg                              /* Error msg written here */
)

/**
 * [sqlite3_free 动态释放数据库中动态开辟的空间]
 * @param addr [需要释放的空间地址]
 */
void sqlite3_free(void*addr);

实例创建

int CreateTable(sqlite3 *db)
{
    char sql[128];
    char *errmsg;
    /* 创建数据库表 */
    /* 实现SQL语句的封装 */
    sprintf(sql, "create table Stu(nu integer primary key, name text, age integer, score float);");
    ret = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
    if (ret != SQLITE_OK)
    {
        fprintf(stderr, "create table fail : %s\n", errmsg);
        return -1;
    }
    return 0;
}

实例插入

int InsertTable(sqlite3 *db, int nu, char *name, int age, float score)
{
    int ret;
    char sql[128];
    char *errmsg;
    /* 实现SQL语句的封装 */
    sprintf(sql, "insert into Stu values(%d, '%s', %d, %f);", nu, name, age, score);
    ret = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
    if (ret != SQLITE_OK)
    {
        fprintf(stderr, "insert table fail : %s\n", errmsg);
        return -1;
    }
    printf("insert success\n");
    return 0;
}

实例修改

int UpdataTable(sqlite3 *db, int nu, int age)
{
    int ret;
    char sql[128];
    char *errmsg;
    /* 封装SQL语句 */
    sprintf(sql, "update Stu set age = %d where nu = %d;", age, nu);
    ret = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
    if (ret != SQLITE_OK)
    {
        fprintf(stderr, "update table fail : %s\n", errmsg);
        return -1;
    }
    printf("update success\n");
    return 0;
}

实例删除

int DeleteTable(sqlite3 *db, int nu)
{
    int ret;
    char sql[128];
    char *errmsg;
    /* 封装SQL语句 */
    sprintf(sql, "delete from Stu where nu = %d;", nu);
    ret = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
    if (ret != SQLITE_OK)
    {
        fprintf(stderr, "delete table fail : %s\n", errmsg);
        return -1;
    }
    printf("delete success\n");
    return 0;
}

实例回调查询

/* 在查询数据的时候,需要自定义回调函数:在每查询到1条记录,自动调用1次回调函数 */
int callback(void *arg, int column, char **key_value, char **key_name)
{
    int i;
    for (i = 0; i < column; i++)
    {
        printf("%s:%s\n", key_name[i], key_value[i]);
    }
    return 0;
}

int SelectTable(sqlite3 *db)
{
    int ret;
    char sql[128];
    char *errmsg;
    /* 封装SQL语句 */
    sprintf(sql, "select * from Stu;");
    ret = sqlite3_exec(db, sql, callback, NULL, &errmsg);
    if (ret != SQLITE_OK)
    {
        fprintf(stderr, "select table fail : %s\n", errmsg);
        return -1;
    }
    printf("select success\n");
    return 0;
}

非回调

#include <sqlite3.h>
/**
 * [sqlite3_get_table 获取查询到的数据记录表]
 * @param  db        [文件的句柄]
 * @param  zSql      [SQL语句]
 * @param  pazResult [
 * 得到是一维数组首元素地址;
   首元素指向的字段数据(都是以字符串形式标识),所以首元素数据是char *类型数据;
   也就是需要得到的是char**的指针;并且是通过函数的形参返回,所以形参类型是char ***;]
 * @param  pnRow     [查询到记录的条数]
 * @param  pnColumn  [查询到记录的列数]
 * @param  pzErrmsg  [返回错误消息,在失败的开辟空间返回]
 * @return           [成功返回SQLITE_OK,失败返回错误号]
 */
int sqlite3_get_table(
  sqlite3 *db,          /* An open database */
  const char *zSql,     /* SQL to be evaluated */
  char ***pazResult,    /* Results of the query */
  int *pnRow,           /* Number of result rows written here */
  int *pnColumn,        /* Number of result columns written here */
  char **pzErrmsg       /* Error msg written here */
);
/*释放获取的数据表存储空间*/
void sqlite3_free_table(char **result);

相关文章

  • SQL C语言基本操作

    相关API 打开 实例 关闭 实例 获取错误消息 操作表 实例创建 实例插入 实例修改 实例删除 实例回调查询 非回调

  • MySQL

    sql 分类 sql 基本语法 DDL(数据定义语言create drop alter) 数据表操作 数据类型 字...

  • 数据库(5) | MySQL SQL 语言查询

    SQL语言基础 本章,我们将会重点探讨SQL语言基础,学习用SQL进行数据库的基本数据查询操作。另外请注意本章的S...

  • c语言数组基本操作

    1.源码实现 2.编译源码 3.运行及其结果

  • oracle复习整理

    1.数据库操作语言 SQL(struct query language)select 语句DDL(数据定义语句)c...

  • 王颖求职简历

    基本信息 专业技能 掌握工业编程语言:C#、JAVA、SQL、Visual Studio.NET 掌握脚本编程语言...

  • ODPS开发笔记

    数据定义语言(DDL SQL) ODPS视图操作 数据操作语言(DML SQL) 动态分区 在insert ove...

  • 0_sql的准备工作

    一.sql的基本概念 sql是数据库查询语言,具有结构化的特点,是一种用于操作RDBMS的数据库语言,RDBMS(...

  • C#操作SQL Server

    本文介绍SQL Server基本的CRUD操作,参考了微软官方教程 Create C# apps using SQ...

  • 总结-MySQL

    SQL语法 -- DDL(数据定义语言)-- DML(数据操作语言)-- DCL(数据控制语言)-- 注意:SQL...

网友评论

      本文标题:SQL C语言基本操作

      本文链接:https://www.haomeiwen.com/subject/nbrvartx.html