0
Iam在Sqlite3中有一个数据库。我正在通过在Linux C(API:sqlite3_exec)中编写应用程序来完成我所有的操作。目前Iam试图将数据库导出到文本文件。任何人都可以提出同样的查询语句。将sqlite3表导出为C程序的文本文件
Iam在Sqlite3中有一个数据库。我正在通过在Linux C(API:sqlite3_exec)中编写应用程序来完成我所有的操作。目前Iam试图将数据库导出到文本文件。任何人都可以提出同样的查询语句。将sqlite3表导出为C程序的文本文件
这不完全是你正在寻找,但非常接近。这会将您的查询以JSON格式输出到outbuf,我没有在片段中包含b64encode()
。
int sqlite3_json(sqlite3_stmt *s, char *outbuf, size_t blen, size_t *used)
{
int nuse=0;
int res,i=0,ncolumn=sqlite3_column_count(s);
nuse+=snprintf(outbuf+nuse,blen-nuse,"[\n");
while(SQLITE_ROW==(res=sqlite3_step(s))) {
nuse+=snprintf(outbuf+nuse,blen-nuse, "\t{\n");
for(i=0;i<ncolumn;++i) {
nuse+=snprintf(outbuf+nuse,blen-nuse,
"\t\t\"%s\" : ", sqlite3_column_name(s,i));
switch (sqlite3_column_type(s,i)) {
case SQLITE_INTEGER:
nuse+=snprintf(outbuf+nuse,blen-nuse,
"%d,\n", sqlite3_column_int(s,i));
break;
case SQLITE_FLOAT:
nuse+=snprintf(outbuf+nuse,blen-nuse,
"%e,\n", sqlite3_column_double(s,i));
break;
case SQLITE_TEXT:
nuse+=snprintf(outbuf+nuse,blen-nuse,
"\"%s\",\n", sqlite3_column_text(s,i));
break;
case SQLITE_BLOB:
nuse+=snprintf(outbuf+nuse,blen-nuse,"\"");
nuse+=b64encode((char*) sqlite3_column_blob(s,i),
sqlite3_column_bytes(s,i),
outbuf+nuse,blen-nuse);
nuse+=snprintf(outbuf+nuse,blen-nuse,"\",\n");
}
}
nuse-=2; // trailing ',\n'
nuse+=snprintf(outbuf+nuse,blen-nuse, "\n\t},\n");
if(blen < nuse) {
printf("buffer overflow\n");
break;
}
}
if(i&&res==SQLITE_DONE) nuse-=2; //trailing ',\n'
nuse+=snprintf(outbuf+nuse,blen-nuse,"\n]\n");
if(used) *used=nuse;
return res;
}
我意识到经过一番更仔细的阅读,这不完全是你在哪里寻找。您还需要http://www.sqlite.org/faq.html#q7 – Erik 2010-08-05 13:04:23