SQLite简介——2

简单的DML

  1. 查询语句
      • select * from 表名;
    • select 字段名 from 表名;
    • select 表名.字段名 from 表名;
    • select 表名.字段名 from 表名 as 别名;
    • select 字段名 from 表名 where 查询条件;
      • where 后面的语句的格式包括了SQL运算符,SQL通配符,逻辑运算
    • SQL通配符 ==like==
    • _ 表示一个字符 a like ‘张_’;
    • % 表示任意长度的字符串
    • [] 限制字符的取值范围 [0-9a-z]0到9,a到z取值范围——》sqlite3不支持
    • Sql运算符
    • <> 不等于
    • where 语句
    • between a and b
    • order by 子句
    • asc 升序(默认)
    • desc 降序
    • limit 子句
    • 限定数据输出的行范围
    • 优点: 节约内存 ,速度快
    • 格式: limit 4 查询结果显示4条
    • limit 3 offset 3 如果总共的数据有6个,那么第一页是1-3,第二页就从4-6.offset,指定偏移量,偏移量从0开始
    • offset这个偏移量就是翻页数从第几个开始。
    • distinct子句
    • 将重复的行合并,确保每一行都是唯一的。==只能对一列生效。==
  2. update 更新记录
    • UPDATE <表名> SET <列名 = 更新值> [WHERE <更新条件>]
    • 不能用于字符串的拼接
  3. 内连接
    • select student.*,score.Score from student,score where student.No=score.No;
    • 与上面的相等 select student.*,score.Score from student inner join score on student.No=score.No;
  4. 左外连接
    • 以左边的为基准,输出左边表的全部数据,右边的表根据匹配的输出。
  5. 右连接
    • 不支持右连接
  6. 自连接
### 关于 SQLite3 的 `mprintf` 函数 SQLite 提供了一组类似于标准 C 库中的 printf 系列函数的功能,这些功能被封装成 `mprintf` 家族函数。以下是关于 `mprintf` 函数的一些重要细节: #### 功能描述 SQLite 使用 `mprintf` 来动态生成字符串并将其存储到堆上。这使得开发者可以方便地构建 SQL 查询语句或其他复杂的字符串表达式[^1]。 #### 常见形式 SQLite 支持多种版本的 `mprintf` 函数,具体如下: - **`sqlite3_mprintf(const char *format, ...)`**: 这是一个可变参数函数,它接受一个格式化字符串以及相应的参数列表,并返回一个新分配的字符串缓冲区。 - **`sqlite3_vmprintf(const char *format, va_list ap)`**: 类似于 `vsnprintf`,但它会自动管理内存分配过程。 - **`sqlite3_snprintf(int size, char *buffer, const char *format, ...)`**: 将结果写入指定大小的缓冲区内,防止溢出。 当调用上述任何一个函数时,如果成功,则返回指向已分配内存区域的一个指针;否则返回 NULL 表明发生错误(通常是因为内存不足)。需要注意的是,在使用完毕之后应该通过 `sqlite3_free()` 显式释放由这些函数所创建的对象以避免泄露资源。 #### 示例代码展示如何安全有效地利用此特性来构造查询条件部分: ```c #include <stdio.h> #include "sqlite3.h" int main(void){ sqlite3 *db; int rc = sqlite3_open("example.db", &db); if( rc ){ fprintf(stderr,"Can't open database: %s\n", sqlite3_errmsg(db)); return -1; } // Example of using sqlite3_mprintf to build a query string safely. double valueToInsert = 987.654; const char* sqlQueryTemplate = "INSERT INTO testTable (valueColumn) VALUES (%f);"; char *zSql = sqlite3_mprintf(sqlQueryTemplate,valueToInsert); if(zSql != NULL){ rc = sqlite3_exec(db,zSql,NULL,NULL,NULL); if(rc != SQLITE_OK ){ fprintf(stderr,"%s execution failed:%s\n", zSql ,sqlite3_errmsg(db)); } sqlite3_free(zSql); // Free memory after use. }else{ puts("Memory allocation failure."); } sqlite3_close(db); } ``` 以上程序片段展示了怎样借助 `sqlite3_mprintf` 构建含有浮点数值插入操作的安全SQL指令。注意每次完成对该变量的操作后都及时进行了清理处理以防潜在风险。 #### 解决常见问题 有时可能会遇到一些与 `mprintf` 相关的问题,比如忘记释放内存或者传入非法参数造成崩溃等情况。因此建议遵循最佳实践指南去应用它们,即始终确认输入数据的有效性和合法性,并且记得适时销毁不再使用的对象实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值