C 扩展库 - sqlite3 API CRUD
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的更多相关文章
- C 扩展库 - sqlite3 API
sqlite3 API Summary sqlite3 The database connection object. Created by sqlite3_open() and destroyed ...
- C 扩展库 - mysql API CRUD
CRUD table create table if not exists `student` ( `id` int auto_increment, `name` varchar(16) not nu ...
- C 扩展库 - mysql API
MySQL API C API Data Structures MYSQL This structure represents handler for one database connection. ...
- C 扩展库 - mysql API general outline
Application programs should use this general outline for interacting with MySQL Initialize the MySQL ...
- 【小结】有关mysql扩展库和mysqli扩展库的crud操作封装
现阶段php如果要操作mysql数据库 php给我们提供了3套库 1.mysql扩展库 面向过程操作 2.mysqli扩展库 面向对象操作和面向过程操作并存 安全性和效率高于mysql扩展库 ...
- 安装php扩展库
无法加载'pdo_mysql' ,因为需要pdo这个module.PHP Warning: Cannot load module 'pdo_mysql' because required module ...
- 『Python CoolBook』C扩展库_其一_用法讲解
不依靠其他工具,直接使用Python的扩展API来编写一些简单的C扩展模块. 本篇参考PythonCookbook第15节和Python核心编程完成,值得注意的是,Python2.X和Python3. ...
- php数据库编程---mysql扩展库
1, Java有一种方式操作数据库, PHP有三种方式来操作mysql数据库.(1)mysql扩展库:(2)mysqli扩展库:(3)pdo: 2, mysql扩展库和mysql数据库区别 3, my ...
- GLEW扩展库【转】
http://blog.sina.com.cn/s/blog_4aff14d50100ydsy.html 一.关于GLEW扩展库: GLEW是一个跨平台的C++扩展库,基于OpenGL图形接口.使用O ...
随机推荐
- 【树状DP】星象仪
题目描述 在寂寞的夜里,星象仪是非常浪漫的东西.但是,你作为一个精神稍微有点不太正常的Geek,把原本正常的星象仪改造得像电报发送器一样.当然,你这个的构造还要更加奇葩一点.具体来说,你的星象仪是一棵 ...
- 《全民无双》锁链刀光程序生成算法,即U3D——刀光轨迹插件的改进
<全民无双>手游12月17日上线登录APPSTore付费榜前十,首先特别恭喜还在<全民无双>坚持奋战的老同事们,顺便技术分享一下以前参与项目时的工作 锁链刀软武器刀光轨迹 之前 ...
- firedac odbc sql server driver连接占线导致另一个hstmt
firedac odbc sql server driver连接占线导致另一个hstmt 原因:FDQuery.FetchOptions.Mode=fmOnDemand.好像是为了性能问题,不设置则默 ...
- 开源WebGIS实施方案(三):Shapefile数据导入到PostGIS
PostGIS新版中提供了一个可视化的工具,用于Shapefile数据的导入和导出,极大的方便了使用者的操作. 创建空间数据库 以具有创建用户权限的账号登录pgAdminIII,连接到数据库 创建一个 ...
- NET npoi 合并单元值处理
获取sheet中存在合并单元格总数,循环绑定值 // 得到一个sheet中有多少个合并单元格 int sheetMergeCount = sheet.NumMergedRegions; ; i < ...
- leetcode 回文数
判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...
- Lambda 表达式浅谈- 01
已经有一段时间没有发布博文了... 今天就写一写lambda的一些简单的使用方法 Lambda 在Msdn 上的描述: Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 ...
- Java中的内部类(二)成员内部类
Java中的成员内部类(实例内部类):相当于类中的一个成员变量,下面通过一个例子来观察成员内部类的特点 public class Outer { //定义一个实例变量和一个静态变量 private i ...
- 深入了解java虚拟机(JVM) 第八章 常见的jvm调优策略
一般来说,jvm的调优策略是没有一种固定的方法,只有依靠我们的知识和经验来对项目中出现的问题进行分析,正如吉德林法则那样当你已经把问题清楚写出来,就已经解决了一半.虽然JVM调优中没有固定的策略,但是 ...
- spring指导的index.html在spring文件夹中的位置