数据库sqlite

sqlite3基本介绍

前言:数据库简介

数据库管理系统主要是根据数据模型对数据进行储存和管理,满足三方面的要求:

  1. 真实的模拟现实世界
  2. 容易人的理解
  3. 便于在计算机上实现

数据结构,数据操作和完整性的约束是构成数据模型的三要素。常见的数据库:ORACLE,Mysql,SQLserver,Sybase,SQLite;

1.sqlite简介

sqlite是一个开源的,内嵌式的关系型数据库,目前最高版本为sqlite3,sudo apt-get install sqlite3安装。

sqlite特性:零配置,可移植,自由,可靠。。。。

sqlite数据类型:

  1. integer:带符号的整型
  2. real :8字节的浮点类型
  3. text:字符类型
  4. blob:任意类型的数据,大小无限制
  5. null:空值

2.系统命令:

  • 以’.'开头的命令
  • .quit
  • .help
  • .exit
  • .database//查看打开的数据库
  • .table //查看当前数据库中的表

3.sql命令

  • 创建数据库表(create table stu(id Integer,name char,score Integer);)//stu 表的名称,后面是结构
  • 创建数据库表(create table stu(id Integer primary,name char,score Integer);//设置主键,表示不重复
  • 查看表的结构(.schema)
  • 插入数据:(insert into stu values(1001,‘lisi’,99))
  • 查看数据(select * from stu;)
  • 部分插入(insert into stu (name,score)values(1003,“wahu”))
  • 查看部分字段:select name from stu;
  • 按条件查找数据(and操作);select * from stu where score=80 and name=“lisi”;
  • 按条件查找数据(in操作);select * from stu where score in(100,103);
  • 删除记录有条件的 : delete stu where name = “wamng”;
  • 更新的一条命令:update stu set name=‘wangwu’ where id=1001;
  • alter table stu add column address char//增加一类
  • 重命名 alter table stu1 rename to stu;
  • drop table stu//删除一张表
  • create table stu1 as select id,name,socre from stu;//复制一张表(可以用来删除一列)
  • begin;//开始一个事物 commit//提交 rollback//取消begin后的操作

4.1其他

  • length();//字符串的长度 lower()//字符串转换为小写 upper()//字符串转换为大写 语法:select 函数(列名)from 表名;
  • avg:返回列的平均值;count:返回列的行数;max:返回列的最大数;min:返回列的最小数;sum:返回列数之和
  • 约束:主键,唯一约束,检查约束。主键:primary,唯一性,应当使用在对用户没有意义的;唯一约束:unique,避免重复,多处使用;检查约束:check(条件);
  • 链接表,触发器;

5.SQlite编程接口

  1. 打开数据库

    函数原型:SQLITE_API int sqlite3_open(
                      const char *filename,   /* Database filename (UTF-8)数据库的文件名 */
                      sqlite3 **ppDb          /* OUT: SQLite db handle句柄, */
                      );
    
    返回值:成功返回SQLITE_OK,否则返回其他值。
    
  2. 准备好SQL语句对象

    函数原型:SQLITE_API int sqlite3_prepare_v2(
                       sqlite3 *db,            /* Database handle */
                       const char *zSql,       /* SQL statement, UTF-8 encoded */
                       int nByte,              /* Maximum length of zSql in bytes. */
                       sqlite3_stmt **ppStmt,  /* OUT: Statement handle */
                       const char **pzTail     /* OUT: Pointer to unused portion of zSql */
                       );
    
    返回值:成功返回SQLITE_OK,否则返回其他值。
    
  3. 执行准备好的SQL语句对象

    函数原型:SQLITE_API int sqlite3_step(sqlite3_stmt*);
    
  4. 释放资源,销毁SQL语句对象和关闭数据库连接对象

    销毁SQL语句对象函数原型:SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt);
    
    关闭数据库连接对象函数原型:SQLITE_API int sqlite3_close(sqlite3*);
    

5.执行sql语句

    int sqlite3_exec(sqlite3 *db, const char *sql, sqlite3_callback callback, void *arg,char **errmsg);
    db:调用的数据库
    sql:sql语句
    callback:回调函数,每成功执行一次sql语句就执行一次callback函数
    void *:给回调函数传的参数(这里当需要使用时,需要进行强制类型转换)
    errmsg:错误信息

6.回调函数

typedef int (*exechandler_t)(void *para,int n_column,char **column_value,char**column_name);
//1.para:sqlite3_exec传入的参数
//2.n_column:结果集的列数,3.column_value指针数组的地址,其存放一行信息中各列值的首地址4.column_name:列值对应列名的首地址

6.实例

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
int main()
{
    sqlite3 *db =NULL;
    char *err = NULL
    int ret;
    char sql[400];
	sprintf(sql,"insert into user values('%s',%s);",msg->name,msg->data);
    ret = sqlite3_open("stu.db",&db);
    if(ret !=SQLITE_OK)
    {
        printf("error\n");
        return -1;
    }
    sqlite3_exce(db,sql,loadinfo,NULL,&err);
    if(err != NULL)
    {
        printf("err:%s\n",err);
    }
    sqlite3_close(db);
    return 0;
}
int loadinfo( void arg,int n_column,char **value,char**name)
{
    int i;
    for(i=0;i<n_column;i++)
    {
        printf("%s= %s\n",name[i],val[i]);
    }
    return SQLITE_OK;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值