在VS2013下c++與Sqlite3的連線
阿新 • • 發佈:2019-01-25
第一步:
在vs2013下建立一個空的win32工程SQLite3Test,在工程的屬性-連結-輸入中新增sqlite3.lib的引用。新增新的檔案main.cpp,寫一個main函式,並編譯一下。
好,接下來把sqlite3.h/def/exp/lib通通放進SQLite3Test\SQLite3Test\目錄下,跟main.cpp在一起,如圖:
把sqlite3.dll跟生成的exe放在一起。
第二步:
寫下原始碼:
- static std::string strName[] = {"土行孫","哪吒"
- int sqlite3_exec_callback(void *data, int nColumn, char **colValues, char **colNames);
- int sqlite3_exec_callback(void *data, int nColumn, char **colValues, char **colNames)
- {
- for (int i = 0; i < nColumn; i++)
- {
- printf("%s\t", colValues[i]);
- }
- printf("\n"
- return 0;
- }
- int main()
- {
- sqlite3 *conn = NULL;
- char *err_msg = NULL;
- char sql[200] = "";
- //開啟資料庫,建立連線;
- if(sqlite3_open("test.db",&conn) != SQLITE_OK)
- {
- printf("無法開啟\n");
- }
- //執行SQL,建立一張表;
- sprintf(sql,"CREATE TABLE test_for_cpp(id int,name varchar(20),age int)");
- if(sqlite3_exec(conn,sql,NULL,NULL
- {
- std::string strErrMsg(err_msg);
- std::string::size_type pos = 0;
- pos = strErrMsg.find("already exists");
- if(std::string::npos != pos)
- {
- //資料表已存在,刪除表中資料;
- sprintf(sql,"delete from test_for_cpp");
- if(sqlite3_exec(conn,sql,NULL,NULL,&err_msg) != SQLITE_OK)
- {
- printf("操作失敗,錯誤程式碼:%s",err_msg);
- return -1;
- }
- }
- else
- {
- printf("操作失敗,錯誤程式碼:%s",err_msg);
- return -1;
- }
- }
- //插入資料;
- int nColumn = sizeof(strName) / sizeof(strName[0]);
- for(int index = 0;index < nColumn;index++)
- {
- sprintf(sql, "INSERT INTO test_for_cpp (id, name, age) VALUES (%d, '%s', %d)", index, strName[index].c_str(), 20 + index);
- if (sqlite3_exec(conn, sql, NULL, NULL, &err_msg) != SQLITE_OK)
- {
- printf("操作失敗,錯誤程式碼: %s", err_msg);
- return -1;
- }
- }
- // 查詢;
- sprintf(sql, "SELECT * FROM test_for_cpp");
- sqlite3_exec(conn, sql, &sqlite3_exec_callback, 0, &err_msg);
- //關閉連線;
- if(sqlite3_close(conn) != SQLITE_OK)
- {
- printf("無法關閉,錯誤程式碼:%s\n",sqlite3_errmsg(conn));
- return -1;
- }
- return 0;
- }