Is it possible to find the data type, even if the table doesn't have data.  
That means, my requirement is, 

1. I want to find the number of columns in the table. ( I already done.)
2. I want to find the names of the columns. (I already done.)
3. I want to find the data types. Because, if it is an integer i'll use
s***_bind_int(), else if it is test i'll use s***_bind_text().

Now if the table is empty, i want to find the data types and according to
that i want to fill the row.

So is there any way to find the data types even if the  table is empty.
(i.e., Table is there, columns and their names are there but no data in that
table.)


Regards,
Bhaskar.


Marcus Grimm wrote:
> 
> 
> On 09.02.2012 13:12, bhaskarReddy wrote:
>>
>> Thank you. Its working.
>>
>> But why i am getting   sqlite3_column_type returning 5.
>>
> 
> I can only guess:
> 
> a) because you have no data in that table.
> b) probably you have no known type defined in table
>     definition and sqlite does a conversion anyhow.
> c) is sqlite3_step(stmt); really required here ?
>     what is the result of step ? is it SQLITE_ROW ?
>     If not, probably sqlite3_column_type doesn't make much sense.
> 
> 
> Marcus
> 
> 
>>
>>
>>
>> Marcus Grimm wrote:
>>>
>>> try changing this:
>>>
>>> colNames = (char **)malloc(sizeof(char));
>>>
>>> into something like
>>>
>>> colNames = (char **)malloc(sizeof(char * ) * noOfColumns);
>>>
>>>
>>> On 09.02.2012 11:21, bhaskarReddy 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.
>>>>
>>> _______________________________________________
>>> 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
> 
> 

-- 
View this message in context: 
http://old.nabble.com/sqlite3_step-getting-core-dumbed.-tp33292180p33293053.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

Reply via email to