您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ sqlite3_snprintf函数代码示例

51自学网 2021-06-03 08:15:56
  C++
这篇教程C++ sqlite3_snprintf函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中sqlite3_snprintf函数的典型用法代码示例。如果您正苦于以下问题:C++ sqlite3_snprintf函数的具体用法?C++ sqlite3_snprintf怎么用?C++ sqlite3_snprintf使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了sqlite3_snprintf函数的30个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: page_number

/*** Usage:   page_number PAGE**** Return the page number for a page.*/static int page_number(  void *NotUsed,  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int argc,              /* Number of arguments */  const char **argv      /* Text of each argument */){  char zBuf[100];  DbPage *pPage;  if( argc!=2 ){    Tcl_AppendResult(interp, "wrong # args: should be /"", argv[0],       " PAGE/"", 0);    return TCL_ERROR;  }  pPage = (DbPage *)sqlite3TestTextToPtr(argv[1]);  sqlite3_snprintf(sizeof(zBuf), zBuf, "%d", sqlite3PagerPagenumber(pPage));  Tcl_AppendResult(interp, zBuf, 0);  return TCL_OK;}
开发者ID:AchironOS,项目名称:chromium-2,代码行数:23,


示例2: btree_pager_stats

/*** Usage:   btree_pager_stats ID**** Returns pager statistics*/static int btree_pager_stats(  void *NotUsed,  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int argc,              /* Number of arguments */  const char **argv      /* Text of each argument */){  Btree *pBt;  int i;  int *a;  if( argc!=2 ){    Tcl_AppendResult(interp, "wrong # args: should be /"", argv[0],       " ID/"", 0);    return TCL_ERROR;  }  pBt = sqlite3TestTextToPtr(argv[1]);   /* Normally in this file, with a b-tree handle opened using the   ** [btree_open] command it is safe to call sqlite3BtreeEnter() directly.  ** But this function is sometimes called with a btree handle obtained  ** from an open SQLite connection (using [btree_from_db]). In this case  ** we need to obtain the mutex for the controlling SQLite handle before  ** it is safe to call sqlite3BtreeEnter().  */  sqlite3_mutex_enter(pBt->db->mutex);  sqlite3BtreeEnter(pBt);  a = sqlite3PagerStats(sqlite3BtreePager(pBt));  for(i=0; i<11; i++){    static char *zName[] = {      "ref", "page", "max", "size", "state", "err",      "hit", "miss", "ovfl", "read", "write"    };    char zBuf[100];    Tcl_AppendElement(interp, zName[i]);    sqlite3_snprintf(sizeof(zBuf), zBuf,"%d",a[i]);    Tcl_AppendElement(interp, zBuf);  }  sqlite3BtreeLeave(pBt);  /* Release the mutex on the SQLite handle that controls this b-tree */  sqlite3_mutex_leave(pBt->db->mutex);  return TCL_OK;}
开发者ID:AlexL871,项目名称:rt-thread-stm32f4discovery,代码行数:49,


示例3: demoFullPathname

/*** Argument zPath points to a nul-terminated string containing a file path.** If zPath is an absolute path, then it is copied as is into the output ** buffer. Otherwise, if it is a relative path, then the equivalent full** path is written to the output buffer.**** This function assumes that paths are UNIX style. Specifically, that:****   1. Path components are separated by a '/'. and **   2. Full paths begin with a '/' character.*/static int demoFullPathname(  sqlite3_vfs *pVfs,              /* VFS */  const char *zPath,              /* Input path (possibly a relative path) */  int nPathOut,                   /* Size of output buffer in bytes */  char *zPathOut                  /* Pointer to output buffer */){  char zDir[MAXPATHNAME+1];  if( zPath[0]=='/' ){    zDir[0] = '/0';  }else{    getcwd(zDir, sizeof(zDir));  }  zDir[MAXPATHNAME] = '/0';  sqlite3_snprintf(nPathOut, zPathOut, "%s/%s", zDir, zPath);  zPathOut[nPathOut-1] = '/0';  return SQLITE_OK;}
开发者ID:hyc,项目名称:BerkeleyDB,代码行数:30,


示例4: btree_cursor

/*** Usage:   btree_cursor ID TABLENUM WRITEABLE**** Create a new cursor.  Return the ID for the cursor.*/static int btree_cursor(  void *NotUsed,  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int argc,              /* Number of arguments */  const char **argv      /* Text of each argument */){  Btree *pBt;  int iTable;  BtCursor *pCur;  int rc = SQLITE_OK;  int wrFlag;  char zBuf[30];  if( argc!=4 ){    Tcl_AppendResult(interp, "wrong # args: should be /"", argv[0],       " ID TABLENUM WRITEABLE/"", 0);    return TCL_ERROR;  }  pBt = sqlite3TestTextToPtr(argv[1]);  if( Tcl_GetInt(interp, argv[2], &iTable) ) return TCL_ERROR;  if( Tcl_GetBoolean(interp, argv[3], &wrFlag) ) return TCL_ERROR;  if( wrFlag ) wrFlag = BTREE_WRCSR;  pCur = (BtCursor *)ckalloc(sqlite3BtreeCursorSize());  memset(pCur, 0, sqlite3BtreeCursorSize());  sqlite3_mutex_enter(pBt->db->mutex);  sqlite3BtreeEnter(pBt);#ifndef SQLITE_OMIT_SHARED_CACHE  rc = sqlite3BtreeLockTable(pBt, iTable, !!wrFlag);#endif  if( rc==SQLITE_OK ){    rc = sqlite3BtreeCursor(pBt, iTable, wrFlag, 0, pCur);  }  sqlite3BtreeLeave(pBt);  sqlite3_mutex_leave(pBt->db->mutex);  if( rc ){    ckfree((char *)pCur);    Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);    return TCL_ERROR;  }  sqlite3_snprintf(sizeof(zBuf), zBuf,"%p", pCur);  Tcl_AppendResult(interp, zBuf, 0);  return SQLITE_OK;}
开发者ID:AlvarHHM,项目名称:sqlite,代码行数:48,


示例5: errorMessage

/*** Print an error message*/static void errorMessage(const char *zFormat, ...){  va_list ap;  char *zMsg;  char zPrefix[30];  va_start(ap, zFormat);  zMsg = sqlite3_vmprintf(zFormat, ap);  va_end(ap);  sqlite3_snprintf(sizeof(zPrefix), zPrefix, "%s:ERROR: ", g.zName);  if( g.pLog ){    printWithPrefix(g.pLog, zPrefix, zMsg);    fflush(g.pLog);  }  if( g.pErrLog && safe_strcmp(g.zErrLog,g.zLog) ){    printWithPrefix(g.pErrLog, zPrefix, zMsg);    fflush(g.pErrLog);  }  sqlite3_free(zMsg);  g.nError++;}
开发者ID:xluoly,项目名称:raw-os_sqlite,代码行数:22,


示例6: set_repo_user_version

static intset_repo_user_version(sqlite3 *sqlite, const char *database, int reposcver){    int		 retcode = EPKG_OK;    char		 sql[BUFSIZ];    char		*errmsg;    const char	*fmt = "PRAGMA %Q.user_version = %d;" ;    assert(database != NULL);    sqlite3_snprintf(sizeof(sql), sql, fmt, database, reposcver);    if (sqlite3_exec(sqlite, sql, NULL, NULL, &errmsg) != SQLITE_OK) {        pkg_emit_error("sqlite: %s", errmsg);        sqlite3_free(errmsg);        retcode = EPKG_FATAL;    }    return (retcode);}
开发者ID:ppentchev,项目名称:pkg,代码行数:19,


示例7: btreeSeqOpen

static int btreeSeqOpen(    sqlite3_context *context, Btree *p, SEQ_COOKIE *cookie){	BtShared *pBt;	DBT key;	DB_SEQUENCE *seq;	char seq_key[BT_MAX_SEQ_NAME];	int ret, seq_len;	u_int32_t flags;	pBt = p->pBt;	if ((ret = btreeSeqGetCookie(context, p, cookie, 0)) != 0)		return (ret);	if (cookie->cache != 0) {		if ((ret = db_sequence_create(&seq, pBt->metadb, 0)) != 0)			return ret;		seq->set_cachesize(seq, cookie->cache);		flags = 0;#ifdef BDBSQL_SINGLE_THREAD		flags |= DB_THREAD;#endif		sqlite3_snprintf(		    BT_MAX_SEQ_NAME, seq_key, "%s_db", cookie->name);		seq_len = (int)strlen(seq_key);		memset(&key, 0, sizeof(key));		key.data = seq_key;		key.size = key.ulen = seq_len;		key.flags = DB_DBT_USERMEM;		if ((ret = seq->open(		    seq, NULL, &key, flags)) != 0) {			(void)seq->close(seq, 0);			return ret;		}		cookie->handle = seq;	}	return (0);}
开发者ID:SvenDowideit,项目名称:clearlinux,代码行数:42,


示例8: mimetype_verify

/*** Guess the mime-type of a document based on its name.*/const char *mimetype_from_name(const char *zName){  const char *z;  int i;  int first, last;  int len;  char zSuffix[20];#ifdef FOSSIL_DEBUG  /* This is test code to make sure the table above is in the correct  ** order  */  if( fossil_strcmp(zName, "mimetype-test")==0 ){    mimetype_verify();    return "ok";  }#endif  z = zName;  for(i=0; zName[i]; i++){    if( zName[i]=='.' ) z = &zName[i+1];  }  len = strlen(z);  if( len<sizeof(zSuffix)-1 ){    sqlite3_snprintf(sizeof(zSuffix), zSuffix, "%s", z);    for(i=0; zSuffix[i]; i++) zSuffix[i] = fossil_tolower(zSuffix[i]);    first = 0;    last = ArraySize(aMime) - 1;    while( first<=last ){      int c;      i = (first+last)/2;      c = fossil_strcmp(zSuffix, aMime[i].zSuffix);      if( c==0 ) return aMime[i].zMimetype;      if( c<0 ){        last = i-1;      }else{        first = i+1;      }    }  }  return "application/x-fossil-artifact";}
开发者ID:digsrc,项目名称:fossil,代码行数:45,


示例9: btreeCleanupEnv

static int btreeCleanupEnv(const char *home){	DB_ENV *tmp_env;	int count, i, ret;	char **names, buf[512];	log_msg(LOG_DEBUG, "btreeCleanupEnv removing existing env.");	/*	 * If there is a directory (environment), but no	 * database file. Clear the environment to avoid	 * carrying over information from earlier sessions.	 */	if ((ret = db_env_create(&tmp_env, 0)) != 0)		return ret;	/* Remove log files */	if ((ret = __os_dirlist(tmp_env->env, home, 0, &names, &count)) != 0) {		(void)tmp_env->close(tmp_env, 0);		return ret;	}	for (i = 0; i < count; i++) {		if (strncmp(names[i], "log.", 4) != 0)			continue;		sqlite3_snprintf(sizeof(buf), buf, "%s%s%s",		    home, "/", names[i]);		/*		 * Use Berkeley DB __os_unlink (not sqlite3OsDelete) since		 * this file has always been managed by Berkeley DB.		 */		(void)__os_unlink(NULL, buf, 0);	}	__os_dirfree(tmp_env->env, names, count);	/*	 * TODO: Do we want force here? Ideally all handles	 * would always be closed on exit, so DB_FORCE would	 * not be necessary.  The world is not currently ideal.	 */	return tmp_env->remove(tmp_env, home, DB_FORCE);}
开发者ID:galaxyeye,项目名称:bdb,代码行数:42,


示例10: vfstraceShmLock

/*** Shared-memory operations.*/static int vfstraceShmLock(sqlite3_file *pFile, int ofst, int n, int flags){  vfstrace_file *p = (vfstrace_file *)pFile;  vfstrace_info *pInfo = p->pInfo;  int rc;  char zLck[100];  int i = 0;  memcpy(zLck, "|0", 3);  if( flags & SQLITE_SHM_UNLOCK )    strappend(zLck, &i, "|UNLOCK");  if( flags & SQLITE_SHM_LOCK )      strappend(zLck, &i, "|LOCK");  if( flags & SQLITE_SHM_SHARED )    strappend(zLck, &i, "|SHARED");  if( flags & SQLITE_SHM_EXCLUSIVE ) strappend(zLck, &i, "|EXCLUSIVE");  if( flags & ~(0xf) ){     sqlite3_snprintf(sizeof(zLck)-i, &zLck[i], "|0x%x", flags);  }  vfstrace_printf(pInfo, "%s.xShmLock(%s,ofst=%d,n=%d,%s)",                  pInfo->zVfsName, p->zFName, ofst, n, &zLck[1]);  rc = p->pReal->pMethods->xShmLock(p->pReal, ofst, n, flags);  vfstrace_print_errcode(pInfo, " -> %s/n", rc);  return rc;}
开发者ID:77songsong,项目名称:sqlite3,代码行数:23,


示例11: vfstraceSync

/*** Sync an vfstrace-file.*/static int vfstraceSync(sqlite3_file *pFile, int flags){  vfstrace_file *p = (vfstrace_file *)pFile;  vfstrace_info *pInfo = p->pInfo;  int rc;  int i;  char zBuf[100];  memcpy(zBuf, "|0", 3);  i = 0;  if( flags & SQLITE_SYNC_FULL )        strappend(zBuf, &i, "|FULL");  else if( flags & SQLITE_SYNC_NORMAL ) strappend(zBuf, &i, "|NORMAL");  if( flags & SQLITE_SYNC_DATAONLY )    strappend(zBuf, &i, "|DATAONLY");  if( flags & ~(SQLITE_SYNC_FULL|SQLITE_SYNC_DATAONLY) ){    sqlite3_snprintf(sizeof(zBuf)-i, &zBuf[i], "|0x%x", flags);  }  vfstrace_printf(pInfo, "%s.xSync(%s,%s)", pInfo->zVfsName, p->zFName,                  &zBuf[1]);  rc = p->pReal->pMethods->xSync(p->pReal, flags);  vfstrace_printf(pInfo, " -> %d/n", rc);  return rc;}
开发者ID:77songsong,项目名称:sqlite3,代码行数:23,


示例12: pager_pagecount

static int pager_pagecount(  void *NotUsed,  Tcl_Interp *interp,      int argc,                const char **argv      ){  Pager *pPager;  char zBuf[100];  int nPage;  if( argc!=2 ){    Tcl_AppendResult(interp, "wrong # args: should be /"", argv[0],       " ID/"", 0);    return TCL_ERROR;  }  pPager = sqlite3TestTextToPtr(argv[1]);  sqlite3PagerPagecount(pPager, &nPage);  sqlite3_snprintf(sizeof(zBuf), zBuf, "%d", nPage);  Tcl_AppendResult(interp, zBuf, 0);  return TCL_OK;}
开发者ID:qtekfun,项目名称:htcDesire820Kernel,代码行数:20,


示例13: pager_pagecount

/*** Usage:   pager_pagecount ID**** Return the size of the database file.*/static int SQLITE_TCLAPI pager_pagecount(  void *NotUsed,  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int argc,              /* Number of arguments */  const char **argv      /* Text of each argument */){  Pager *pPager;  char zBuf[100];  int nPage;  if( argc!=2 ){    Tcl_AppendResult(interp, "wrong # args: should be /"", argv[0],       " ID/"", 0);    return TCL_ERROR;  }  pPager = sqlite3TestTextToPtr(argv[1]);  sqlite3PagerPagecount(pPager, &nPage);  sqlite3_snprintf(sizeof(zBuf), zBuf, "%d", nPage);  Tcl_AppendResult(interp, zBuf, 0);  return TCL_OK;}
开发者ID:HongliYu,项目名称:firefox-ios,代码行数:25,


示例14: rstats_cmd

/*** COMMAND: rstats**** Usage: %fossil rstats**** Deliver a report of the repository statistics for the** current checkout.*/void rstats_cmd(void){  i64 t;  int n, m, fsize, vid;  char zBuf[100];  db_must_be_within_tree();  vid = db_lget_int("checkout",0);  if( vid==0 ){    fossil_panic("no checkout");  }  fsize = file_size(g.zRepositoryName);  n = db_int(0, "SELECT count(*) FROM blob");  m = db_int(0, "SELECT count(*) FROM delta");  printf(" Number of Artifacts: %d/n", n);  printf("  %d full text + %d delta blobs/n", (n-m), m);  if( n>0 ){    int a, b;    t = db_int64(0, "SELECT total(size) FROM blob WHERE size>0");    sqlite3_snprintf(sizeof(zBuf), zBuf, "%lld", t);    if( t/fsize < 5 ){      b = 10;      fsize /= 10;    }else{      b = 1;    }    a = t/fsize;    printf(" %d bytes average, %s bytes total/n/n",	   ((int)(((double)t)/(double)n)),	   (zBuf));  }  n = db_int(0, "SELECT count(distinct mid) FROM mlink");  printf("  Number Of Checkins: %d/n", n);  n = db_int(0, "SELECT count(*) FROM filename");  printf("     Number Of Files: %d/n", n);  n = db_int(0, "SELECT count(*) FROM tag WHERE +tagname GLOB 'wiki-*'");  printf("Number Of Wiki Pages: %d/n", n);  n = db_int(0, "SELECT count(*) FROM tag WHERE +tagname GLOB 'tkt-*'");  printf("   Number Of Tickets: %d/n", n);  n = db_int(0, "SELECT julianday('now') - (SELECT min(mtime) FROM event) + 0.99");  printf(" Duration Of Project: %d days/n", n);}
开发者ID:3615pipou,项目名称:coopy,代码行数:49,


示例15: btree_open

/*** Usage:   btree_open FILENAME NCACHE**** Open a new database*/static int btree_open(  void *NotUsed,  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int argc,              /* Number of arguments */  const char **argv      /* Text of each argument */){  Btree *pBt;  int rc, nCache;  char zBuf[100];  int n;  char *zFilename;  if( argc!=3 ){    Tcl_AppendResult(interp, "wrong # args: should be /"", argv[0],       " FILENAME NCACHE FLAGS/"", 0);    return TCL_ERROR;  }  if( Tcl_GetInt(interp, argv[2], &nCache) ) return TCL_ERROR;  nRefSqlite3++;  if( nRefSqlite3==1 ){    sDb.pVfs = sqlite3_vfs_find(0);    sDb.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE);    sqlite3_mutex_enter(sDb.mutex);  }  n = (int)strlen(argv[1]);  zFilename = sqlite3_malloc( n+2 );  if( zFilename==0 ) return TCL_ERROR;  memcpy(zFilename, argv[1], n+1);  zFilename[n+1] = 0;  rc = sqlite3BtreeOpen(sDb.pVfs, zFilename, &sDb, &pBt, 0,      SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_MAIN_DB);  sqlite3_free(zFilename);  if( rc!=SQLITE_OK ){    Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);    return TCL_ERROR;  }  sqlite3BtreeSetCacheSize(pBt, nCache);  sqlite3_snprintf(sizeof(zBuf), zBuf,"%p", pBt);  Tcl_AppendResult(interp, zBuf, 0);  return TCL_OK;}
开发者ID:13028122862,项目名称:firefox-ios,代码行数:45,


示例16: vfile_aggregate_checksum_manifest

/*** Compute an aggregate MD5 checksum over the repository image of every** file in manifest vid.  The file names are part of the checksum.  The** resulting checksum is suitable for use as the R-card of a manifest.**** Return the resulting checksum in blob pOut.**** If pManOut is not NULL then fill it with the checksum found in the** "R" card near the end of the manifest.**** In a well-formed manifest, the two checksums computed here, pOut and** pManOut, should be identical.  */void vfile_aggregate_checksum_manifest(int vid, Blob *pOut, Blob *pManOut){  int fid;  Blob file;  Blob err;  Manifest *pManifest;  ManifestFile *pFile;  char zBuf[100];  blob_zero(pOut);  blob_zero(&err);  if( pManOut ){    blob_zero(pManOut);  }  db_must_be_within_tree();  pManifest = manifest_get(vid, CFTYPE_MANIFEST, &err);  if( pManifest==0 ){    fossil_fatal("manifest file (%d) is malformed:/n%s/n",                 vid, blob_str(&err));  }  manifest_file_rewind(pManifest);  while( (pFile = manifest_file_next(pManifest,0))!=0 ){    if( pFile->zUuid==0 ) continue;    fid = uuid_to_rid(pFile->zUuid, 0);    md5sum_step_text(pFile->zName, -1);    content_get(fid, &file);    sqlite3_snprintf(sizeof(zBuf), zBuf, " %d/n", blob_size(&file));    md5sum_step_text(zBuf, -1);    md5sum_step_blob(&file);    blob_reset(&file);  }  if( pManOut ){    if( pManifest->zRepoCksum ){      blob_append(pManOut, pManifest->zRepoCksum, -1);    }else{      blob_zero(pManOut);    }  }  manifest_destroy(pManifest);  md5sum_finish(pOut);}
开发者ID:LitleWaffle,项目名称:sampleDirectory,代码行数:53,


示例17: sqlite3_snprintf

std::string DatabaseSQLite::escapeString(const std::string &s){	// remember about quoiting even an empty string!	if(!s.size())		return std::string("''");	// the worst case is 2n + 3	char* output = new char[s.length() * 2 + 3];	// quotes escaped string and frees temporary buffer	sqlite3_snprintf(s.length() * 2 + 1, output, "%Q", s.c_str());	std::string r(output);	delete[] output;	//escape % and _ because we are using LIKE operator.	r = boost::regex_replace(r, boost::regex("%"), "//%");	r = boost::regex_replace(r, boost::regex("_"), "//_");	if(r[r.length() - 1] != '/'')		r += "'";	return r;}
开发者ID:Fir3element,项目名称:035,代码行数:22,


示例18: btree_move_to

/*** Usage:   btree_move_to ID KEY**** Move the cursor to the entry with the given key.*/static int btree_move_to(  void *NotUsed,  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int argc,              /* Number of arguments */  const char **argv      /* Text of each argument */){  BtCursor *pCur;  int rc;  int res;  char zBuf[20];  if( argc!=3 ){    Tcl_AppendResult(interp, "wrong # args: should be /"", argv[0],       " ID KEY/"", 0);    return TCL_ERROR;  }  pCur = sqlite3TestTextToPtr(argv[1]);  sqlite3BtreeEnter(pCur->pBtree);  if( sqlite3BtreeFlags(pCur) & BTREE_INTKEY ){    int iKey;    if( Tcl_GetInt(interp, argv[2], &iKey) ){      sqlite3BtreeLeave(pCur->pBtree);      return TCL_ERROR;    }    rc = sqlite3BtreeMovetoUnpacked(pCur, 0, iKey, 0, &res);  }else{    rc = sqlite3BtreeMoveto(pCur, argv[2], strlen(argv[2]), 0, &res);    }  sqlite3BtreeLeave(pCur->pBtree);  if( rc ){    Tcl_AppendResult(interp, errorName(rc), 0);    return TCL_ERROR;  }  if( res<0 ) res = -1;  if( res>0 ) res = 1;  sqlite3_snprintf(sizeof(zBuf), zBuf,"%d",res);  Tcl_AppendResult(interp, zBuf, 0);  return SQLITE_OK;}
开发者ID:DoganA,项目名称:nightingale-deps,代码行数:44,


示例19: evalSql

/*** Run arbitrary SQL and record the results in an output string** given by the first parameter.*/static int evalSql(String *p, const char *zFormat, ...){  va_list ap;  char *zSql;  int rc;  char *zErrMsg = 0;  va_start(ap, zFormat);  zSql = sqlite3_vmprintf(zFormat, ap);  va_end(ap);  assert( g.iTimeout>0 );  rc = sqlite3_exec(g.db, zSql, evalCallback, p, &zErrMsg);  sqlite3_free(zSql);  if( rc ){    char zErr[30];    sqlite3_snprintf(sizeof(zErr), zErr, "error(%d)", rc);    stringAppendTerm(p, zErr);    if( zErrMsg ){      stringAppendTerm(p, zErrMsg);      sqlite3_free(zErrMsg);    }  }  return rc;}
开发者ID:xluoly,项目名称:raw-os_sqlite,代码行数:26,


示例20: seafile_session_config_set_string

intseafile_session_config_set_string (SeafileSession *session,                                   const char *key,                                   const char *value){    char sql[256];    sqlite3_snprintf (sizeof(sql), sql,                      "REPLACE INTO Config VALUES ('%q', '%q');",                      key, value);    if (sqlite_query_exec (session->config_db, sql) < 0)        return -1;    if (g_strcmp0(key, KEY_SYNC_EXTRA_TEMP_FILE) == 0) {        if (g_strcmp0(value, "true") == 0)            session->sync_extra_temp_file = TRUE;        else            session->sync_extra_temp_file = FALSE;    }    return 0;}
开发者ID:chenchizhao,项目名称:disk42,代码行数:22,


示例21: btree_eof

/*** Usage:   btree_eof ID**** Return TRUE if the given cursor is not pointing at a valid entry.** Return FALSE if the cursor does point to a valid entry.*/static int btree_eof(  void *NotUsed,  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int argc,              /* Number of arguments */  const char **argv      /* Text of each argument */){  BtCursor *pCur;  int rc;  char zBuf[50];  if( argc!=2 ){    Tcl_AppendResult(interp, "wrong # args: should be /"", argv[0],       " ID/"", 0);    return TCL_ERROR;  }  pCur = sqlite3TestTextToPtr(argv[1]);  sqlite3BtreeEnter(pCur->pBtree);  rc = sqlite3BtreeEof(pCur);  sqlite3BtreeLeave(pCur->pBtree);  sqlite3_snprintf(sizeof(zBuf),zBuf, "%d", rc);  Tcl_AppendResult(interp, zBuf, 0);  return SQLITE_OK;}
开发者ID:AlexL871,项目名称:rt-thread-stm32f4discovery,代码行数:29,


示例22: tar_add_file

/*** Add a single file to the growing tarball.*/static void tar_add_file(  const char *zName,               /* Name of the file.  nul-terminated */  Blob *pContent,                  /* Content of the file */  int mPerm,                       /* 1: executable file, 2: symlink */  unsigned int mTime               /* Last modification time of the file */){  int nName = strlen(zName);  int n = blob_size(pContent);  int lastPage;  char cType = '0';  /* length check moved to tar_split_path */  tar_add_directory_of(zName, nName, mTime);  /*    * If we have a symlink, write its destination path (which is stored in   * pContent) into header, and set content length to 0 to avoid storing path   * as file content in the next step.  Since 'linkname' header is limited to   * 100 bytes (-1 byte for terminating zero), if path is greater than that,   * store symlink as a plain-text file. (Not sure how TAR handles long links.)   */  if( mPerm == PERM_LNK && n <= 100 ){    sqlite3_snprintf(100, (char*)&tball.aHdr[157], "%s", blob_str(pContent));    cType = '2';    n = 0;  }  tar_add_header(zName, nName, ( mPerm==PERM_EXE ) ? 0755 : 0644,                  mTime, n, cType);  if( n ){    gzip_step(blob_buffer(pContent), n);    lastPage = n % 512;    if( lastPage!=0 ){      gzip_step(tball.zSpaces, 512 - lastPage);    }  }}
开发者ID:Erls-Corporation,项目名称:bitbucket-clone,代码行数:40,


示例23: page_lookup

static int page_lookup(  void *NotUsed,  Tcl_Interp *interp,      int argc,                const char **argv      ){  Pager *pPager;  char zBuf[100];  DbPage *pPage;  int pgno;  if( argc!=3 ){    Tcl_AppendResult(interp, "wrong # args: should be /"", argv[0],       " ID PGNO/"", 0);    return TCL_ERROR;  }  pPager = sqlite3TestTextToPtr(argv[1]);  if( Tcl_GetInt(interp, argv[2], &pgno) ) return TCL_ERROR;  pPage = sqlite3PagerLookup(pPager, pgno);  if( pPage ){    sqlite3_snprintf(sizeof(zBuf),zBuf,"%p",pPage);    Tcl_AppendResult(interp, zBuf, 0);  }  return TCL_OK;}
开发者ID:qtekfun,项目名称:htcDesire820Kernel,代码行数:24,


示例24: page_lookup

/*** Usage:   page_lookup ID PGNO**** Return a pointer to a page if the page is already in cache.** If not in cache, return an empty string.*/static int page_lookup(  void *NotUsed,  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int argc,              /* Number of arguments */  const char **argv      /* Text of each argument */){  Pager *pPager;  char zBuf[100];  DbPage *pPage;  int pgno;  if( argc!=3 ){    Tcl_AppendResult(interp, "wrong # args: should be /"", argv[0],       " ID PGNO/"", 0);    return TCL_ERROR;  }  pPager = sqlite3TestTextToPtr(argv[1]);  if( Tcl_GetInt(interp, argv[2], &pgno) ) return TCL_ERROR;  pPage = sqlite3PagerLookup(pPager, pgno);  if( pPage ){    sqlite3_snprintf(sizeof(zBuf),zBuf,"%p",pPage);    Tcl_AppendResult(interp, zBuf, 0);  }  return TCL_OK;}
开发者ID:Av3ng3,项目名称:Lamobo-D1s,代码行数:30,


示例25: strftimeFunc

/***    strftime( FORMAT, TIMESTRING, MOD, MOD, ...)**** Return a string described by FORMAT.  Conversions as follows:****   %d  day of month**   %f  ** fractional seconds  SS.SSS**   %H  hour 00-24**   %j  day of year 000-366**   %J  ** julian day number**   %m  month 01-12**   %M  minute 00-59**   %s  seconds since 1970-01-01**   %S  seconds 00-59**   %w  day of week 0-6  sunday==0**   %W  week of year 00-53**   %Y  year 0000-9999**   %%  %*/static void strftimeFunc(  sqlite3_context *context,  int argc,  sqlite3_value **argv){  DateTime x;  u64 n;  size_t i,j;  char *z;  sqlite3 *db;  const char *zFmt;  char zBuf[100];  if( argc==0 ) return;  zFmt = (const char*)sqlite3_value_text(argv[0]);  if( zFmt==0 || isDate(context, argc-1, argv+1, &x) ) return;  db = sqlite3_context_db_handle(context);  for(i=0, n=1; zFmt[i]; i++, n++){    if( zFmt[i]=='%' ){      switch( zFmt[i+1] ){        case 'd':        case 'H':        case 'm':        case 'M':        case 'S':        case 'W':          n++;          /* fall thru */        case 'w':        case '%':          break;        case 'f':          n += 8;          break;        case 'j':          n += 3;          break;        case 'Y':          n += 8;          break;        case 's':        case 'J':          n += 50;          break;        default:          return;  /* ERROR.  return a NULL */      }      i++;    }  }  testcase( n==sizeof(zBuf)-1 );  testcase( n==sizeof(zBuf) );  testcase( n==(u64)db->aLimit[SQLITE_LIMIT_LENGTH]+1 );  testcase( n==(u64)db->aLimit[SQLITE_LIMIT_LENGTH] );  if( n<sizeof(zBuf) ){    z = zBuf;  }else if( n>(u64)db->aLimit[SQLITE_LIMIT_LENGTH] ){    sqlite3_result_error_toobig(context);    return;  }else{    z = sqlite3DbMallocRawNN(db, (int)n);    if( z==0 ){      sqlite3_result_error_nomem(context);      return;    }  }  computeJD(&x);  computeYMD_HMS(&x);  for(i=j=0; zFmt[i]; i++){    if( zFmt[i]!='%' ){      z[j++] = zFmt[i];    }else{      i++;      switch( zFmt[i] ){        case 'd':  sqlite3_snprintf(3, &z[j],"%02d",x.D); j+=2; break;        case 'f': {          double s = x.s;          if( s>59.999 ) s = 59.999;          sqlite3_snprintf(7, &z[j],"%06.3f", s);          j += sqlite3Strlen30(&z[j]);          break;        }//.........这里部分代码省略.........
开发者ID:1018824313,项目名称:sqlite,代码行数:101,


示例26: db_seq_create_func

static void db_seq_create_func(    sqlite3_context *context, int argc, sqlite3_value **argv){	Btree *p;	BtShared *pBt;	SEQ_COOKIE cookie;	int i, rc;	sqlite3 *db;	if (argc < 1) {		btreeSeqError(context, SQLITE_ERROR,		    "wrong number of arguments to function "		    "create_sequence()");		return;	}	/*	 * Ensure that the sequence name is OK with our static buffer	 * size. We need extra characters for "seq_" and "_db".	 */	if (strlen((const char *)sqlite3_value_text(argv[0])) >	    BT_MAX_SEQ_NAME - 8) {		btreeSeqError(context, SQLITE_ERROR,		    "Sequence name too long.");		return;	}	db = sqlite3_context_db_handle(context);	/*	 * TODO: How do we know which BtShared to use?	 * What if there are multiple attached DBs, can the user specify which	 * one to create the sequence on?	 */	p = db->aDb[0].pBt;	pBt = p->pBt;	if (!p->connected &&	    (rc = btreeOpenEnvironment(p, 1)) != SQLITE_OK) {		btreeSeqError(context, SQLITE_ERROR,		    "%sconnection could not be opened.", MSG_CREATE_FAIL);		return;	}	/* The cookie holds configuration information. */	memset(&cookie, 0, sizeof(SEQ_COOKIE));	cookie.incr = 1;	sqlite3_snprintf(BT_MAX_SEQ_NAME, cookie.name, "seq_%s",	    sqlite3_value_text(argv[0]));	cookie.name_len = (int)strlen(cookie.name);	if (pBt->dbStorage == DB_STORE_NAMED && btreeSeqExists(context, p,	    cookie.name) == 1) {		btreeSeqError(context, SQLITE_ERROR,		    "Attempt to call sequence_create when a sequence "		    "already exists.");		return;	}	/*	 * TODO: In the future calling create_sequence when there is already a	 *       handle in the cache could be used to alter the "cookie" values.	 *       Don't do that for now, because it requires opening and closing	 *       the DB handle, which needs care if it's being used by	 *       multiple threads.	 */	/* Set the boundary values to distinguish if user set the values. */	cookie.min_val = -INT64_MAX;	cookie.max_val = INT64_MAX;	cookie.start_val = -INT64_MAX;	/* Parse options. */	for (i = 1; i < argc; i++) {		if (strncmp((char *)sqlite3_value_text(argv[i]),		    "cache", 5) == 0) {			if (i == argc ||			    sqlite3_value_type(argv[++i]) != SQLITE_INTEGER) {				btreeSeqError(context, SQLITE_ERROR,				    "%sInvalid parameter.", MSG_CREATE_FAIL);				goto err;			}			cookie.cache = sqlite3_value_int(argv[i]);		} else if (strncmp((char *)sqlite3_value_text(argv[i]),		    "incr", 4) == 0) {			if (i == argc ||			    sqlite3_value_type(argv[++i]) != SQLITE_INTEGER) {				btreeSeqError(context, SQLITE_ERROR,				    "%sInvalid parameter.", MSG_CREATE_FAIL);				goto err;			}			cookie.incr = sqlite3_value_int(argv[i]);		} else if (strncmp((char *)sqlite3_value_text(argv[i]),		    "maxvalue", 8) == 0) {			if (i == argc ||			    sqlite3_value_type(argv[++i]) != SQLITE_INTEGER) {				btreeSeqError(context, SQLITE_ERROR,				    "%sInvalid parameter.", MSG_CREATE_FAIL);				goto err;			}			cookie.max_val = sqlite3_value_int(argv[i]);		} else if (strncmp((char *)sqlite3_value_text(argv[i]),		    "minvalue", 8) == 0) {//.........这里部分代码省略.........
开发者ID:SvenDowideit,项目名称:clearlinux,代码行数:101,


示例27: btreeSeqGetHandle

static int btreeSeqGetHandle(sqlite3_context *context, Btree *p,    int mode, SEQ_COOKIE *cookie){	BtShared *pBt;	CACHED_DB *cache_entry, *stale_db;	int ret;	cache_entry = NULL;	ret = SQLITE_OK;	pBt = p->pBt;	/* Does not support in-memory db and temp db for now */	if (pBt->dbStorage != DB_STORE_NAMED) {		btreeSeqError(context, SQLITE_ERROR,		    "Sequences do not support in-memory or "		    "temporary databases.");		return (SQLITE_ERROR);	}	/*	 * The process here is:	 * - Is the handle already in the cache - if so, just return.	 * - Else, does the sequence already exist:	 *   + No: create the sequence	 * - open a handle and add it to the cache	 *	 * Use the cookie to store the name. If the handle is cached, the value	 * will be overwritten.	 */	sqlite3_mutex_enter(pBt->mutex);	cache_entry =	    sqlite3HashFind(&pBt->db_cache, cookie->name, cookie->name_len);	sqlite3_mutex_leave(pBt->mutex);	if (CACHE_ENTRY_VALID(cache_entry)) {		/* Check to see if the handle is no longer valid. */		if (btreeSeqExists(context, p, cookie->name) == 0) {			btreeSeqRemoveHandle(context, p, cache_entry);			return (DB_NOTFOUND);		}		if (mode == SEQ_HANDLE_OPEN) {			assert(cache_entry->cookie != NULL);			memcpy(cookie, cache_entry->cookie, sizeof(SEQ_COOKIE));			cookie->handle = (DB_SEQUENCE *)cache_entry->dbp;			return (SQLITE_OK);		} else if (mode == SEQ_HANDLE_CREATE) {			cookie->handle = NULL;			return (DB_KEYEXIST);		}	}	/*	 * The handle wasn't found; Get seq handle by open or create the	 * sequence with the given name.	 */	if ((ret = btreeSeqOpen(context, p, cookie)) != 0) {		if (mode == SEQ_HANDLE_CREATE)			ret = btreeSeqCreate(context, p, cookie);	} else if (mode == SEQ_HANDLE_CREATE) {		return DB_KEYEXIST;	}	if (ret != 0) {		if (cookie->handle != NULL)			cookie->handle->close(cookie->handle, 0);		return (ret);	}	/*	 *  We dropped the pBt->mutex after the lookup failed, grab it	 *  again before inserting into the cache. That means there is a race	 *  adding the handle to the cache, so we need to deal with that.	 */	sqlite3_mutex_enter(pBt->mutex);	/* Check to see if someone beat us to adding the handle. */	cache_entry =	    sqlite3HashFind(&pBt->db_cache, cookie->name, cookie->name_len);	if (CACHE_ENTRY_VALID(cache_entry)) {		cookie->handle->close(cookie->handle, 0);		cookie->handle = (DB_SEQUENCE *)cache_entry->dbp;		goto err;	}	/* Add the new handle to the cache. */	if ((cache_entry =	    (CACHED_DB *)sqlite3_malloc(sizeof(CACHED_DB))) == NULL) {		btreeSeqError(context, SQLITE_NOMEM,		    "Memory allocation failure during sequence create.");		ret = SQLITE_NOMEM;		goto err;	}	memset(cache_entry, 0, sizeof(CACHED_DB));	if ((cache_entry->cookie =	    (SEQ_COOKIE *)sqlite3_malloc(sizeof(SEQ_COOKIE))) == NULL) {		btreeSeqError(context, SQLITE_NOMEM,		    "Memory allocation failure during sequence create.");		ret = SQLITE_NOMEM;		goto err;	}	sqlite3_snprintf(	    sizeof(cache_entry->key), cache_entry->key, cookie->name);//.........这里部分代码省略.........
开发者ID:SvenDowideit,项目名称:clearlinux,代码行数:101,


示例28: btreeSeqGetVal

static void btreeSeqGetVal(    sqlite3_context *context, const char * name, int mode) {	Btree *p;	BtShared *pBt;	SEQ_COOKIE cookie;	db_seq_t val;	int rc, ret;	sqlite3 *db;	db = sqlite3_context_db_handle(context);	p = db->aDb[0].pBt;	pBt = p->pBt;	memset(&cookie, 0, sizeof(cookie));	if (!p->connected &&	    (rc = btreeOpenEnvironment(p, 1)) != SQLITE_OK) {		sqlite3_result_error(context,		    "Sequence open failed: connection could not be opened.",		    -1);		return;	}	sqlite3_snprintf(BT_MAX_SEQ_NAME, cookie.name, "seq_%s", name);	cookie.name_len = (int)strlen(cookie.name);	rc = btreeSeqGetHandle(context, p, SEQ_HANDLE_OPEN, &cookie);	if (rc != SQLITE_OK) {		if (rc == DB_NOTFOUND) 			btreeSeqError(context, dberr2sqlite(rc, NULL),			    "no such sequence: %s", name);		else if (rc != SQLITE_ERROR)			btreeSeqError(context, dberr2sqlite(rc, NULL),			    "Fail to get next value from seq %s. Error: %s",			    name, db_strerror(rc));		return;	}	if (cookie.cache == 0) {		/*		 * Ensure we see the latest value across connections. Use		 * DB_RMW to ensure that no other process changes the value		 * while we're updating it.		 */		if ((ret =		    btreeSeqGetCookie(context, p, &cookie, DB_RMW)) != 0) {			btreeSeqError(context, SQLITE_ERROR,			    "Failed to retrieve sequence value. Error: %s",			    db_strerror(ret));			return;		}		if (mode == DB_SEQ_NEXT) {			/* Bounds check. */			if (cookie.used && ((cookie.decrementing &&			    cookie.val - cookie.incr < cookie.min_val) ||			    (!cookie.decrementing &&			    cookie.val + cookie.incr > cookie.max_val))) {				btreeSeqError(context, SQLITE_ERROR,				    "Sequence value out of bounds.");				return;			}			if (!cookie.used) {				cookie.used = 1;				cookie.val = cookie.start_val;			} else if (cookie.decrementing)				cookie.val -= cookie.incr;			else				cookie.val += cookie.incr;			btreeSeqPutCookie(context, p, &cookie, 0);		} else if (!cookie.used) {			btreeSeqError(context, SQLITE_ERROR,			    "Can't call currval on an unused sequence.");			return ;		}		val = cookie.val;	} else {		if (mode == DB_SEQ_CURRENT) {			btreeSeqError(context, SQLITE_ERROR,			    "Can't call currval on a caching sequence.");			return;		}		/*		 * Using a cached sequence while an exclusive transaction is		 * active on this handle causes a hang. Avoid it.		 */		if (p->txn_excl == 1) {			btreeSeqError(context, SQLITE_ERROR,			    "Can't call nextval on a caching sequence while an"			    " exclusive transaction is active.");			return;		}		/* Cached gets can't be transactionally protected. */		if ((ret = cookie.handle->get(cookie.handle, NULL,		    cookie.incr, &val, 0)) != 0) {			if (ret == EINVAL)				btreeSeqError(context, SQLITE_ERROR,				    "Sequence value out of bounds.");			else				btreeSeqError(context, SQLITE_ERROR,				    "Failed sequence get. Error: %s",//.........这里部分代码省略.........
开发者ID:SvenDowideit,项目名称:clearlinux,代码行数:101,


示例29: db_seq_drop_func

static void db_seq_drop_func(    sqlite3_context *context, int argc, sqlite3_value **argv){	Btree *p;	BtShared *pBt;	CACHED_DB *cache_entry;	SEQ_COOKIE cookie;	int mutex_held, rc;	sqlite3 *db;	db = sqlite3_context_db_handle(context);	p = db->aDb[0].pBt;	pBt = p->pBt;	mutex_held = 0;	memset(&cookie, 0, sizeof(cookie));	if (!p->connected &&	    (rc = btreeOpenEnvironment(p, 1)) != SQLITE_OK) {		btreeSeqError(context, SQLITE_ERROR,		    "Sequence drop failed: connection could not be opened.");		return;	}	sqlite3_snprintf(BT_MAX_SEQ_NAME, cookie.name, "seq_%s",	    sqlite3_value_text(argv[0]));	cookie.name_len = (int)strlen(cookie.name);	rc = btreeSeqGetHandle(context, p, SEQ_HANDLE_OPEN, &cookie);		if (rc != SQLITE_OK) {		/* If the handle doesn't exist, return an error. */		if (rc == DB_NOTFOUND) 			btreeSeqError(context, dberr2sqlite(rc, NULL),			    "no such sequence: %s", cookie.name + 4);		else if (rc != SQLITE_ERROR)			btreeSeqError(context, dberr2sqlite(rc, NULL),			"Fail to drop sequence %s. Error: %s",			cookie.name + 4, db_strerror(rc));		return;	}	sqlite3_mutex_enter(pBt->mutex);	mutex_held = 1;	cache_entry =	    sqlite3HashFind(&pBt->db_cache, cookie.name, cookie.name_len);	if (cache_entry == NULL)		goto done;	if (cookie.cache != 0 && db->autoCommit == 0) {		btreeSeqError(context, SQLITE_ERROR,		    "Cannot drop caching sequence in a transaction.");		rc = SQLITE_ERROR;		goto done;	}	sqlite3_mutex_leave(pBt->mutex);	if ((rc = btreeSeqStartTransaction(context, p, 1)) != SQLITE_OK) {			btreeSeqError(context, SQLITE_ERROR,			    "Could not begin transaction for drop.");			return;	}	/*	 * Drop the mutex - it's not valid to begin a transaction while	 * holding the mutex. We can drop it safely because it's use is to	 * protect handle cache changes.	 */	sqlite3_mutex_enter(pBt->mutex);	btreeSeqRemoveHandle(context, p, cache_entry);done:	sqlite3_mutex_leave(pBt->mutex);	if (rc == SQLITE_OK)		sqlite3_result_int(context, SQLITE_OK);}
开发者ID:SvenDowideit,项目名称:clearlinux,代码行数:74,


示例30: seaf_branch_manager_add_branch

intseaf_branch_manager_add_branch (SeafBranchManager *mgr, SeafBranch *branch){#ifndef SEAFILE_SERVER    char sql[256];    pthread_mutex_lock (&mgr->priv->db_lock);    sqlite3_snprintf (sizeof(sql), sql,                      "SELECT 1 FROM Branch WHERE name=%Q and repo_id=%Q",                      branch->name, branch->repo_id);    if (sqlite_check_for_existence (mgr->priv->db, sql))        sqlite3_snprintf (sizeof(sql), sql,                          "UPDATE Branch SET commit_id=%Q WHERE "                          "name=%Q and repo_id=%Q",                          branch->commit_id, branch->name, branch->repo_id);    else        sqlite3_snprintf (sizeof(sql), sql,                          "INSERT INTO Branch VALUES (%Q, %Q, %Q)",                          branch->name, branch->repo_id, branch->commit_id);    sqlite_query_exec (mgr->priv->db, sql);    pthread_mutex_unlock (&mgr->priv->db_lock);    return 0;#else    char *sql;    SeafDB *db = mgr->seaf->db;    if (seaf_db_type(db) == SEAF_DB_TYPE_PGSQL) {        gboolean exists, err;        int rc;        sql = "SELECT repo_id FROM Branch WHERE name=? AND repo_id=?";        exists = seaf_db_statement_exists(db, sql, &err,                                          2, "string", branch->name,                                          "string", branch->repo_id);        if (err)            return -1;        if (exists)            rc = seaf_db_statement_query (db,                                          "UPDATE Branch SET commit_id=? "                                          "WHERE name=? AND repo_id=?",                                          3, "string", branch->commit_id,                                          "string", branch->name,                                          "string", branch->repo_id);        else            rc = seaf_db_statement_query (db,                                          "INSERT INTO Branch VALUES (?, ?, ?)",                                          3, "string", branch->name,                                          "string", branch->repo_id,                                          "string", branch->commit_id);        if (rc < 0)            return -1;    } else {        int rc = seaf_db_statement_query (db,                                 "REPLACE INTO Branch VALUES (?, ?, ?)",                                 3, "string", branch->name,                                 "string", branch->repo_id,                                 "string", branch->commit_id);        if (rc < 0)            return -1;    }    return 0;#endif}
开发者ID:285452612,项目名称:seafile,代码行数:68,



注:本文中的sqlite3_snprintf函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ sqlite3_step函数代码示例
C++ sqlite3_result_value函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。