• linux 使用sqlite3


    1:c中使用sqlite3需要调用函数接口操作:
     sqlite3 *db;
     int status=sqlite_open("dbname",&db);//打开或者创建数据库
     int status=sqlite3_exec(db,yuju,huitiaohanshu,0,cuowuzhizhen);//数据库所有的操作都得通过这个函数执行
     sqlite3_close(db);//使用完后要关闭数据库资源
    2:sqlite3语句:
     建表:
      create table pic([picId] integer PRIMARY KEY AUTOINCREMENT, [InsertTime] TimeStamp NOT NULL DEFAULT (datetime('now','localtime')), [url] varchar(20));
      //创建了一个有三个字段(picId,url,inserttime)并且这里的插入时间为自动插入当前当地时间
      约束条件:
       not null:
       unique:唯一
       primary key:主键
       foreign key:外键(创建该表和父表之间的联系)
       check:对该项输入内容的条件检查
       default:默认值
      数据类型:(相似匹配,会自动寻找比较合适的具体数据类型进行匹配)
       integer:
        int integer int2 int8 (unsigned big int) (big int)
       text:
        character(20) varchar(255) text clob....
       none:
       real:
        real double float..
       numeric:
        boolean data datetime
      create table teacher(id integer primary key auto increment);
      create table stu (id integer primary key autoincrement,
          name varchar(20) check(length(name)>3),
          tel varchar(11) not null default '13631629322',
          cls integer not null ,
          unique(name,tel),//设置name和tel的组合唯一
          foreign key(cls) references teacher(id));//绑定两个表中的id
     插入:
      insert into pic([picId],[url]) values(null,'%s');
      //当每个字段都要插入时可以缺省表后面的参数
      insert into stu1 select * from stu;
      //将一个表的所有内容导入另外一个
     查询:
      select * from pic;
      select name from stu where id=0;
      select id from stu order by id;//由id排序输出
      select * from stu where name like "t%";//找到stu中名字以t开头的数据
      select * from stu group by id having id>2;//查询id>2的数据并且按照id分组
      select * from stu limit 1 offset 2;//从索引2开始输出后面一个数据
      //c语言中查询一般是使用的回调,在执行sql语句的时候就传入查询数据以后应该怎么处理的函数

    例子:

    #include <stdio.h>
    #include<time.h>
    #include <sqlite3.h>
    #include<string.h>
    
    //查询的回调函数声明
    int select_callback(void * data, int col_count, char ** col_values, char ** col_Name);
    
    int main(int argc, char * argv[])
    { 
      const char * sSQL1 = "create table pic([picId] integer PRIMARY KEY AUTOINCREMENT, [InsertTime] TimeStamp NOT NULL DEFAULT (datetime('now','localtime')), [url] varchar(20));";
      char * pErrMsg = 0;
      int result = 0;
      // 连接数据库
      sqlite3 * db = 0;
      int ret = sqlite3_open("./test9.db", &db);
      if( ret != SQLITE_OK ){
        fprintf(stderr, "无法打开数据库: %s", sqlite3_errmsg(db));
        return(1);
      }
      printf("数据库连接成功!
    ");
        
      // 执行建表SQL
      sqlite3_exec( db, sSQL1, 0, 0, &pErrMsg );
      if( ret!=SQLITE_OK ){
        fprintf(stderr, "SQL error: %s
    ", pErrMsg);
        sqlite3_free(pErrMsg);
        return 1;
      }
      printf("建表成功!
    ");
    
      // 执行插入记录SQL
      //result = sqlite3_exec( db, "insert into pic([url]) values('/c');", 0, 0, &pErrMsg);
      int i;
      for(i=0;i<5;i++){
          if(sqlite3_exec( db, "insert into pic([picId],[url]) values(null,'/c')", 0, 0, &pErrMsg)!= SQLITE_OK){
            fprintf(stderr, "insert SQL error: %s
    ", pErrMsg);
            sqlite3_free(pErrMsg);
            printf("插入失败!
    ");
          }else{
              printf("插入数据成功
    ");
          }
      }
      // 查询数据表
      printf("开始查询数据库内容
    ");
      //sqlite3_exec( db, "select * from pic;", select_callback, 0, &pErrMsg);
      if(sqlite3_exec( db, "select * from pic;", select_callback, 0, &pErrMsg)!=SQLITE_OK){
          fprintf(stderr, "insert SQL error: %s
    ", pErrMsg);
      }else{
          printf("查询失败 
    ");
      }
      // 关闭数据库
      sqlite3_close(db);
      db = 0;
      printf("数据库关闭成功!
    ");
      return 0;
    }
    
    int select_callback(void * data, int col_count, char ** col_values, char ** col_Name)
    {
      // 每条记录回调一次该函数,有多少条就回调多少次
      int i;
      for( i=0; i < col_count; i++){
        printf( "%s = %s
    ", col_Name[i], col_values[i] == 0 ? "NULL" : col_values[i] );
      }
    
      return 0;
    }
  • 相关阅读:
    React 高阶组件
    React Context(执行上下文)
    解决背景图片半透明(rgba)兼容性
    js基础复习---数组操作
    js基础复习---字符串操作
    escape()、encodeURI()、encodeURIComponent()区别详解(转)
    form data和request payload的区别(转)
    关于把时间搓转化为时间
    关于js 获取本地当前时间问题
    关于html 头部meta标签。
  • 原文地址:https://www.cnblogs.com/zzy-frisrtblog/p/5796347.html
Copyright © 2020-2023  润新知