不知道如何获取数据库?

我是sqlite和gtk的初学者。 我正在使用code :: blocks创建我的第一个项目。 我在获取数据库时遇到问题,我的代码是:

#include  #include  #include  #include "sqlite3.c" #include  static int callback(void *data, int argc, char **argv, char **azColName){ int i; fprintf(stderr, "%s: ", (const char*)data); for(i=0; i1) fprintf(stdout, "Dulitcate user\n"); if(count<1) fprintf(stdout, "username and password is not correct\n"); } /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); }else{ fprintf(stdout, "Operation done successfully\n"); } sqlite3_close(db); g_signal_connect(G_OBJECT(button1), "clicked", G_CALLBACK(gtk_main_quit), G_OBJECT(window)); g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); 

我在这些方面面临问题(来自上面的代码):

  1. 在SELECT语句中(我知道它完全错误,请更正)。
  2. 在sqlite3_exec(db,sql,callback,(void *)data,&zErrMsg)++(在while循环中)

     /* Create SQL statement */ sql="SELECT * from user where username='char *entry1' and password='char *entry2 '"; if(sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg)) { int count=0; while(sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg)++) { count++; } if(count==1) fprintf(stdout, "username and password is correct\n"); if(count>1) fprintf(stdout, "Dulitcate user\n"); if(count<1) fprintf(stdout, "username and password is not correct\n"); } /* Execute SQL statement */ rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg); if( rc != SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); }else{ fprintf(stdout, "Operation done successfully\n"); } sqlite3_close(db); 

    请帮帮我。我真的需要有人帮忙。提前付款

如果要在查询它的位置处理返回的数据, sqlite3_exec不适用,并且还有其他一些缺点。

对于查询,应始终使用sqlite3_prepare_v2 ,然后在循环中调用sqlite3_step 。 要将变量值放入语句中,请使用参数标记( ? )和sqlite3_bind *函数。 要读取返回的值,请使用sqlite3_column_ *函数(但在这种情况下,您实际上并不想读取任何值)。

 char *user = "Supu"; char *password = "secret"; sqlite3_stmt *stmt; const char *sql = "SELECT username, password FROM user WHERE username = ? AND password = ?"; rc = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL); if (rc != SQLITE_OK) { fprintf(stderr, "error: %s, %s\n", sql, sqlite3_errmsg(db)); } else { sqlite3_bind_text(stmt, 1, user, -1, SQLITE_TRANSIENT); sqlite3_bind_text(stmt, 2, password, -1, SQLITE_TRANSIENT); while ((rc = sqlite3_step(stmt)) == SQLITE_ROW) { printf("returned row: user = %s, password = %s\n", sqlite3_column_text(stmt, 0), sqlite3_column_text(stmt, 1)); count++; } if (rc != SQLITE_DONE) fprintf(stderr, "error: %s\n", sqlite3_errmsg(db)); sqlite3_finalize(stmt); }