2010-08-05 47 views
0

Iam在Sqlite3中有一個數據庫。我正在通過在Linux C(API:sqlite3_exec)中編寫應用程序來完成我所有的操作。目前Iam試圖將數據庫導出到文本文件。任何人都可以提出同樣的查詢語句。將sqlite3表導出爲C程序的文本文件

回答

3

這不完全是你正在尋找,但非常接近。這會將您的查詢以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; 
} 
+0

我意識到經過一番更仔細的閱讀,這不完全是你在哪裏尋找。您還需要http://www.sqlite.org/faq.html#q7 – Erik 2010-08-05 13:04:23