我认为链接器投诉没问题。见http://social.msdn.microsoft.com/Forums/en-US/8376b2f0-cc36-48c8-9021-f30bda41f410/linker-warning-lnk4248-possible-problem
以下内容没有考虑到您正在使用 MS 管理的 C++ 进行编程,但是,我希望它仍能提供一些指导。
sqlite3_prepare_v2 准备语句,但不执行任何操作。
您需要调用 sqlite3_step 来执行(或部分执行)SQL。
对于不返回任何内容的 SQL 语句(例如 UPDATE、DELETE、INSERT),您调用 sqlite3_step 一次,如果有效,它应该返回 SQLITE_DONE。
对于可以返回多行的语句,您可以重复调用 sqlite3_step。每次返回代码为 SQLITE_ROW 时,您都会返回一行数据,您可以使用
sqlite3_column_* 语句集。当返回所有数据时,sqlite3_step 返回 SQLITE_DONE。
代码可能看起来像这样
sqlite3* db;
int rc = sqlite3_open(databasePath.c_str(), &db);
std::string sql = "SELECT Id, Url FROM Url WHERE Page_Download_Reqd <> 0;";
sqlite3_stmt* statementPtr;
const char* tailPtr;
int rc = sqlite3_prepare_v2(db, sql.c_str(), sql.size(), &statementPtr, &tailPtr);
bool finished = false;
do {
int rc = sqlite3_step(statementPtr);
switch (rc) {
case SQLITE_ROW: {
__int64 id = sqlite3_column_int(statementPtr, 0);
std::string url = reinterpret_cast<const char*>(sqlite3_column_text(statementPtr, 1));
// Do something with your data
}
break;
case SQLITE_DONE:
finished = true;
break;
default:
assert(false);
}
} while (!finished);
如果你的 SQL 中有变量,例如
SELECT Id, Url FROM Url WHERE Count <> :count;
那么您需要在 sqlite3_prepare_v2 和 sqlite3_step 函数之间使用 sqlite3_bind_* 函数之一。例如
__int count = 6;
std::string bindVarName = ":count";
rc = sqlite3_bind_int(
statementPtr,
sqlite3_bind_parameter_index(statementPtr, bindVarName.c_str()),
count);