CRUD

struct student

typedef struct STUDENT {
unsigned int id;
unsigned char name[16];
unsigned int age;
unsigned char address[64];
} Student;

create table

CREATE TABLE IF NOT EXISTS student(
`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
`name` TEXT NOT NULL,
`age` INT NOT NULL,
`address` TEXT NOT NULL
)
int createTable(sqlite3 *db) {
char *result = {0};
char *sql = "CREATE TABLE IF NOT EXISTS student("\
"`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," \
"`name` TEXT NOT NULL," \
"`age` INT NOT NULL," \
"`address` TEXT NOT NULL);";
int r = sqlite3_exec(db, sql, NULL, 0, &result);
if (r == SQLITE_OK) {
printf("create table success!\n");
}
return r;
}

generate student data

void generateStudent(Student *student, int count) {
// int count = 100;
// Student student[count];
int i = 0;
for (; i < count; i++) {
unsigned char name[16] = {0};
unsigned char address[64] = {0};
sprintf((char *) name, "zing%d", i);
sprintf((char *) address, "jiangsu-wuxi-%d", i);
student[i].id = (unsigned int) (1000 + i);
memcpy(student[i].name, name, sizeof(name));
student[i].age = (unsigned int) (10 + i);
memcpy(student[i].address, address, sizeof(address));
printf("%d-%s-%d-%s\n", student[i].id, student[i].name, student[i].age, student[i].address);
}
// printf("----------==ok---------\n");
// for (i = 0; i < count; ++i) {
// printf("id:%d,name:%s,age:%d,address:%s\n", student[i].id, student[i].name, student[i].age, student[i].address);
// }
}

insert table

int insertTable(sqlite3 *db, Student student) {
char sql[128], *result = {0};
sprintf(sql, "INSERT INTO student (`name`,`age`,`address`) VALUES('%s','%d','%s')", student.name, student.age,
student.address);
int rc = sqlite3_exec(db, sql, NULL, 0, &result);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", result);
sqlite3_free(result);
} else {
printf("insert ok!\n");
}
return rc;
}

query table 1

int queryTable(sqlite3 *db, Student *student, int index, int count) {
char sql[128];
if (count > 10)
count = 10;
sprintf(sql, "select * from student order by id desc limit %d,%d", index, count);
printf("%s\n", sql);
char *err = NULL;
int col, row, i, j = 0;
char **result;
int rs = sqlite3_get_table(db, sql, &result, &row, &col, &err);
if (rs == SQLITE_OK) {
printf("row %d, col %d\n", row, col);
// id-name-age-address
// printf("%s-%s-%s-%s\n", result[0], result[1], result[2], result[3]);
// 1-zing0-10-jiangsu-wuxi-0
// printf("%s-%s-%s-%s\n", result[4], result[5], result[6], result[7]);
// printf("%s-%s-%s-%s\n", result[1120], result[1121], result[1122], result[1123]);
// for (i = 0; i < (row + 1) * col; i++) {
// printf("%s\n", result[i]);
// }
for (i = 0; i < (row + 1) * col; i++) {
if (i % col == 0 && i >= col) {
student[j].id = (unsigned int) atoi(result[i]);
memcpy(student[j].name, result[i + 1], sizeof(student[i].name));
student[j].age = (unsigned int) atoi(result[i + 2]);
memcpy(student[j].address, result[i + 3], sizeof(student[i].address));
// printf("id:%d,name:%s,age:%d,address:%s\n", student[j].id, student[j].name, student[j].age, student[j].address);
// printf("id:%s,name:%s,age:%s,address:%s\n", result[i], result[i + 1], result[i + 2], result[i + 3]);
j++;
}
}
} else {
printf("error\n");
}
return rs;
}

query table 2

/*
* @param stu
* @param argc
* @param argv
* @param azColName
* @return
*/
int queryCallback(void *stu, int argc, char **argv, char **azColName) {
static int j;
Student *student = stu;
student[j].id = (unsigned int) atoi(argv[0]);
memcpy(student[j].name, argv[1], sizeof(student[j].name));
student[j].age = (unsigned int) atoi(argv[2]);
memcpy(student[j].address, argv[3], sizeof(student[j].address));
j++;
// printf("\n");
// for (i = 0; i < argc; i++) {
// printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
// }
// printf("argc-->%d\n",argc);
return 0;
} int query(sqlite3 *db, Student *student, int index, int count) {
char sql[128];
sprintf(sql, "select * from student order by id desc limit %d,%d;", index, count);
char **err = NULL;
return sqlite3_exec(db, sql, queryCallback, student, err);
}

update table

int update(sqlite3 *db, Student student) {

    char sql[128];
sprintf(sql, "UPDATE student set address = '%s' where ID=%d;", student.address, student.id);
char *err = NULL;
/* Execute SQL statement */
int rc = sqlite3_exec(db, sql, NULL, (void *) 0, &err);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", err);
sqlite3_free(err);
} else {
fprintf(stdout, "Operation done successfully\n");
}
return rc;
}
int update2(sqlite3 *db, int id, char *address) { char sql[128];
sprintf(sql, "UPDATE student set address = '%s' where ID=%d;", address, id);
char *err = NULL;
/* Execute SQL statement */
int rc = sqlite3_exec(db, sql, NULL, (void *) 0, &err);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", err);
sqlite3_free(err);
} else {
fprintf(stdout, "Operation done successfully\n");
}
return rc;
} int update3(sqlite3 *db, void *data) {
Student *student = (Student *) data;
printf("--> %d\n", student->id);
printf("--> %s\n", student->address);
char sql[128];
sprintf(sql, "UPDATE student set address = '%s' where ID=%d;", student->address, student->id);
char *err = NULL;
/* Execute SQL statement */
int rc = sqlite3_exec(db, sql, NULL, (void *) 0, &err);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", err);
sqlite3_free(err);
} else {
fprintf(stdout, "Operation done successfully\n");
}
return rc;
}

main test

int main() {
int i = 0;
const char *name = "test.db";
sqlite3 *db;
int count = 10;
Student student[count]; int r = sqlite3_open(name, &db);
if (r == 0) {
printf("open sb success\n");
}
// generateStudent(student, count);
// printf("----------==ok---------\n");
// for (i = 0; i < count; ++i) {
// printf("id:%d,name:%s,age:%d,address:%s\n", student[i].id, student[i].name, student[i].age, student[i].address);
// }
// createTable(db);
// for (i = 0; i < count; ++i) {
// insertTable(db, student[i]);
// }
if (queryTable(db, student, 2, 10) == SQLITE_OK) {
for (i = 0; i < count; ++i) {
printf("id:%d,name:%s,age:%d,address:%s\n", student[i].id, student[i].name, student[i].age,
student[i].address);
}
} Student stu;
stu.id = 68;
char *address = "jiangsu-xuzhou";
memcpy(stu.address, address, strlen(address));
update(db, stu);
queryTable(db, student, 0, 10);
for (i = 0; i < count; ++i) {
printf("id:%d,name:%s,age:%d,address:%s\n", student[i].id, student[i].name, student[i].age,
student[i].address);
}
update2(db, 69, address);
queryTable(db, student, 0, 10);
for (i = 0; i < count; ++i) {
printf("id:%d,name:%s,age:%d,address:%s\n", student[i].id, student[i].name, student[i].age,
student[i].address);
}
address = "jiangsu-suzhou";
stu.id = 70;
memcpy(stu.address, address, strlen(address));
update3(db, &stu);
if (queryTable(db, student, 0, 10)) {
for (i = 0; i < count; ++i) {
printf("update3-> id:%d,name:%s,age:%d,address:%s\n", student[i].id, student[i].name, student[i].age,
student[i].address);
}
}
memset(student, 0, sizeof(student));
if (query(db, student, 0, 10) == SQLITE_OK) {
for (i = 0; i < count; ++i) {
printf("update-> id:%d,name:%s,age:%d,address:%s\n", student[i].id, student[i].name, student[i].age,
student[i].address);
}
}
sqlite3_close(db);
return 0;
}

all code

//
// Created by zhangrongxiang on 2018/2/23 14:10
// File sql
// #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlite3.h> int queryCallback(void *stu, int argc, char **argv, char **azColName); typedef struct STUDENT {
unsigned int id;
unsigned char name[16];
unsigned int age;
unsigned char address[64];
} Student; void generateStudent(Student *student, int count) {
// int count = 100;
// Student student[count];
int i = 0;
for (; i < count; i++) {
unsigned char name[16] = {0};
unsigned char address[64] = {0};
sprintf((char *) name, "zing%d", i);
sprintf((char *) address, "jiangsu-wuxi-%d", i);
student[i].id = (unsigned int) (1000 + i);
memcpy(student[i].name, name, sizeof(name));
student[i].age = (unsigned int) (10 + i);
memcpy(student[i].address, address, sizeof(address));
printf("%d-%s-%d-%s\n", student[i].id, student[i].name, student[i].age, student[i].address);
}
// printf("----------==ok---------\n");
// for (i = 0; i < count; ++i) {
// printf("id:%d,name:%s,age:%d,address:%s\n", student[i].id, student[i].name, student[i].age, student[i].address);
// }
} int createTable(sqlite3 *db) {
char *result = {0};
char *sql = "CREATE TABLE IF NOT EXISTS student("\
"`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," \
"`name` TEXT NOT NULL," \
"`age` INT NOT NULL," \
"`address` TEXT NOT NULL);";
// *table = *sql;
int r = sqlite3_exec(db, sql, NULL, 0, &result);
if (r == SQLITE_OK) {
printf("create table success!\n");
}
return r;
} int insertTable(sqlite3 *db, Student student) {
char sql[128], *result = {0};
sprintf(sql, "INSERT INTO student (`name`,`age`,`address`) VALUES('%s','%d','%s')", student.name, student.age,
student.address);
int rc = sqlite3_exec(db, sql, NULL, 0, &result);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", result);
sqlite3_free(result);
} else {
printf("insert ok!\n");
}
return rc;
} /*
* @param stu
* @param argc
* @param argv
* @param azColName
* @return
*/
int queryCallback(void *stu, int argc, char **argv, char **azColName) {
static int j;
Student *student = stu;
student[j].id = (unsigned int) atoi(argv[0]);
memcpy(student[j].name, argv[1], sizeof(student[j].name));
student[j].age = (unsigned int) atoi(argv[2]);
memcpy(student[j].address, argv[3], sizeof(student[j].address));
j++;
// printf("\n");
// for (i = 0; i < argc; i++) {
// printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
// }
// printf("argc-->%d\n",argc);
return 0;
} int query(sqlite3 *db, Student *student, int index, int count) {
char sql[128];
sprintf(sql, "select * from student order by id desc limit %d,%d;", index, count);
char **err = NULL;
return sqlite3_exec(db, sql, queryCallback, student, err);
} int queryTable(sqlite3 *db, Student *student, int index, int count) {
char sql[128];
if (count > 10)
count = 10;
sprintf(sql, "select * from student order by id desc limit %d,%d", index, count);
printf("%s\n", sql);
char *err = NULL;
int col, row, i, j = 0;
char **result;
int rs = sqlite3_get_table(db, sql, &result, &row, &col, &err);
if (rs == SQLITE_OK) {
printf("row %d, col %d\n", row, col);
// id-name-age-address
// printf("%s-%s-%s-%s\n", result[0], result[1], result[2], result[3]);
// 1-zing0-10-jiangsu-wuxi-0
// printf("%s-%s-%s-%s\n", result[4], result[5], result[6], result[7]);
// printf("%s-%s-%s-%s\n", result[1120], result[1121], result[1122], result[1123]);
// for (i = 0; i < (row + 1) * col; i++) {
// printf("%s\n", result[i]);
// }
for (i = 0; i < (row + 1) * col; i++) {
if (i % col == 0 && i >= col) {
student[j].id = (unsigned int) atoi(result[i]);
memcpy(student[j].name, result[i + 1], sizeof(student[i].name));
student[j].age = (unsigned int) atoi(result[i + 2]);
memcpy(student[j].address, result[i + 3], sizeof(student[i].address));
// printf("id:%d,name:%s,age:%d,address:%s\n", student[j].id, student[j].name, student[j].age, student[j].address);
// printf("id:%s,name:%s,age:%s,address:%s\n", result[i], result[i + 1], result[i + 2], result[i + 3]);
j++;
}
}
} else {
printf("error\n");
}
return rs;
} int update(sqlite3 *db, Student student) { char sql[128];
sprintf(sql, "UPDATE student set address = '%s' where ID=%d;", student.address, student.id);
char *err = NULL;
/* Execute SQL statement */
int rc = sqlite3_exec(db, sql, NULL, (void *) 0, &err);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", err);
sqlite3_free(err);
} else {
fprintf(stdout, "Operation done successfully\n");
}
return rc;
} int update2(sqlite3 *db, int id, char *address) { char sql[128];
sprintf(sql, "UPDATE student set address = '%s' where ID=%d;", address, id);
char *err = NULL;
/* Execute SQL statement */
int rc = sqlite3_exec(db, sql, NULL, (void *) 0, &err);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", err);
sqlite3_free(err);
} else {
fprintf(stdout, "Operation done successfully\n");
}
return rc;
} int update3(sqlite3 *db, void *data) {
Student *student = (Student *) data;
printf("--> %d\n", student->id);
printf("--> %s\n", student->address);
char sql[128];
sprintf(sql, "UPDATE student set address = '%s' where ID=%d;", student->address, student->id);
char *err = NULL;
/* Execute SQL statement */
int rc = sqlite3_exec(db, sql, NULL, (void *) 0, &err);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", err);
sqlite3_free(err);
} else {
fprintf(stdout, "Operation done successfully\n");
}
return rc;
} int main() {
int i = 0;
const char *name = "test.db";
sqlite3 *db;
int count = 10;
Student student[count]; int r = sqlite3_open(name, &db);
if (r == 0) {
printf("open sb success\n");
}
// generateStudent(student, count);
// printf("----------==ok---------\n");
// for (i = 0; i < count; ++i) {
// printf("id:%d,name:%s,age:%d,address:%s\n", student[i].id, student[i].name, student[i].age, student[i].address);
// }
// createTable(db);
// for (i = 0; i < count; ++i) {
// insertTable(db, student[i]);
// }
if (queryTable(db, student, 2, 10) == SQLITE_OK) {
for (i = 0; i < count; ++i) {
printf("id:%d,name:%s,age:%d,address:%s\n", student[i].id, student[i].name, student[i].age,
student[i].address);
}
} Student stu;
stu.id = 68;
char *address = "jiangsu-xuzhou";
memcpy(stu.address, address, strlen(address));
update(db, stu);
queryTable(db, student, 0, 10);
for (i = 0; i < count; ++i) {
printf("id:%d,name:%s,age:%d,address:%s\n", student[i].id, student[i].name, student[i].age,
student[i].address);
}
update2(db, 69, address);
queryTable(db, student, 0, 10);
for (i = 0; i < count; ++i) {
printf("id:%d,name:%s,age:%d,address:%s\n", student[i].id, student[i].name, student[i].age,
student[i].address);
}
address = "jiangsu-suzhou";
stu.id = 70;
memcpy(stu.address, address, strlen(address));
update3(db, &stu);
if (queryTable(db, student, 0, 10)) {
for (i = 0; i < count; ++i) {
printf("update3-> id:%d,name:%s,age:%d,address:%s\n", student[i].id, student[i].name, student[i].age,
student[i].address);
}
}
memset(student, 0, sizeof(student));
if (query(db, student, 0, 10) == SQLITE_OK) {
for (i = 0; i < count; ++i) {
printf("update-> id:%d,name:%s,age:%d,address:%s\n", student[i].id, student[i].name, student[i].age,
student[i].address);
}
}
sqlite3_close(db);
return 0;
}

See

All rights reserved

C 扩展库 - sqlite3 API CRUD的更多相关文章

  1. C 扩展库 - sqlite3 API

    sqlite3 API Summary sqlite3 The database connection object. Created by sqlite3_open() and destroyed ...

  2. C 扩展库 - mysql API CRUD

    CRUD table create table if not exists `student` ( `id` int auto_increment, `name` varchar(16) not nu ...

  3. C 扩展库 - mysql API

    MySQL API C API Data Structures MYSQL This structure represents handler for one database connection. ...

  4. C 扩展库 - mysql API general outline

    Application programs should use this general outline for interacting with MySQL Initialize the MySQL ...

  5. 【小结】有关mysql扩展库和mysqli扩展库的crud操作封装

    现阶段php如果要操作mysql数据库 php给我们提供了3套库 1.mysql扩展库   面向过程操作 2.mysqli扩展库  面向对象操作和面向过程操作并存  安全性和效率高于mysql扩展库 ...

  6. 安装php扩展库

    无法加载'pdo_mysql' ,因为需要pdo这个module.PHP Warning: Cannot load module 'pdo_mysql' because required module ...

  7. 『Python CoolBook』C扩展库_其一_用法讲解

    不依靠其他工具,直接使用Python的扩展API来编写一些简单的C扩展模块. 本篇参考PythonCookbook第15节和Python核心编程完成,值得注意的是,Python2.X和Python3. ...

  8. php数据库编程---mysql扩展库

    1, Java有一种方式操作数据库, PHP有三种方式来操作mysql数据库.(1)mysql扩展库:(2)mysqli扩展库:(3)pdo: 2, mysql扩展库和mysql数据库区别 3, my ...

  9. GLEW扩展库【转】

    http://blog.sina.com.cn/s/blog_4aff14d50100ydsy.html 一.关于GLEW扩展库: GLEW是一个跨平台的C++扩展库,基于OpenGL图形接口.使用O ...

随机推荐

  1. [翻译]Writing Custom Report Components 编写自定义报表组件

    摘要:简单介绍了如何编写一个FastReport的组件,并且注册到FastReport中使用.   Writing Custom Report Components 编写自定义报表组件 FastRep ...

  2. linux 输出

    在学习Linux的过程中,常会看到一些终端命令或者程序中有">/dev/null 2>&1 "出现,由于已经遇到了好几次了,为了理解清楚,不妨花点时间百度或者g ...

  3. c# 利用t4模板,自动生成Model类

    我们在用ORM(比如dapper)的时候,很多时候都需要自己写Model层(当然也有很多orm框架自带了这种功能,比如ef),特别是表里字段比较多的时候,一个Model要写半天,而且Model如果用于 ...

  4. 限制html文本框input只能输入数字和小数点

    代码: <input type="text" class="txt" name="qty" value="" on ...

  5. Enabling Remote Errors in SSRS

    January 18, 2011 By default the remote errors property in SQL Server Reporting Services is set to fa ...

  6. 如何建立git 远程仓库

    第1步:创建SSH Key.在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步.如果没有,打开Shell ...

  7. WebService-php- 2(17)

    wsdl实例 <?xml version ='1.0' encoding ='UTF-8' ?> <definitions targetNamespace='http://local ...

  8. 【Oracle 12c】最新CUUG OCP-071考试题库(55题)

    55.(13-3) choose the best answer: Which statement is true regarding the SESSION_PRIVS dictionary vie ...

  9. “全栈2019”Java第一百一十一章:内部类可以被覆盖吗?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  10. Get 和 Post 方法的选择和URL的设计

    原文链接:http://yifei.me/note/540 HTTP 中常用的方法有 GET/POST/PUT/DELETE 等,在设计API或者表单的时候我们需要选择合适的方法.一般有两种方案: 只 ...