Экспорт таблицы sqlite3 в текстовый файл из программы на C - PullRequest
0 голосов
/ 05 августа 2010

Я имею базу данных в Sqlite3.Я делаю все свои операции, написав приложение на Linux C (API: sqlite3_exec).В настоящее время Iam пытается экспортировать базу данных в текстовый файл.Может ли кто-нибудь предложить операторы запроса для того же.

1 Ответ

3 голосов
/ 05 августа 2010

Это не совсем то, что вы ищете, но довольно близко. Это выведет ваш запрос в формате 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...