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. 【树状DP】星象仪

    题目描述 在寂寞的夜里,星象仪是非常浪漫的东西.但是,你作为一个精神稍微有点不太正常的Geek,把原本正常的星象仪改造得像电报发送器一样.当然,你这个的构造还要更加奇葩一点.具体来说,你的星象仪是一棵 ...

  2. 《全民无双》锁链刀光程序生成算法,即U3D——刀光轨迹插件的改进

    <全民无双>手游12月17日上线登录APPSTore付费榜前十,首先特别恭喜还在<全民无双>坚持奋战的老同事们,顺便技术分享一下以前参与项目时的工作 锁链刀软武器刀光轨迹 之前 ...

  3. firedac odbc sql server driver连接占线导致另一个hstmt

    firedac odbc sql server driver连接占线导致另一个hstmt 原因:FDQuery.FetchOptions.Mode=fmOnDemand.好像是为了性能问题,不设置则默 ...

  4. 开源WebGIS实施方案(三):Shapefile数据导入到PostGIS

    PostGIS新版中提供了一个可视化的工具,用于Shapefile数据的导入和导出,极大的方便了使用者的操作. 创建空间数据库 以具有创建用户权限的账号登录pgAdminIII,连接到数据库 创建一个 ...

  5. NET npoi 合并单元值处理

    获取sheet中存在合并单元格总数,循环绑定值 // 得到一个sheet中有多少个合并单元格 int sheetMergeCount = sheet.NumMergedRegions; ; i < ...

  6. leetcode 回文数

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...

  7. Lambda 表达式浅谈- 01

    已经有一段时间没有发布博文了... 今天就写一写lambda的一些简单的使用方法 Lambda 在Msdn 上的描述: Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 ...

  8. Java中的内部类(二)成员内部类

    Java中的成员内部类(实例内部类):相当于类中的一个成员变量,下面通过一个例子来观察成员内部类的特点 public class Outer { //定义一个实例变量和一个静态变量 private i ...

  9. 深入了解java虚拟机(JVM) 第八章 常见的jvm调优策略

    一般来说,jvm的调优策略是没有一种固定的方法,只有依靠我们的知识和经验来对项目中出现的问题进行分析,正如吉德林法则那样当你已经把问题清楚写出来,就已经解决了一半.虽然JVM调优中没有固定的策略,但是 ...

  10. spring指导的index.html在spring文件夹中的位置