2012-08-07 9 views
11

SQLite komut satırı aracında .dump işlevinin varlığını biliyorum ve Python, .dump işlevini öykünen bir iterdump komutuna sahip.SQLite veritabanını C/C++ içindeki SQL deyimlerine programlı olarak dönüştürmek mümkün mü?

Standart bir API çağrısı veya .dump işlevselliğini program aracılığıyla sağlayan bir C/C++ sarmalayıcısı var mı?

+0

D'oh! [Bu soru] konusuna bakın (http://stackoverflow.com/questions/75675/how-do-i-dump-the-data-of-some-sqlite3-tables). –

cevap

8

Api herhangi dökümü fonksiyonunu (http://www.sqlite.org/capi3ref.html) sahip görünmüyor, ancak ederek dökümü oluşturabilirsiniz:

  • Yeni bir fonksiyon yaratma olduğunu *

  • SQLite kaynak kodunda sağlanan dökümü işlevini kullanın Dosya sqlite3_exec() veya sqlite3_get_table() sizin tampon sonucunu kullanmak ve onu dökümü olacak, onu (shell.c) 'de bulabilirsiniz.

Düzenleme: bunun için önceden yapılmış aletler varsa bilmiyorum, ama bunu kendiniz uygulayabilirsiniz bu numuneyi

/* TODO : This is just a sample code, modify it to meet your need */ 
void select_and_dump_sqlite3_table(sqlite3 *dbh) 
{ 
    FILE *dump_file; 
    int i; 
    sqlite3_stmt *stmt; 

    dump_file = fopen(path_to_dump_file, "w"); 
    if (dump_file == NULL) { 
     /* Error handling with errno and exit */ 
    } 

    sqlite3_prepare_v2(dbh, "SELECT name, address, phone FROM Person", 
         0, &stmt, NULL); 
    /* dump columns names into the file */ 
    for (i = 0; i < 3; i++) { 
     fprintf (dump_file, "%30s | ", sqlite3_column_name(stmt, i)); 
    } 
    printf ("\n"); 

    /* Dump columns data into the file */ 
    while (SQLITE_ROW == sqlite3_step(stmt)) { 
     for (i = 0; i < 3; i++) { 
      fprintf (dump_file, "%30s | ", sqlite3_column_text (stmt, i)); 
     } 
     printf ("\n"); 
    } 
    /* We're ready to leave */ 
    sqlite3_finalize (stmt); 
} 
+0

Kendime tekme atmamı sağladım - "C veya C++ kaynak koduna sahip bu C aracının davranışını nasıl taklit ederim?" Duh. :) – dlanod

+0

@dlanod: i Cevap için örnek kod eklendi – TOC

3

Bir SELECT * FROM sqlite_master (her satır o tablo/dizin oluşturmak için kullanılan sql deyimi içerir endeksleri için tablolar için 'table' ve 'index' olacak type sütunu ve bir sql sütunu vardır tüm tabloları ve endeksleri almak için yapabileceğiniz).

sonra onlardan sqlite_master, SELECT * bulunan her bir tablo için (her sqlite_master satır name sütun vardır) ve tablolarda tüm verileri yazmak.

Daha fazla bilgi için SQLite FAQ ve command line shell sayfalarına bakın.

0

ekleme.

İlk önce, ana tabloyu okuyarak şemayı alın. Bundan sonra veritabanı şemasına sahip olacaksınız (tablo isimleri ve sütunlar). Tüm verileri otomatik olarak okuyabilecek ve bunun için SQL oluşturabileceksiniz. Bunu uygulamak çok zor olmamalı.

İlgili konular