2012-08-07 4 views
11

मुझे SQLite कमांड लाइन उपकरण में .dump फ़ंक्शन के अस्तित्व के बारे में पता है, और पायथन के पास iterdump कमांड है जो कि डंप फ़ंक्शन का अनुकरण करता है।क्या सी/सी ++ में एसक्यूएल स्टेटमेंट्स को SQLite डेटाबेस को प्रोग्रामेटिक रूप से परिवर्तित करना संभव है?

क्या कोई मानक एपीआई कॉल या सी/सी ++ रैपर है जो प्रोग्राम की दृष्टि से .dump कार्यक्षमता प्रदान करता है?

+0

डी ओह! [यह प्रश्न] देखें (http://stackoverflow.com/questions/75675/how-do-i-dump-the-data-of-some-sqlite3-tables)। –

उत्तर

8

एपीआई किसी भी डंप समारोह (http://www.sqlite.org/capi3ref.html) है प्रतीत नहीं होता है, लेकिन आप के द्वारा अपने डंप का निर्माण कर सकते हैं:

  • एक नया कार्य बनाना है कि *

  • SQLite के स्रोत कोड में प्रदान की डंप फ़ंक्शन का उपयोग किसी फ़ाइल के लिए sqlite3_exec() या sqlite3_get_table() के अपने बफर परिणाम उपयोग करें और यह डंप हो जाएगा, तो आप इसे (shell.c) में पा सकते हैं।

संपादित करें: इस नमूने

/* 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

आपने मुझे अपने आप को लात मार दिया है - "मैं इस सी उपकरण के व्यवहार का अनुकरण कैसे करूं जिसमें मेरे पास सी या सी ++ में स्रोत कोड है?" ओह। :) – dlanod

+0

@dlanod: मैंने जवाब में नमूना कोड जोड़ा – TOC

3

आप एक SELECT * FROM sqlite_master सभी तालिकाओं और सूचकांक प्राप्त करने के लिए (प्रत्येक पंक्ति एक type स्तंभ सूचकांक के लिए तालिकाओं के लिए 'table' और 'index' हो जाएगा, और एक sql स्तंभ है कि उस तालिका/सूचकांक बनाने के लिए इस्तेमाल एसक्यूएल बयान है क्या कर सकते हैं)।

फिर sqlite_master, SELECT * उन लोगों से में पाया हर तालिका के लिए (प्रत्येक sqlite_master पंक्ति एक name स्तंभ है) और तालिकाओं में सभी डेटा लिखें।

अधिक जानकारी के लिए SQLite FAQ और command line shell पृष्ठों को देखें।

0

जोड़ा जा रहा है मैं अगर वहाँ इसके लिए पूर्व निर्मित उपकरण हैं पता नहीं है, लेकिन आप इसे अपने आप को लागू कर सकते हैं।

सबसे पहले, मास्टर टेबल को पढ़कर स्कीमा प्राप्त करें। इसके बाद आपके पास डेटाबेस स्कीमा (तालिका के नाम और कॉलम) होंगे। आप स्वचालित रूप से सभी डेटा को पढ़ने और इसके लिए एसक्यूएल बनाने में सक्षम होंगे। इसे लागू करने के लिए बहुत मुश्किल नहीं होना चाहिए।

संबंधित मुद्दे