sqlite3数据库的相关API使用
1 1:使用sqlite3_exec函数读取数据库的数据,将这些数据存入链表遍历该链表,输出“字段”=“数据”2:使用sqlite3_get_table读取数据库的数据写一个“字段" ="数据”输出的循环
1
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
#include <sqlite3.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;
typedef struct sqlite_data{
char id[20];
char name[20];
char sorce[20];
}sqlite_t;
typedef struct STU{
union {
sqlite_t date;
struct STU *tail;
};
struct STU *next;
}stu_t;
int callback(void* arg , int argc , char **argv , char **col){
stu_t * head =(stu_t*)arg;
stu_t * t = calloc(1, sizeof(stu_t));
head->tail->next = t;
strcpy(t->date.id,argv[0]);
strcpy(t->date.name,argv[1]);
strcpy(t->date.sorce,argv[2]);
head->tail = t;
t->next = NULL;
//free(t);
return 0;
}
int main(int argc, const char *argv[])
{
sqlite3 *db = NULL;
if(sqlite3_open("./student.db" , &db)!= SQLITE_OK){
printf("数据库打开失败\n");
return -1;
}
char * errmsg = NULL;
stu_t *stu = calloc(1, sizeof(stu_t));
stu->next =NULL;
stu->tail = stu;
const char *sql = "SELECT * FROM stu";
if(sqlite3_exec(db , sql , callback , stu , &errmsg)!= SQLITE_OK){
printf("errmsg:%s\n" , errmsg);
return -1;
}
sqlite3_close(db);
stu_t * p = stu->next;
while(p!=NULL){
printf("id = %s\n",p->date.id);
printf("neme = %s\n",p->date.name);
printf("sorce =%s\n ",p->date.sorce);//这个 出结果了;
p=p->next;
printf("-----------------------\n");
}
return 0;
}
2.
ubuntu@ubuntu:~/11/dataaa$ vim stu.c
ubuntu@ubuntu:~/11/dataaa$ cat stu.c
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
#include <sqlite3.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;
int main(int argc, const char *argv[])
{
sqlite3 *db = NULL;
if(sqlite3_open("./student.db" , &db)!= SQLITE_OK){
printf("数据库打开失败\n");
return -1;
}
char *errmsg = NULL;
const char * sql = "SELECT * FROM stu";
char **buf = NULL;
int recordno = 0;
int colno = 0;
if(sqlite3_get_table(db ,sql, &buf ,&recordno , &colno ,&errmsg)!= SQLITE_OK){
printf(" errmsg:%s\n" , errmsg);
return -1;
}
sqlite3_close(db);
for(int i = 0 ; i < recordno ; i++){
for(int j = 0 ; j< colno ; j++){
printf("\t%s" , *(buf+j+i*colno));
}
printf("\n");
}
return 0;
}