C語言數據庫編程


----摘自個人C語言數據庫項目報告

3.4邏輯結構的SQL語句實現

創建基本表:

3.4-1建立商品表:

create table goods(goods_id int primary key,goods_types varchar,goods_name varchar,goods_price varchar,appraise text);

3.4-2建立賣家表:

create table seller(seller_id int primary key,seller_name varchar,seller_sex varcahr,phone int,address text)

3.4-3建立買家表:

create table buyer(buyer_id int primary key,buyer_name varchar,buyer_sex varchar,buyer_phone int,buyer_address text

3.4-4建立賬單視圖表:

Create view bill as select buyer_id,buyer_name,buyer_address,goods_id,goods_name,goods_price from buyer,goods;

3.4-5建立店鋪基本表:

create table store(store_id int primary key, store_name text);

3.4-6建立賣家具體詳情視圖表:

create view seller_message as select seller_id, seller_name,seller_sex,goods_name,store_name,store_address from seller,store,goods;

 

3.4-7插入數據:

本系統有用戶自定義插入數據,無需在C語言里面寫入要插入的數據,用了本書上的sqlite3_mprintf格式化輸入函數來實現。

Sql=sqlite3_mprintf(“insert into  表名 values(%格式化)“, 格式化的變量); 此處%d整型無需引號,%s字符型加單引號。

例如本系統中插入數據:char *pSQL=sqlite3_mprintf("insert into store values(%d,'%s' )",store_id,store_name);

3.4-8查找數據:

自定義查找:sqlite3_mprintf(“select 列名 from 表名 where 列名= 格式化”,格式變量);

例如本系統中查找數據:

char  *pSQL= sqlite3_mprintf("select store_id, store_name from store where store_id =  %d ",col_value);

3.4-9刪除數據:

自定義刪除:sqlite3_mprintf(“delete from 表名 where 列名=格式化”,格式化變量);

例如本系統中自定義刪除數據:char *pSQL=sqlite3_mprintf("delete from goods where goods_id = %s ",col_value) ;

刪除表:drop table 表名。

 

項目中代碼:

//////////////////////////// /*建立第1張表 goods*//////////////////////////////////////////////////////////////////
void create_goods()
{
    int rc;    //rc為返回值,判斷函數是否執行成功  rc=0函數執行成功,rc !=0函數執行失敗
    sqlite3 *db;  //SQLite數據庫指針   sqlite3結構體  *db指向sqlite3結構體的指針
    char *pFileName = "Taobao_Shopping.db";  //數據庫文件名
    char * zErr;   /* 定義返回錯誤信息的變量*/
    
    
    rc = sqlite3_open(pFileName, &db); /*打開數據庫*/
    if(rc)                             /*假,關閉數據庫*/
    {
        printf("open database failed");
        sqlite3_close(db);
    } 
    char *pSQL="create table goods(goods_id int primary key,goods_types text,goods_name text,goods_price text,appraise text)";
    
    rc = sqlite3_exec(db, pSQL, 0,0, &zErr);   /* sqlite執行接口實現表的創建*/
    
    if(rc!=SQLITE_OK)
    {
        if (zErr!=NULL)
        {
            printf("SQL error:%s\n\n",zErr);
            sqlite3_free(zErr);  /* 釋放錯誤信息所占用的空間*/
        }
    }
    sqlite3_close(db);
    system("pause");system("cls");printf("提示:\n商品表已建立!"); goods();
}

////////////////////////////////////////錄入商品信息//////////////////////////////////////////////////////////////////////////

void goods_write()
{
    //數組存儲字符串
    int  goods_id;
    char goods_types[100];
    char goods_name[100];
    char goods_price[100];
 
    char appraise[100]; 
    int rc;
    sqlite3 *db;  //SQLite數據庫指針
    char *pFileName = "Taobao_Shopping.db";  //數據庫文件名
    rc = sqlite3_open(pFileName, &db); /*打開數據庫*/
    if(rc)                             /*假,關閉數據庫*/
    {
        printf("open database failed");
        sqlite3_close(db);
    }
    char * zErr;   /* 定義返回錯誤信息的變量*/
    
    
    printf("\n\n請依次錄入以下信息\n\n商品編號,商品種類,商品名稱,商品價格,商品評論\n\n");
    
    
    scanf("%d%s%s%s %s",&goods_id,&goods_types,&goods_name,&goods_price ,&appraise);
    
    //格式化輸入函數,以變量列表的方式插入到SQL語句中
    char *pSQL=sqlite3_mprintf("insert into goods values('%d','%s', '%s','%s', '%s');",goods_id,goods_types,goods_name,goods_price ,appraise);
    
    
    rc = sqlite3_exec(db,pSQL,0,0,&zErr); /*執行完成數據的插入*/
    
    if(rc) //rc=0
    {printf("商品信息錄入失敗!\n");}
    else
    {printf("\n商品信息錄入成功!\n\n");}
    sqlite3_close(db);
    system("pause");
    system("cls");
    goods();
}
///////////////////////////////////////////////////////////////////商品自定義刪除/////////////////////////////////////////////////////////////
void goods_del1()
{ 
    
    int rc;    
    sqlite3 *db;   
    char *pFileName = "Taobao_Shopping.db";   
    char * zErr;  
    char col_value[5];  
    rc = sqlite3_open(pFileName, &db); /*打開數據庫*/
    if(rc)                             /*假,關閉數據庫*/
    {
        printf("open database failed");
        sqlite3_close(db);
    }
    printf("請輸入要刪除的商品編號\n");
    
    scanf("%s",&col_value);
    char *pSQL=sqlite3_mprintf("delete from goods where goods_id = %s ",col_value) ;
    rc = sqlite3_exec(db,pSQL,0,0,&zErr);
    if(rc)
    {printf("刪除商品信息失敗!\n\n");}
    else
        printf("\n刪除商品信息成功!\n\n");
    system("pause");
    system("cls");
    goods_del();
    
}
////////////////////////////////////////////商品表修改////////////////////////////////////////////////////////////
void goods_update()
{
    
    
    int rc;    
    sqlite3 *db;   
    char *pFileName = "Taobao_Shopping.db";   
    char * zErr; 
    char col_name[10];
    char  new_value[10];
    int  goods_id;
    
    rc = sqlite3_open(pFileName, &db); /*打開數據庫*/
    if(rc)                             /*假,關閉數據庫*/
    {
        printf("open database failed");
        sqlite3_close(db);
    }
    printf("請輸入原來的列名,要修改的列名的列值,以及本商品編號\n");    //修改所在行的數值
    scanf("%s%s%d",&col_name,&new_value,&goods_id);
    
    //scanf()里面的格式化字符型跟整形 輸入到sqlite3_mprintf()格式化輸入 字符型跟整形  goods_id定義為數組不能正確執行結果。或者是goods_id定義為字符型解決問題
    
    
    char *pSQL=sqlite3_mprintf("update goods set '%s' = '%s' where goods_id = %d", col_name,new_value,goods_id);///%s字符型加單引號,數字可以不加
    
    rc = sqlite3_exec(db,pSQL,0,0,&zErr);
    if(rc)
    {printf("修改商品信息失敗!\n\n");
    } else
        printf("\n修改商品信息成功!\n\n");
    sqlite3_close(db);
    system("pause");
    system("cls");
    goods();
    
    
}
//////////////////////////////////////////查詢商品表信息//////////////////////////////////////////////////////////////////
void goods_find1()
{
    int rc;    
    sqlite3 *db;  //SQLite數據庫指針   sqlite3結構體  *db指向sqlite3結構體的指針
    char *pFileName = "Taobao_Shopping.db";   
    char * zErr;   /* 定義返回錯誤信息的變量*/
    char **result;
    int  rows, cols;
    int col_value;
    rc = sqlite3_open(pFileName, &db); /*打開數據庫*/
    if(rc)                             /*假,關閉數據庫*/
    {
        printf("open database failed");
        sqlite3_close(db);
    }
    printf("請輸入商品編號\n");// 根據goods_id 查詢那一行的數據
    
    scanf("%d",&col_value);
    
    char  *pSQL= sqlite3_mprintf("select goods_id,goods_types,goods_name,goods_price ,appraise from goods where goods_id =  %d ",col_value);
    
    rc = sqlite3_get_table(db, pSQL, &result, &rows, &cols, &zErr);//sqlite3_get table()無回調函數

    printf("查詢結果:\n");
    for(int i=0; i<=rows; i++)//
        
    {      printf("\n");
    for(int j=0; j<cols; j++)//

        printf("%11s  ",result[i*cols + j]);//第i行第j列元素值 包括表頭
    
    printf("\n");
    }
    system("pause");
    system("cls");
    goods_find();
    
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM