проблема при вставке данных с libpq в c - PullRequest
2 голосов
/ 11 июля 2020

У меня есть код, который считывает данные из некоторых файлов, а затем пытается добавить эти данные построчно в базу данных. Проблема в том, что когда я запускаю программу, она просто добавляет первую строку данных в базу данных, а затем появляется Segmentation fault (core dumped).

void add_line_to_db(char *line, PGconn *connection, PGresult *re){

    char query[50];
    split(line);

    sprintf(query, "INSERT INTO fp_stores_data_test "\
                    "VALUES (%s,'%s','%s',%s,%s,%s,%s,%s);"
                    ,splitted_line[0],splitted_line[1]
                    ,splitted_line[2],splitted_line[3]
                    ,splitted_line[4],splitted_line[5]
                    ,splitted_line[6],splitted_line[7]);

    re = PQexec(connection,query);

    if(PQresultStatus(re) != PGRES_TUPLES_OK){
        printf("%s\n", PQresultErrorMessage(re));
    }

    PQclear(re);
}



void read_file_line_by_line(char *filename, char *address, PGconn *connection, PGresult *re){

    char file_address[50];
    strcpy(file_address, address);
    strcat(file_address, filename);
    FILE *file = fopen(file_address, "r");
    char line[256];

    while(fgets(line, sizeof(line), file)){

        add_line_to_db(line, connection, re);   
        printf("this line!\n");
    }

    fclose(file);
}



int main(){

    //char address = "/tmp/final_project/";
    PGconn *con;
    PGresult *res;
    con = make_connection();
    
    //make_connection(con);
    create_table_fp_stores_data(res, con);

    char file_name[20];
    list_dir_files("/tmp/final_project/");  
    for(int i=0; i<number_of_files; i++){

        strcpy(file_name, dir_content[i]);
        read_file_line_by_line(file_name, "/tmp/final_project/", con, res);


    }

    return 0;
}


Массив splitted_data представляет собой двумерный глобальный массив символов, который будет смена на каждые 1009 л *. хотя функция add_line_to_db завершится для первого l oop, но printf("line line\n"); после этого не запустится. Я пытаюсь избежать перегрузки, и тогда я не хочу помещать здесь весь свой код, но, с другой стороны, я не знаю, в чем именно проблема, поэтому я не могу поместить сюда определенные строки c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...