目录

1.数据库的命令行操作(SQlite)

2.数据库的C语言操作

3.在线词典过程(数据库,网络并发,进程,C高级)

 

操作的意义:对数据的创建,增删改查

 1, 数据库的安装

        sudo dpkg -i  *.deb(需要先下载安装包) 

       推荐: 在线安装:sudo apt-get install libsqlite3-dev     sudo apt-get install sqlite3

 

 

    2, 数据库命令

           1)系统命令 , 都以'.'开头

                .exit 
                 .quit
                 .table   查看表
                 .schema  查看表的结构

        2)sql语句, 都以‘;’结尾

        1-- 创建一张表
            create table stuinfo(id integer, name text, age integer, score float);
        
        2-- 插入一条记录
            insert into stu values(1001, 'zhangsan', 18, 80);
            insert into stu(id, name) values(1002, 'lisi');     //部分字段插入

 

 

        3-- 查看数据库记录
            select * from stuinfo;
            select * from stuinfo where score = 80;
            select * from stuinfo where score = 80 and name= 'zhangsan';
            select * from stuinfo where score = 80 or name='wangwu';
            select name,score from stuinfo;  查询指定的字段
            select * from stuinfo where score >= 85 and score < 90;

 

 

 

        4-- 删除一条记录
            delete from stuinfo where id=1003 and name='zhangsan';

 

        5-- 更新一条记录
            update stuinfo set age=20 where id=1003;
            update stuinfo set age=30, score = 82 where id=1003;

 

        6-- 删除一张表
            drop table stuinfo;

        7-- 增加一列
            alter table stuinfo add column sex char;

 

        8-- 删除一列(三步走)
            create table stu as select id, name, score from stuinfo;
            drop table stuinfo;
            alter table stu rename to stuinfo;

 

     数据库设置主键:
     create table info(id integer primary key autoincrement, name vchar);

 2,,基于C语言的,数据库操作

         接口库函数:SQlite官网

Øint   sqlite3_open(char  *path,   sqlite3 **db)
功能:打开sqlite数据库
path:数据库文件路径
db:指向sqlite句柄的指针
返回值:成功返回0,失败返回错误码(非零值)


    返回值:成功为0 SQLITE_OK ,出错 错误码

    if(sqlite3_ope (DATABASE,&db)!= SQLITE_OK){
        printf("%s\n",sqlite3_errmsg(db));
        return -1;
    }else{
        printf("da kai cheng gong\n");
    }
Øint   sqlite3_close(sqlite3 *db);
功能:关闭sqlite数据库        
返回值:成功返回0,失败返回错误码
Øconst  char  *sqlite3_errmg(sqlite3 *db);        
返回值:返回错误信息

ØTypedef  int (*sqlite3_callback)(void *, int,
Øchar **, char **);
ØInt sqlite3_exec(sqlite3 *db, const  char  *sql, sqlite3_callback callback, void *, char **errmsg);
功能:执行SQL操作
db:数据库句柄
sqlSQL语句
callback:回调函数
errmsg:错误信息指针的地址
返回值:成功返回0,失败返回错误码
    sprintf(sql,"insert into stu values(%d,'%s','%s',%d)",bianhao,xingbie,xingming,fenshu);
    if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK){
        printf("%s\n",errmsg);
    }else{
        printf("cha ru cheng gong.\n");
    }

查询回调函数
int (*callback)(void* arg,int ncolumns ,char** f_value,char** f_name),  /* Callback function */
功能:查询语句执行之后,会回调此函数
参数:arg   接收sqlite3_exec 传递来的参数
      ncolumns 列数
      f_value 列的值得地址
      f_name   列的名称
返回值:0,

Øtypedef  int (*sqlite3_callback)(void *para, int f_num, char **f_value, char **f_name);
功能:每找到一条记录自动执行一次回调函数
para:传递给回调函数的参数
f_num:记录中包含的字段数目
f_value:包含每个字段值的指针数组
f_name:包含每个字段名称的指针数组
返回值:成功返回0,失败返回-1

Ø不使用回调函数执行SQL语句
Øint   sqlite3_get_table(sqlite3 *db, const  char  *sql,  char ***resultpint*nrowint *ncolumn, char **errmsg);
功能:执行SQL操作
db:数据库句柄
sqlSQL语句
resultp:用来指向sql执行结果的指针
nrow:满足条件的记录的数目
ncolumn:每条记录包含的字段数目
errmsg:错误信息指针的地址
返回值:成功返回0,失败返回错误码

 

学生的分数管理系统

 

 

#include<stdio.h>
#include<stdlib.h>

#include<sqlite3.h>
#include<unistd.h>

#define DATABASE "stu.db"


int do_charu(sqlite3 *db){

    char sql[128]={};
    int bianhao;
    char xingming[32]={};
    char xingbie;
    int fenshu;
    char *errmsg;

    printf("shu ru bian hao: ");
    scanf("%d",&bianhao);
    getchar();

    printf("shu ru xingming: ");
    scanf("%s",xingming);
    getchar();

    printf("shu ru xing bie(nan:1  nv:0): ");
    scanf("%c",&xingbie);
    getchar();

    printf("shu ru fen shu: ");
    scanf("%d",&fenshu);
    getchar();

    sprintf(sql,"insert into stu values(%d,'%s','%c',%d)",bianhao,xingming,xingbie,fenshu);
    if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK){
        printf("%s\n",errmsg);
    }else{
        printf("cha ru cheng gong.\n");
    }

    return 0;
}

int do_shanchu(sqlite3 *db){

    int bianhao;
    char sql[128]={};
    char *errmsg;

    printf("shu ru bian hao: ");
    scanf("%d",&bianhao);

    sprintf(sql,"delete from stu where bianhao=%d",bianhao);
    if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK){
        printf("%s\n",errmsg);
    }else{
        printf("shan chu cheng gong.\n");
    }
return 0;
}

int callback(void *arg, int f_num, char ** f_value, char ** f_name){
    int i=0;
    for(i=0;i<f_num;i++){
        printf("%-11s",f_value[i]);
    }

    printf("+++++++++++++++++++++++++++++++++++\n");
    putchar(10);
    return 0;
}

int do_chaxun(sqlite3 *db){

    char *errmsg;
    char sql[128]={};

    sprintf(sql,"select *from stu;");
    if(sqlite3_exec(db,sql,callback,NULL,&errmsg) != SQLITE_OK){
        printf("%s\n",errmsg);
    }else{
        printf("cha xun cheng gong.\n");
    }
return 0;
}

int do_chaxun1(sqlite3 *db){
    char *errmsg;
    char ** resultp;
    int nrow;
    int ncolumn;

	if(sqlite3_get_table(db, "select * from stu", &resultp, &nrow, &ncolumn, &errmsg) != SQLITE_OK)
	{
		printf("%s\n", errmsg);
		return -1;
	}
	else
	{
		printf("query done.\n");
	}

	int i = 0;
	int j = 0;
	int index = ncolumn;

	for(j = 0; j < ncolumn; j++)
	{
		printf("%-10s ", resultp[j]);
	}
	putchar(10);

	for(i = 0; i < nrow; i++)
	{
		for(j = 0; j < ncolumn; j++)
		{
			printf("%-10s ", resultp[index++]);
		}
		putchar(10);
	}

return 0;

}


int do_gengxin(sqlite3 *db){

    char *errmsg;
    char sql[128]={};
    int bianhao;
    int fenshu;

    printf("shu ru bian hao: ");
    scanf("%d",&bianhao);
    getchar();

    printf("shu ru genggai de fen shu: ");
    scanf("%d",&fenshu);
    getchar();


    sprintf(sql,"update stu set fenshu=%d where bianhao =%d",fenshu ,bianhao);
    if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK){
        printf("%s\n",errmsg);
    }else{
        printf("geng xin wan cheng.\n");
    }
return 0;
}

int main(int argc,const char *argv[]){
    sqlite3 *db;
    char *errmsg;
    int n=0;

    if(sqlite3_open (DATABASE,&db)!= SQLITE_OK){
        printf("%s\n",sqlite3_errmsg(db));
        return -1;
    }else{
        printf("da kai cheng gong\n");
    }

    if(sqlite3_exec(db,"create table if not exists stu(bianhao int,xingming char,xingbie char,fenshu int);",NULL,NULL,&errmsg) != SQLITE_OK){
        printf("%s\n",errmsg);
    }else{
        printf("chuang jian cheng gong.\n");
    }

    while(1){
        printf("*******************************************************\n");
        printf("1.charu  2.shanchu   3.chaxun   4.gengxin   5.tuichu\n");
        printf("*******************************************************\n");

        printf("qing shu ru: ");
        scanf("%d",&n);
        getchar();

        switch(n){
            case 1:
                do_charu(db);
                break;
            case 2:
                do_shanchu(db);
                break;
            case 3:
               // do_chaxun(db);
                do_chaxun1(db);
                break;
            case 4:
                do_gengxin(db);
                break;
            case 5:
                sqlite3_close(db);
                exit(0);
                break;
            default:
                printf("zhi ling cuo wu.\n");
        }
    }

}

3.在线词典(数据库,网络并发,进程,C高级)

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐