数据库编程练习

/*****************************************************
Version: 1    
Description:
          1. 不可以手动insert数据
          2. 不可以delete指定数据
          3. 使用回掉函数
*****************************************************/

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

void create_table(sqlite3 * db)
{
    char * errmsg = NULL;
    char * sql;

    sql = "create table if not exists mytable (id integer primary key,name text);";

    if( SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg))
    {
        printf("operate failed: %s\n",errmsg);
        exit(-1);
    }

}

int insert_record(sqlite3 * db)
{
    char * errmsg = NULL;
    char * sql;

    sql = "insert into mytable (id,name) values (NULL,'chen');";

    if( SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg))
    {
        printf("operate failed: %s\n",errmsg);
        exit(-1);
    }

    sql = "insert into mytable (id,name) values (NULL,'wang');";

    if( SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg))
    {
        printf("inesrt failed: %s\n",errmsg);
        exit(-1);
    }

}

int displaycb(void * para,int n_col,char ** column_value,char ** column_name)
{
    int i;
    printf("total column is %d\n",n_col);

    for(i = 0; i < n_col; i++)
    {
        printf("col_name:%s -- > col_val:%s\n",column_name[i],column_value[i]);
    }

    printf("---------------------------\n");

    return 0;
}

void inquire_usecb(sqlite3 * db)
{
    char * errmsg = NULL;
    char * sql;

    sql = "select * from mytable;";

    if( SQLITE_OK != sqlite3_exec(db,sql,displaycb,NULL,&errmsg))
    {
        printf("inquire failed: %s\n",errmsg);
        exit(-1);
    }
}

void delete_table(sqlite3 * db)
{
    char * errmsg = NULL;
    char * sql;

    sql = "delete from mytable;";

    if( SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg))
    {
        printf("delete failed: %S\n",errmsg);
        exit(-1);
    }
    else
    {
        printf("delete ok!\n");
    }

}

int main()
{

    sqlite3 * db;

    //打开数据库
    if( SQLITE_OK != sqlite3_open("mydatabase",&db))
    {
        printf("open database failed:%s \n",sqlite3_errmsg(db));
    }
    else
    {
        printf("open datebase successed!\n");
    }

    //创建表
    create_table(db);

    //插入数据
    insert_record(db);

    //使用回掉函数
    inquire_usecb(db); 

    delete_table(db); 

    //关闭数据库
    sqlite3_close(db);

    return 0;
}
/*****************************************************
Version:2    
Description:
          1. 可以手动insert数据
          2. 可以delete指定数据
          3. 使用回掉函数 
*****************************************************/

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

void create_table(sqlite3 * db)
{
    char * errmsg = NULL;
    char * sql;

    sql = "create table if not exists mytable (id integer primary key,name text);";

    if( SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg))
    {
        printf("operate failed: %s\n",errmsg);
        exit(-1);
    }   
}

int insert_record(sqlite3 * db)
{
    char * errmsg = NULL;
    char sql[50];
    int  id;
    char name[50];

    printf("请你输入id和name:");
    scanf("%d,%s",&id,name);

    sprintf(sql, "insert into mytable (id,name) values (%d,'%s');",id,name); // %s 的单引号?

    if( SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg))
    {
        printf("inesrt failed: %s\n",errmsg);
        exit(-1);
    }
}

int displaycb(void * para,int n_col,char ** column_value,char ** column_name)
{
    int i;
    printf("total column is %d\n",n_col);

    for(i = 0; i < n_col; i++)
    {
        printf("col_name:%s -- > col_val:%s\n",column_name[i],column_value[i]);
    }

    printf("---------------------------\n");

    return 0;
}

void inquire_usecb(sqlite3 * db)
{
    char * errmsg = NULL;
    char * sql;

    sql = "select * from mytable;";

    if( SQLITE_OK != sqlite3_exec(db,sql,displaycb,NULL,&errmsg))
    {
        printf("inquire failed: %S\n",errmsg);
        exit(-1);
    }
}

void delete_table(sqlite3 * db)
{
    char * errmsg = NULL;
    char  sql[50];
    int id;

    printf("请输入要删除的id:");
    scanf("%d",&id);
    sprintf(sql, "delete from mytable where id = %d;",id);

    if( SQLITE_OK != sqlite3_exec(db,sql,displaycb,NULL,&errmsg))
    {
        printf("delete failed: %S\n",errmsg);
        exit(-1);
    }
    else
    {
        printf("delete ok!\n");
    }

}

int main()
{

    sqlite3 * db;

    //打开数据库
    if( SQLITE_OK != sqlite3_open("mydatabase",&db))
    {
        printf("open database failed:%s \n",sqlite3_errmsg(db));
    }
    else
    {
        printf("open datebase successed!\n");
    }

    //创建表
    create_table(db);

    //插入数据
    insert_record(db);

    //使用回掉函数
    inquire_usecb(db); 

    delete_table(db); 
    //关闭数据库
    printf("***********************\n");
    inquire_usecb(db); 

    sqlite3_close(db);


    return 0;
}
/*****************************************************
Version:3    
Description:
          和版本2相比回掉函数显示方式发生变化,但由于机制问题永远不会
          成为这个样子
          id       name 
          1        chen
          2        wang
          3        wu
*****************************************************/

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

void create_table(sqlite3 * db)
{
    char * errmsg = NULL;
    char * sql;

    //if not exists   同名表存在不会报错
    sql = "create table if not exists mytable (id integer primary key,name text);";

    if( SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg))
    {
        printf("operate failed: %s\n",errmsg);
        exit(-1);
    }

}

int insert_record(sqlite3 * db)
{
    char * errmsg = NULL;
    char sql[50];
    int  id;
    char name[50];

    printf("请你输入id和name:");
    scanf("%d,%s",&id,name);

    sprintf(sql, "insert into mytable (id,name) values (%d,'%s');",id,name); // %s 的单引号?

    if( SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg))
    {
        printf("inesrt failed: %s\n",errmsg);
        exit(-1);
    }
}

int displaycb(void * para,int n_col,char ** column_value,char ** column_name)
{
    int i;
    printf("total column is %d\n",n_col);


    printf("%8s%8s\n","id","name");
    for(i = 0; i < n_col; i++)
    {
        printf("%8s%8s\n",column_name[i],column_value[i]);
    }

    printf("---------------------------\n");

    return 0;
}

void inquire_usecb(sqlite3 * db)
{
    char * errmsg = NULL;
    char * sql;

    sql = "select * from mytable;";

    if( SQLITE_OK != sqlite3_exec(db,sql,displaycb,NULL,&errmsg))
    {
        printf("inquire failed: %S\n",errmsg);
        exit(-1);
    }
}

void delete_table(sqlite3 * db)
{
    char * errmsg = NULL;
    char  sql[50];
    int id;

    printf("请输入要删除的id:");
    scanf("%d",&id);
    sprintf(sql, "delete from mytable where id = %d;",id);

    if( SQLITE_OK != sqlite3_exec(db,sql,displaycb,NULL,&errmsg))
    {
        printf("delete failed: %S\n",errmsg);
        exit(-1);
    }
    else
    {
        printf("delete ok!\n");
    }

}

int main()
{
    //数据库句柄
    sqlite3 * db;

    //打开数据库
    if( SQLITE_OK != sqlite3_open("mydatabase",&db))
    {
        printf("open database failed:%s \n",sqlite3_errmsg(db));
    }
    else
    {
        printf("open datebase successed!\n");
    }

    //创建表
    create_table(db);

    //插入数据
    insert_record(db);

    //使用回掉函数
    inquire_usecb(db); 

    delete_table(db); 
    //关闭数据库
    printf("***********************\n");
    inquire_usecb(db); 

    sqlite3_close(db);


    return 0;
}
/*****************************************************
Version:4    
Description:
          和版本2 3相比,调用的函数发生变化,显示机制不同
          id       name 
          1        chen
          2        wang
          3        wu
          sqlite3_get_table()函数第三个参数azresult
          数据在内存中存放形式:
          id     ← azresult指向这个位置即先指向字段名       
          name
          1
          chen
          2
          zhang 
          3
          wang
*****************************************************/

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

void create_table(sqlite3 * db)
{
    char * errmsg = NULL;
    char * sql;

    sql = "create table if not exists mytable (id integer primary key,name text);";

    if( SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg))
    {
        printf("operate failed: %s\n",errmsg);
        exit(-1);
    }

}

int insert_record(sqlite3 * db)
{
    char * errmsg = NULL;
    char sql[50];
    int  id;
    char name[50];

    printf("请你输入id和name:");
    scanf("%d,%s",&id,name);

    sprintf(sql, "insert into mytable (id,name) values (%d,'%s');",id,name); // %s 的单引号?

    if( SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg))
    {
        printf("inesrt failed: %s\n",errmsg);
        exit(-1);
    }
}

int displaycb(void * para,int n_col,char ** column_value,char ** column_name)
{
    int i;
    printf("total column is %d\n",n_col);


    printf("%8s%8s\n","id","name");
    for(i = 0; i < n_col; i++)
    {
        printf("%8s",column_value[i]);
    }
    printf("\n");
    printf("---------------------------\n");

    return 0;
}

void inquire_usecb(sqlite3 * db)
{
    char * errmsg = NULL;
    char * sql;

    sql = "select * from mytable;";

    if( SQLITE_OK != sqlite3_exec(db,sql,displaycb,NULL,&errmsg))
    {
        printf("inquire failed: %S\n",errmsg);
        exit(-1);
    }
}

void delete_table(sqlite3 * db)
{
    char * errmsg = NULL;
    char  sql[50];
    int id;

    printf("请输入要删除的id:");
    scanf("%d",&id);
    sprintf(sql, "delete from mytable where id = %d;",id);

    if( SQLITE_OK != sqlite3_exec(db,sql,displaycb,NULL,&errmsg))
    {
        printf("delete failed: %S\n",errmsg);
        exit(-1);
    }
    else
    {
        printf("delete ok!\n");
    }

}

void inquire_nocb(sqlite3 * db)
{
    int nrow,ncolumn;
    char ** azresult;
    char * sql;
    char * errmsg;
    int i;

    sql = "select * from mytable;";

    //azresuli存放的是字符指针数组的地址,所以是三级指针
    if( SQLITE_OK != sqlite3_get_table(db,sql,&azresult,&nrow,&ncolumn,&errmsg))
    {
        printf("%s\n",errmsg);
        exit(-1);
    }

    printf("row:%d     column:%d\n",nrow,ncolumn);
    printf("result:\n");

    for(i = 0; i < (nrow + 1) * ncolumn; i++)
    {
        printf("%8s",azresult[i]);
        if((i + 1) % ncolumn == 0)
        {
            printf("\n");
        }
    }

    sqlite3_free_table(azresult);
}
int main()
{

    sqlite3 * db;

    //打开数据库
    if( SQLITE_OK != sqlite3_open("mydatabase",&db))
    {
        printf("open database failed:%s \n",sqlite3_errmsg(db));
    }
    else
    {
        printf("open datebase successed!\n");
    }

    //创建表
    create_table(db);

    //插入数据
    insert_record(db);

    //使用回掉函数
    inquire_usecb(db); 

    delete_table(db); 
    //关闭数据库
    printf("***********************\n");
    inquire_nocb(db); 

    sqlite3_close(db);


    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值