2012-07-02 31 views
0

我試圖整數數據轉換爲字符串整數轉換爲字符串,但我發現了錯誤cannot convert 'int*' to 'const char*' for argument '2' to 'char* strcat(char*, const char*)'如何使用sqlite3的C++

嘿,夥計們,請解決這些問題,在哪裏我dowrong?

#include <iostream> 
    using namespace std; 
    #include "sqlite3.h" 
    #include<string.h> 
    #include <sstream> 
    #define STRING_MAX 32 

    typedef struct metadata_t 
    { 
     char session_username[256]; 
     int user_id[256]; 
     int session_id[256]; 
     char buffer[256]; 
    }metadata_t; 

    void insertdata1(metadata_t *data); 

    int main (int argc, const char * argv[]) 
     { 

     struct metadata_t *data; 
     cin >> *data->user_id; 
     cin >> data->session_username; 
     cin >> *data->session_id; 
     cin >> data->buffer; 


     insertdata1(data); 

     } 

    void insertdata1(metadata_t *data) 
     { 

     // char *buff1,*buff2; 
      sqlite3 *db; 
      sqlite3_open("test1.db", & db); 
      string createQuery = "CREATE TABLE IF NOT EXISTS items (user_id INTEGER PRIMARY KEY, session_username TEXT,Session_id INTEGER,buffer TEXT,));"; 
      sqlite3_stmt *createStmt; 
      cout << "Creating Table Statement" << endl; 
      sqlite3_prepare(db, createQuery.c_str(), createQuery.size(), &createStmt, NULL); 
      cout << "Stepping Table Statement" << endl; 
      if (sqlite3_step(createStmt) != SQLITE_DONE) cout << "Didn't Create Table!" << endl; 


      //itoa(*data->userid,buff1,10); // not work 
      //itoa(*data->userphone,buff2,10);// Integer to String Conversion 

     /* std::string ss; 
      ss << *data->user_id; 
      ss << *data->session_id; 
      std::string user_Id = ss.str(); 
      std::string session_Id = ss.str(); */ // not working 
        char *a="("; 
        char *d=")"; 
        char *b="'"; 
        char *c=","; 
        char str1[1000]; 
        char * str2 = ""; 
        char * g = ";"; 
       strcpy(str1, "INSERT INTO items (user_id,session_username,session_id,buffer)VALUES"); 

       strcat(str1,a); 

       strcat(str1,b); 
       strcat(str1,data->user_id); 
       strcat(str1,b); 
       strcat(str1,c); 
       strcat(str1,b); 
       strcat(str1,data->session_username); 
       strcat(str1,b); 
       strcat(str1,c); 
       strcat(str1,b); 
       strcat(str1,data->session_id); 
       strcat(str1,b); 
       strcat(str1,c); 
       strcat(str1,b); 
       strcat(str1,data->buffer); 
       strcat(str1,b); 
       strcat(str1,d); 
       strcat(str1,g); 

      std::string insertQuery = str1; // WORKS! 
      sqlite3_stmt *insertStmt; 
      cout << "Creating Insert Statement" << endl; 
      sqlite3_prepare(db, insertQuery.c_str(), insertQuery.size(), &insertStmt, NULL); 
      cout << "Stepping Insert Statement" << endl; 
      if (sqlite3_step(insertStmt) != SQLITE_DONE) cout << "Didn't Insert Item!" << endl; 




     }** 
+1

要將'int'轉換爲'std :: string'請參閱http://stackoverflow.com/questions/10516196/append-an-int-to-a-stdstring/10516313#10516313(來自衆多其中之一)。爲什麼使用'strcat()'而不是'std :: ostringstream'或'operator +()'? – hmjd

+1

一旦你經歷了編譯錯誤,你幾乎肯定會得到一個seg錯誤,因爲沒有內存被分配給'data':只是使用棧分配'metadata_t'。 – hmjd

+0

謝謝@ hmjd我是C++的新程序員,所以現在我面臨很多問題.....你是高級人,請你幫我在C++編程...) – Satyam

回答

2

推薦使用std::ostringstream(你需要#include <sstream>)來構造查詢:

std::ostringstream str1; 

str1 << "INSERT INTO items (user_id,session_username,session_id,buffer)VALUES" 
    << a 
    << b // and so on 
    << g; 

const std::string insertQuery = str1.str(); 

下列不分配任何內存,只是聲明瞭一個指針(struct是不是在C需要++ ):

struct metadata_t *data; 

以及任何解除引用的嘗試都會導致未定義的行爲,很可能是分段錯誤:

cin >> *data->user_id; 

只是聲明它在堆棧上:

metadata_t data; 

,並通過它的地址(或通過引用傳遞)到insertdata1()

insertdata1(&data); 

不想std::stringchar*char[]

struct metadata_t 
{ 
    std::string session_username; 
    int user_id[256]; // Did you really mean an array of int here ? 
    int session_id[256]; 
    std::string buffer; 
}; 
+0

謝謝allot .. @hmjd現在我正在嘗試這種方式:) – Satyam

+0

非常感謝你@ hmjd ..幫助我的兄弟。:) – Satyam

+0

@hmjd ..此數據庫使用gsoap服務器保持記錄...現在我試圖創建動態數據庫,用於在兩個用戶之間傳輸數據。 – Satyam