sql - SQLite:“准备语句”不起作用

标签 sql sqlite prepared-statement

我试图在C和VS2012中使用here中的“准备语句”功能来保存批量数据。这是我的代码:

char *sql;
char query[1000];
char buffer[100] = "INSERT INTO Table1 VALUES (?NNN1, ?2, ?3)";
sqlite3_int64 i;

sprintf_s(query , "CREATE TABLE IF NOT EXISTS Table1("  
             "ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " 
             "Name CHAR NULL , "
             "Title CHAR NULL ); ");
sql = query ;
db_execute_sql(db,sql,1);   // create the table "Table1"
fprintf(stdout,"Table1"); 

sqlite3_stmt* stmt;
sqlite3_prepare_v2(db, buffer,strlen(buffer), &stmt,NULL);

for(i = 0; i < 3; i++){
   sqlite3_bind_int64(stmt,1,NULL);
   sqlite3_bind_text(stmt,2,"Two",-1,SQLITE_TRANSIENT);
   sqlite3_bind_text(stmt,3,"Three",-1,SQLITE_TRANSIENT);

   if(sqlite3_step(stmt) != SQLITE_DONE){
     printf("\n\nPrepare statement failed!"); // it always comes here
   }
   sqlite3_reset(stmt);
}


但它不起作用。每当我在“ SQLite管理员”中检查数据库时,除了表本身,我什么都找不到,即:No Data。

为什么会这样呢?

最佳答案

试试这个:

char *sql;
char query[1000];
char buffer[100] = "INSERT INTO Table1 VALUES (?1, ?2, ?3)";
sqlite3_int64 i;

sprintf_s(query , "CREATE TABLE IF NOT EXISTS Table1("  
             "ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " 
             "Name CHAR NULL , "
             "Title CHAR NULL ); ");
sql = query ;
db_execute_sql(db,sql,1);   // create the table "Table1"
fprintf(stdout,"Table1"); 

sqlite3_stmt* stmt;
sqlite3_prepare_v2(db, buffer,strlen(buffer), &stmt,NULL);

for(i = 0; i < 3; i++){
   // remove the first insert since it is autoincremental 
   sqlite3_bind_text(stmt,2,"Two",-1,SQLITE_TRANSIENT);
   sqlite3_bind_text(stmt,3,"Three",-1,SQLITE_TRANSIENT);

   if(sqlite3_step(stmt) != SQLITE_DONE){
     printf("\n\nPrepare statement failed!"); //
   }
   sqlite3_reset(stmt);
}

关于sql - SQLite:“准备语句”不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18633168/

相关文章:

PHP mysqli 准备语句不工作

python - 为什么Python的sqlite3模块不尊重位置参数的顺序?

php - 准备好的语句在不应该的时候失败

sql - 使用 SQL Azure Reporting Services 生成用户特定报告

java - 检查数据库中重复记录的最佳方法| hibernate

mysql - 为什么我的 SQL 语句有时没有返回结果?

sql - pyodbc 执行命令不接受?参数正确?

SQLite 查询 - 需要全文搜索方面的帮助

python - 导入错误没有名为 '_sqlite3' python3.4 的模块

SQL - 从每个表中选择最大值,按所述最大值排序,然后按 created_at