Advertise here

Advertise here

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

getting unknon error fromDB wrapper

elumalaiivanelumalaiivan chennaiPosts: 1New Users Noob
hello every one!

In one of my application i am handling lots of data related operations for the persistency am using Sqlite DB to simplofy the process of operations like fetching and inserting i depends on the wrapper.

The problem is after some long time of usage, when i am trying to fetch the data, am not getting result instead it says db unknown error after some course of time

this is the wrapper i am using please let me know whats wrong in it.. how can i do it better?

// Set the database file path.
NSString * databasePath;

if (!_localDB) {

databasePath = [self.documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@Products/%@",self.databaseFilename]];


// NSString * databaseName = @ToyotaDB_PSA.sqlite;
databasePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:self.databaseFilename];


// Initialize the results array.
if (self.arrResults != nil) {
[self.arrResults removeAllObjects];
self.arrResults = nil;
self.arrResults = [[NSMutableArray alloc] init];

// Initialize the column names array.
if (self.arrColumnNames != nil) {
[self.arrColumnNames removeAllObjects];
self.arrColumnNames = nil;
self.arrColumnNames = [[NSMutableArray alloc] init];

// Open the database.
BOOL openDatabaseResult = sqlite3_open([databasePath UTF8String], &sqlite3Database);
if(openDatabaseResult == SQLITE_OK) {
// Declare a sqlite3_stmt object in which will be stored the query after having been compiled into a SQLite statement.
sqlite3_stmt *compiledStatement;

// Load all data from database to memory.
BOOL prepareStatementResult = sqlite3_prepare_v2(sqlite3Database, query, -1, &compiledStatement, NULL);
if(prepareStatementResult == SQLITE_OK) {
// Check if the query is non-executable.
if (!queryExecutable){
// In this case data must be loaded from the database.

// Declare an array to keep the data for each fetched row.
NSMutableArray *arrDataRow;

// Loop through the results and add them to the results array row by row.
while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
// Initialize the mutable array that will contain the data of a fetched row.
arrDataRow = [[NSMutableArray alloc] init];

// Get the total number of columns.
int totalColumns = sqlite3_column_count(compiledStatement);

// Go through all columns and fetch each column data.
for (int i=0; i<totalColumns; i++){
// Convert the column data to text (characters).
char *dbDataAsChars = (char *)sqlite3_column_text(compiledStatement, i);

// If there are contents in the currenct column (field) then add them to the current row array.
if (dbDataAsChars != NULL) {
// Convert the characters to string.
[arrDataRow addObject:[NSString stringWithUTF8String:dbDataAsChars]];

// Keep the current column name.
if (self.arrColumnNames.count != totalColumns) {
dbDataAsChars = (char *)sqlite3_column_name(compiledStatement, i);
[self.arrColumnNames addObject:[NSString stringWithUTF8String:dbDataAsChars]];

// Store each fetched data row in the results array, but first check if there is actually data.
if (arrDataRow.count > 0) {
[self.arrResults addObject:arrDataRow];
else {
// This is the case of an executable query (insert, update, ...).

// Execute the query.
BOOL executeQueryResults = sqlite3_step(compiledStatement);
if (executeQueryResults == SQLITE_DONE) {
// Keep the affected rows.
self.affectedRows = sqlite3_changes(sqlite3Database);

// Keep the last inserted row ID.
self.lastInsertedRowID = sqlite3_last_insert_rowid(sqlite3Database);
else {
// If could not execute the query show the error message on the debugger.
NSLog(@DB Error: %s, sqlite3_errmsg(sqlite3Database));

_isError = YES;

else {
// In the database cannot be opened then show the error message on the debugger.
NSLog(@%s, sqlite3_errmsg(sqlite3Database));

// Release the compiled statement from memory.


// Close the database.


Sign In or Register to comment.