/*  A Query to find types of each column. */
     str = (char *)malloc(sizeof(char) * 255);
      memset(str, 0, 255);
      strcat(str, "SELECT ");
      for(loopVar = 0; loopVar < noOfColumns; loopVar++)
      {
        strcat(str, colNames[loopVar]);
        if(loopVar < (noOfColumns -1))
              strcat(str,",");
      }

The problem is, perhaps, in the query created through this loop. An extra
',' will get appended after the last column name. that is if you have two
columns called column1 and column2 so your query will be
SELECT column1,column2, FROM... //(note ',' after column2)

I may be wrong for more or less I've forgotten "C"; but personally I think
the sqlite should be throwing exception...

Thanks & Regards
Taleeb bin Waquar

*Hum Mashriq Ke "Miskeenon" Ka Dil Maghrib men Ja Atka Hai!!*




On Thu, Feb 9, 2012 at 3:51 PM, bhaskarReddy <uni...@gmail.com> wrote:

>
> HI Friends,
>
>          I dont know why the sqlite3_step getting core dumped.
>
>  #include <stdio.h>
>  #include <stdlib.h>
>  #include "sqlitedb1.h"
>  #include <string.h>
>  #include <sqlite3.h>
>  #include <sys/types.h>
>  #include <sys/stat.h>
>  #include <fcntl.h>
>
>  int db_retrieve_row(char *db_name, char *table_name, int num_of_keys, char
> * col_names[],column_value_t * col_values);
>
> int main(void)
> {
>      column_type_t enm[2];
>   //   int retVal;
>      char *col_name[3];
>      char *db_name = "LR6002.db";
>      char *table_name = "ONTTable";
>      column_value_t col_val[3];
>
>      enm[0] = COLUMN_TYPE_INT;   // slotId
>      enm[1] = COLUMN_TYPE_STRING;
>
>      col_val[0].number = 1;
>      col_val[1].number = 2;
>      col_val[2].number = 3;
>    /* Array of Column Names. */
>     col_name[0] = "slotId";
>     col_name[1] = "ponChannelId";
>     col_name[2] = "onuType";
>
>   db_retrieve_row(db_name, table_name, 3,  col_name,col_val);
>   return 0;
>  }
>  int db_retrieve_row(char *db_name, char *table_name, int num_of_keys, char
> * col_names[],column_value_t * col_values)
>  {
>     sqlite3 *db;
>     sqlite3_stmt *stmt;
>     int status = 0,loopVar,noOfColumns;
>     char *query = NULL,**colNames,*str;
>     int  retVal,*colType;
>
>     retVal = sqlite3_open(db_name, &db);
>     if(retVal) {
>         fprintf(stderr,"Can't  open database: %s\n",sqlite3_errmsg(db));
>         sqlite3_close(db);
>         exit(1);
>     }
>    /* A Query to find the number  of columns in the table. */
>    query = (char *)malloc(sizeof(char) * 255);
>    memset(query,0,255);
>    strcat(query, "SELECT * FROM ");
>    strcat(query, table_name);
>    strcat(query, ";");
>
>    status = sqlite3_prepare_v2(db,query,strlen(query) + 1, &stmt, NULL);
>    if(status != SQLITE_OK) {
>        printf("Prepare error: %s\n", sqlite3_errmsg(db));
>        exit(1);
>    }
>    noOfColumns = sqlite3_column_count(stmt);
>    if(SQLITE_OK != sqlite3_finalize(stmt))
>    {
>         printf("The prepared statement is Not deleted.\n");
>    }
>    free(query);
>    query = NULL;
>
>      /* A Query to find the Names of each column. */
>      query = (char *)malloc(sizeof(char) * 255);
>     memset(query,0,255);
>      strcat(query, "SELECT * FROM ");
>      strcat(query, table_name);
>      strcat(query, ";");
>
>      //stmt = NULL;
>      status = sqlite3_prepare_v2(db,query,strlen(query) + 1, &stmt, NULL);
>     if(status != SQLITE_OK) {
>         printf("Prepare error: %s\n", sqlite3_errmsg(db));
>          exit(1);
>      }
>
>      colNames = (char **)malloc(sizeof(char));
>      memset(colNames,0,1);
>
>       for(loopVar = 0; loopVar < noOfColumns; loopVar++)
>       {
>           colNames[loopVar] = (char *)malloc(sizeof(char) * 20);
>           memset(colNames[loopVar], 0, 20);
>            strcat(colNames[loopVar],sqlite3_column_name(stmt, loopVar));
>       }
>       if(SQLITE_OK != sqlite3_finalize(stmt))
>       {
>          printf("The prepared statement is Not deleted.\n");
>       }
>       free(query);
>      query = NULL;
>
>  /*  A Query to find types of each column. */
>      str = (char *)malloc(sizeof(char) * 255);
>       memset(str, 0, 255);
>       strcat(str, "SELECT ");
>       for(loopVar = 0; loopVar < noOfColumns; loopVar++)
>       {
>         strcat(str, colNames[loopVar]);
>         if(loopVar < (noOfColumns -1))
>               strcat(str,",");
>       }
>       strcat(str, " FROM ");
>       strcat(str, table_name);
>       strcat(str, ";");
>
>       status=sqlite3_prepare_v2(db,str,strlen(str)+1, &stmt, NULL);
>       if (status != SQLITE_OK) {
>          printf("prepare error:%s\n",sqlite3_errmsg(db));
>          exit(1);
>      }
>      sqlite3_step(stmt);       //Causing Segmentation Fault. //
>      colType = (int *)malloc(sizeof(int) * noOfColumns);
>      for(loopVar = 0; loopVar < noOfColumns; loopVar++){
>          colType[loopVar] = sqlite3_column_type(stmt, loopVar);
>          printf("Column Types = %d\n",colType[loopVar]);
>       }
>      if(SQLITE_OK != sqlite3_finalize(stmt))
>      {
>         printf("The prepared statement is Not deleted.\n");
>      }
>      free(query);
>      query = NULL;
>
> }
>
> And the API 'sqlite3_column_type" always returning 5, i.e., NULL.
>
>
> Can any one tell me what was the problem that i did.
>
>
> Regards,
> Bhaskar.
>
> --
> View this message in context:
> http://old.nabble.com/sqlite3_step-getting-core-dumbed.-tp33292180p33292180.html
> Sent from the SQLite mailing list archive at Nabble.com.
>
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to