热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【翠字营原创】:SQLite基础应用基于sqlite3_stmt

intmain(intargc,char*argv[]){sqlite3*db;sqlite3_stmt*stat;char*zErrMs

int main(int argc, char* argv[])
{

 

 

   sqlite3 *db;

   sqlite3_stmt *stat;

   char *zErrMsg = 0;

   char buffer2[1024]="0";

 

   sqlite3_open("./db/MetaInfo.db", &db);

   int result;

   if(result)

   {

      std::cout<<"Open the database sqlite.db failed"<<std::endl;

   }

 

   else

   {

      std::cout<<"Open the database sqlite.db sucessfully"<<std::endl;

      return 0;

 

   }

 

  sqlite3_exec(db, "CREATE TABLE list (fliename varchar(128) UNIQUE, fzip blob, ntest int, ntest1 int);", 0, 0, &zErrMsg);

   if (zErrMsg)

   {

      std::cout<<"execute sql failed. "<<zErrMsg<<std::endl;

      sqlite3_free(zErrMsg);

   }

  

 

   //sqlite3_prepare 第一个参数是sqlite3 * 指针

   //第二个参数是sql 字符串,可以包含多个sql语句

   //第三个参数是sql 字符串长度,-1 sqlite 自己计算

   //第四个参数是sqlite3_stmt ** 类型返回的是sql 解析的语句

   //第个参数是const char *pzTail 用于指向zSql中下个sql语句开始的地址上,所以pzTail并没有重新开辟内存空间

   const char *pzTail =NULL;

   const char *zSql = "insert into list values ('5.bmp',?,?,1); insert into list values ('4.bmp',?,?,1);";

   int nRet = sqlite3_prepare(db, zSql, -1, &stat, &pzTail);

   std::cout<<"nRet of sqlite3_prepare: "<<nRet<<std::endl;

 

   FILE *fp;

   long filesize = 0;

   char * ffile;

   fp = fopen("./2.bmp", "rb");

   if(fp != NULL)

   {

      fseek(fp, 0, SEEK_END);

      filesize = ftell(fp);

      fseek(fp, 0, SEEK_SET);

      ffile = new char[filesize+1];

      size_t sz = fread(ffile, sizeof(char), filesize+1, fp);

 

      fclose(fp);

   }

 

 

   //sqlite3_bind_xxx 函数第一个参数是sqlite3_prepare 后的sqlite3_stmt 指针变量

   //第二个参数是列的索引(从索引0开始)

   sqlite3_bind_blob(stat, 1, ffile, filesize, NULL);

   delete(ffile);

 

   sqlite3_bind_int(stat, 2, 100);

   sqlite3_step(stat);

 

   //每次调用sqlite3_prepare 函数sqlite 会重新开辟sqlite3_stmt空间,

   //所以在使用同一个sqlite3_stmt 指针再次调用sqlite3_prepare

   //需要调用sqlite3_finalize先释放空间

   sqlite3_finalize(stat);

 

   //--------------------------------------

 

   sqlite3_prepare(db, "select * from list;", -1, &stat, 0);

  

   //在调用sqlite3_column_count获取查询结果列信息的时候不需要先执行sqlite3_step就可以获取

   int nColNum = sqlite3_column_count(stat);

   std::cout<<"total column: "<<nColNum<<std::endl;

 

   int r = sqlite3_step(stat);

 

   //在调用sqlite3_column_type sqlite3_column_name获取列类型和列名称信息前需要先执行sqlite3_step

   /*

   #define SQLITE_INTEGER  1

   #define SQLITE_FLOAT    2

   #define SQLITE_TEXT     3

   #define SQLITE_BLOB     4

   #define SQLITE_NULL     5

   */

   int colType = sqlite3_column_type(stat, 0);

   std::cout<<"type of column 0 : "<<colType<<std::endl;

   const char *pchColName = sqlite3_column_name(stat, 0);

   std::cout<<"col name of column 0 : "<<pchColName<<std::endl;

 

   colType = sqlite3_column_type(stat, 1);

   std::cout<<"type of column 1 : "<<colType<<std::endl;

   pchColName = sqlite3_column_name(stat, 1);

   std::cout<<"col name of column 1 : "<<pchColName<<std::endl;

 

   colType = sqlite3_column_type(stat, 2);

   std::cout<<"type of column 2 : "<<colType<<std::endl;

   pchColName = sqlite3_column_name(stat, 2);

   std::cout<<"col name of column 2 : "<<pchColName<<std::endl;

 

   colType = sqlite3_column_type(stat, 3);

   std::cout<<"type of column 3 : "<<colType<<std::endl;

   pchColName = sqlite3_column_name(stat, 3);

   std::cout<<"col name of column 3 : "<<pchColName<<std::endl;

 

   while(r == SQLITE_ROW)

   {

      const void * test = sqlite3_column_blob(stat, 1);

      int size = sqlite3_column_bytes(stat, 1);

      sprintf(buffer2, "%s", test);

 

      FILE *fp2;

      fp2 = fopen("outfile.bmp", "wb");

      if(fp2 != NULL)

      {

        size_t ret = fwrite(test, sizeof(char), size, fp2);

        fclose(fp2);

      }

 

      const unsigned char * ptest = sqlite3_column_text(stat, 0);

      std::cout<<ptest<<std::endl;

      int ntest = sqlite3_column_int(stat, 2);

      std::cout<<ntest<<std::endl;

      int ntest1 = sqlite3_column_int(stat, 3);

      std::cout<<ntest1<<std::endl;

 

      r = sqlite3_step(stat);

   }

   sqlite3_finalize(stat);

   sqlite3_close(db);

   return 0;

}


 return 0;
}


推荐阅读
  • SQLite是一种轻量级的关系型数据库管理系统,尽管体积小巧,却能支持高达2TB的数据库容量,每个数据库以单个文件形式存储。本文将详细介绍SQLite在Android开发中的应用,包括其数据存储机制、事务处理方式及数据类型的动态特性。 ... [详细]
  • 使用Python模拟登录教务系统抓取成绩并分析存储
    本文详细介绍如何使用Python编程语言模拟登录学校教务系统,抓取学生的成绩信息,并进行数据分析和可视化处理,最终将数据存储到MySQL数据库中。 ... [详细]
  • 本文深入探讨了JLine库中的ConsoleReader.drawBuffer()方法的使用场景和具体实现,通过多个实际代码示例,帮助开发者更好地理解和应用此方法。 ... [详细]
  • Oracle中打开10046Trace的各种方法10046trace的跟踪等级10046是一个Oracle的内部事件(event),通过设置这个事件可以得到Oracl ... [详细]
  • 使用EF Core在.Net Core控制台应用中操作SQLite数据库
    本文介绍如何利用Visual Studio 2019和Windows 10环境,通过Entity Framework Core(EF Core)实现对SQLite数据库的读写操作。项目源代码可从百度网盘下载。 ... [详细]
  • 本文详细介绍如何在Spring Boot项目中集成和使用JPA,涵盖JPA的基本概念、Spring Data JPA的功能以及具体的操作步骤,帮助开发者快速掌握这一强大的持久化技术。 ... [详细]
  • 深入解析轻量级数据库 SQL Server Express LocalDB
    本文详细介绍了 SQL Server Express LocalDB,这是一种轻量级的本地 T-SQL 数据库解决方案,特别适合开发环境使用。文章还探讨了 LocalDB 与其他轻量级数据库的对比,并提供了安装和连接 LocalDB 的步骤。 ... [详细]
  • SQL 数据恢复技巧:利用快照实现高效恢复
    本文详细介绍了如何在 SQL 中通过数据库快照实现数据恢复,包括快照的创建、使用及恢复过程,旨在帮助读者深入了解这一技术并有效应用于实际场景。 ... [详细]
  • 使用URLHttpConnection获取并展示图片至ImageView的方法
    本文介绍如何通过URLHttpConnection方式从网络加载图片,并将其显示在Android应用的ImageView组件上。包括布局文件和Java代码的具体实现。 ... [详细]
  • JobScheduler5.0源码分析
    0.JobScheduler执行代码mJobScheduler(JobScheduler)getSystemService(Context.JOB_SCHEDULER_SERVICE); ... [详细]
  • 本文探讨了一种有效的方法来检查数据库中是否已存在特定的用户名,如果不存在,则将其添加到数据库中。代码示例展示了如何使用SQL查询和C#编程实现这一功能。 ... [详细]
  • 设计模式系列-原型模式
    一、上篇回顾上篇创建者模式中,我们主要讲述了创建者的几类实现方案,和创建者模式的应用的场景和特点,创建者模式适合创建复杂的对象,并且这些对象的每个组成部分的详细创建步骤可以是动态的变化的,但 ... [详细]
  • 抽象工厂模式 c++
    抽象工厂模式包含如下角色:AbstractFactory:抽象工厂ConcreteFactory:具体工厂AbstractProduct:抽象产品Product:具体产品https ... [详细]
  • 本文档提供了详细的MySQL安装步骤,包括解压安装文件、选择安装类型、配置MySQL服务以及设置管理员密码等关键环节,帮助用户顺利完成MySQL的安装。 ... [详细]
  • 基于OpenCV的小型图像检索系统开发指南
    本文详细介绍了如何利用OpenCV构建一个高效的小型图像检索系统,涵盖从图像特征提取、视觉词汇表构建到图像数据库创建及在线检索的全过程。 ... [详细]
author-avatar
思路
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有