Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8148837
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 6, 20262026-06-06T14:43:25+00:00 2026-06-06T14:43:25+00:00

In my application,i am using sqlite as a backend(to store data locially). I am

  • 0

In my application,i am using sqlite as a backend(to store data locially).
I am able to insert data into my table.but what i want to do is,want to import all my sqlite data into excel programmatically.And i don’t want to use server for this app.once the excel sheet is generate user should be able to mail that sheet.
Is this possible in iPhone:
Please help me out .

Following is my code to insert data into table:

-(IBAction)Login
{
sqlite3_stmt *stmt;
        char *errorMsg; 
        char *update1 = "insert into Login1 values (?,?,?,?);";
        int x = sqlite3_prepare_v2(database, update1, -1, &stmt, nil);

    if (x == SQLITE_OK) 
    { 
        sqlite3_bind_text(stmt, 1, NULL,-1, NULL);
        sqlite3_bind_text(stmt, 2, [USERID UTF8String],-1, NULL);
        sqlite3_bind_text(stmt, 3, [str1 UTF8String],-1, NULL);
        sqlite3_bind_text(stmt, 4, [str4 UTF8String],-1, NULL);


    } 

    if (sqlite3_step(stmt) != SQLITE_DONE)
        NSLog(@"Error: %@",errorMsg); 
    sqlite3_finalize(stmt);

}

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-06T14:43:27+00:00Added an answer on June 6, 2026 at 2:43 pm

    For the app I have that did this, the SQLite data was fairly large. Therefore, I used a background thread to export all the data to a CSV (comma separated value) file, which Excel can import, and then opened up a mail composer with the CSV file as an attachment. If your data is small, you might not need to use a background thread:

    - (IBAction) export: (id) sender
    {    
        // in my full code, I start a UIActivityIndicator spinning and show a 
        //  message that the app is "Exporting ..."
    
        [self performSelectorInBackground: @selector(exportImpl) withObject: nil];
    }
    

    Here is exportImpl

    - (void) exportImpl
    {
        NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
    
        NSArray* documentPaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSSystemDomainMask, YES);
        NSString* documentsDir = [documentPaths objectAtIndex:0];
        NSString* csvPath = [documentsDir stringByAppendingPathComponent: @"export.csv"];
    
        // TODO: mutex lock?
        [sqliteDb exportCsv: csvPath];
    
        [pool release];
    
        // mail is graphical and must be run on UI thread
        [self performSelectorOnMainThread: @selector(mail:) withObject: csvPath waitUntilDone: NO];
    }
    
    - (void) mail: (NSString*) filePath
    {
        // here I stop animating the UIActivityIndicator
    
        // http://howtomakeiphoneapps.com/home/2009/7/14/how-to-make-your-iphone-app-send-email-with-attachments.html
        BOOL success = NO;
        if ([MFMailComposeViewController canSendMail]) {
            // TODO: autorelease pool needed ?
            NSData* database = [NSData dataWithContentsOfFile: filePath];
    
            if (database != nil) {
                MFMailComposeViewController* picker = [[MFMailComposeViewController alloc] init];
                picker.mailComposeDelegate = self;
                [picker setSubject:[NSString stringWithFormat: @"%@ %@", [[UIDevice currentDevice] model], [filePath lastPathComponent]]];
    
                NSString* filename = [filePath lastPathComponent];
                [picker addAttachmentData: database mimeType:@"application/octet-stream" fileName: filename];
                NSString* emailBody = @"Attached is the SQLite data from my iOS device.";
                [picker setMessageBody:emailBody isHTML:YES];
    
                [self presentModalViewController:picker animated:YES];
                success = YES;
                [picker release];
            }
        }
    
        if (!success) {
            UIAlertView* warning = [[UIAlertView alloc] initWithTitle: @"Error"
                                                              message: @"Unable to send attachment!"
                                                             delegate: self
                                                    cancelButtonTitle: @"Ok"
                                                    otherButtonTitles: nil];
            [warning show];
            [warning release];
        }
    }
    

    And then, I have a class that encapsulates all my SQLite data. This class is the only one that makes sqlite calls. In this class, I have a method for exporting data into a CSV file in my app’s caches directory. The variable sqliteDb in the code above is an instance of this class. Here’s the method to export data:

    -(void) exportCsv: (NSString*) filename
    {
        // We record this filename, because the app deletes it on exit
        self.tempFile = filename;
    
        NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
        // Setup the database object
        sqlite3* database;
    
        // Open the database from the users filessytem
        if (sqlite3_open([self.databasePath UTF8String], &database) == SQLITE_OK)
        {
            [self createTempFile: filename];
            NSOutputStream* output = [[NSOutputStream alloc] initToFileAtPath: filename append: YES];
            [output open];
            if (![output hasSpaceAvailable]) {
                NSLog(@"No space available in %@", filename);
                // TODO: UIAlertView?
            } else {
                NSString* header = @"Source,Time,Latitude,Longitude,Accuracy\n";
                NSInteger result = [output write: [header UTF8String] maxLength: [header length]];
                if (result <= 0) {
                    NSLog(@"exportCsv encountered error=%d from header write", result);
                }
    
                BOOL errorLogged = NO;
                NSString* sqlStatement = @"select timestamp,latitude,longitude,horizontalAccuracy from my_sqlite_table";
    
                // Setup the SQL Statement and compile it for faster access
                sqlite3_stmt* compiledStatement;
                if (sqlite3_prepare_v2(database, [sqlStatement UTF8String], -1, &compiledStatement, NULL) == SQLITE_OK)
                {
                     // Loop through the results and write them to the CSV file
                     while (sqlite3_step(compiledStatement) == SQLITE_ROW) {
                         // Read the data from the result row
                         NSInteger secondsSinceReferenceDate = (NSInteger)sqlite3_column_double(compiledStatement, 0);
                         float lat = (float)sqlite3_column_double(compiledStatement, 1);
                         float lon = (float)sqlite3_column_double(compiledStatement, 2);
                         float accuracy = (float)sqlite3_column_double(compiledStatement, 3);
    
                         if (lat != 0 && lon != 0) {
                             NSDate* timestamp = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate: secondsSinceReferenceDate];
                             NSString* line = [[NSString alloc] initWithFormat: @"%@,%@,%f,%f,%d\n",
                                           table, [dateFormatter stringFromDate: timestamp], lat, lon, (NSInteger)accuracy];
                             result = [output write: [line UTF8String] maxLength: [line length]];
                             if (!errorLogged && (result <= 0)) {
                                 NSLog(@"exportCsv write returned %d", result);
                                 errorLogged = YES;
                             }
                             [line release];
                             [timestamp release];
                         }
                         // Release the compiled statement from memory
                         sqlite3_finalize(compiledStatement);
                     }
                }
            }
            [output close];
            [output release];
        }
    
        sqlite3_close(database);
        [pool release];
    }
    
    -(void) createTempFile: (NSString*) filename {
        NSFileManager* fileSystem = [NSFileManager defaultManager];
        [fileSystem removeItemAtPath: filename error: nil];
    
        NSMutableDictionary* attributes = [[NSMutableDictionary alloc] init];
        NSNumber* permission = [NSNumber numberWithLong: 0640];
        [attributes setObject: permission forKey: NSFilePosixPermissions];
        if (![fileSystem createFileAtPath: filename contents: nil attributes: attributes]) {
            NSLog(@"Unable to create temp file for exporting CSV.");
            // TODO: UIAlertView?
        }
        [attributes release];
    }
    

    My code is exporting a database of location information. Obviously, inside exportCsv, you will need to replace my sqlite calls with ones that are appropriate for your database content.

    Also, the code stores the data in a temporary file. You’ll probably want to decide when to clean out those temp files.

    Obviously, this code was written before ARC was available. Adjust as needed.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I've just started using SQLite and I want to write all my application data
I am developing an Android application using SQLite as backend. I want to make
I have a WPF Application using Fluent NHibernate 1.0 RTM and System.Data.SQLite 1.0.65 that
I am using sqlite in my android application. When i delete all the records
I'm using SQLite in an Android application. In all of my tables I have
I am using SQLite database for my application. The Table Structure Goes Like :
I am trying to build an iPhone application using core data's built in table
I'm trying to port an iPhone application from using SQLite to Core Data. Is
I have a Pylons application using SQLAlchemy with SQLite as backend. I would like
Background information: This application is .NET 4/C# Windows Forms using SQLite as it's backend.

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.