2014-01-25 21 views
0

我有ID的属性表(项目),项目比较用户输入的结果 - sqlite3的C++

id|itemName 
1|noodle 
2|burger 

基本上,我想问一下是有反正,我可以对比较一输入结果我数据库 记录?

例如,如果我输入noodle并且在我的数据库中存在匹配记录“noodle”,它将返回找到;

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



static int callback(void *NotUsed, int argc, char **argv, char **azColName){ 
    int i; 
    for(i=0; i<argc; i++){ 
     printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); 
    } 
    printf("\n"); 
    return 0; 
} 

int main(int argc, char* argv[]) 
{ 
    sqlite3 *db; 
    char *zErrMsg = 0; 
    int rc; 
    const char *sql; 
    std::string itemName; 

    rc = sqlite3_open("test.db", &db); 
    if(rc) { 
    // failed 
     fprintf(stderr, "Can't open database: %s\n", 
       sqlite3_errmsg(db)); 
    } 
    else 
    { 
    // success 
     fprintf(stderr, "Open database successfully\n"); 
    } 


    std::cout << "Enter a Item" << std::endl; 
    std::cin >> itemName; 
    sql = "select * from Item";   
    rc = sqlite3_exec(db,sql, callback, 0, &zErrMsg); 
    if(//how do I compare the itemName from my database against the user input) 
    { 
    } 
    sqlite3_close(db); 

    return 0; 
} 

回答

2

代替回调,你可以用一个参数指定只记录您需要:

std::cin >> itemName; 
sql = "select id from Item where itemName = ?";  

sqlite3_stmt *stmt; 
sqlite3_prepare_v2(db, sql, -1, &stmt, NULL); 

// set the ? parameter to the itemname you are looking for: 
sqlite3_bind_text(stmt, 1, itemName.c_str(), -1, SQLITE_TRANSIENT); 

if(sqlite3_step(stmt) == SQLITE_ROW) 
{ 
    int id=sqlite3_column_int(stmt,0); 
    std::cout << "Found id=" << id << std::endl; 
} 

sqlite3_finalize(stmt); 
sqlite3_close(db); 
+1

感谢你的帮助 – user2935569