· 9 years ago · Mar 19, 2017, 06:14 PM
1#include<stdio.h>
2#include<string.h>
3#include<stdlib.h>
4#include<libpq-fe.h>
5
6void doSQL(PGconn *conn, char *command)
7{
8 PGresult *result;
9
10// printf("%s\n", command);
11
12 result = PQexec(conn, command);
13// printf("status is %s\n", PQresStatus(PQresultStatus(result)));
14// printf("#rows affected %s\n", PQcmdTuples(result));
15// printf("result message: %s\n", PQresultErrorMessage(result));
16
17 switch(PQresultStatus(result)) {
18 case PGRES_TUPLES_OK:
19 {
20 int m, n;
21 int nrows = PQntuples(result);
22 int nfields = PQnfields(result);
23 printf("number of rows returned = %d\n", nrows);
24 printf("number of fields returned = %d\n", nfields);
25 for(m = 0; m < nrows; m++) {
26 for(n = 0; n < nfields; n++)
27 printf(" %s = %s(%d),",
28 PQfname(result, n),
29 PQgetvalue(result, m, n),
30 // rozmiar pola w bajtach
31 PQgetlength(result, m, n));
32 printf("\n");
33 }
34 }
35 }
36 PQclear(result);
37}
38
39
40
41int main(void)
42{
43 char nazwa_pliku[25];
44 char login_uzyt[25];
45 char haslo_uzyt[30];
46 char baza_uzyt[25];
47 int plik_petla=0;
48 FILE* plik;
49 puts("Witaj w systemie zarzadzania baza danych PostgreSQL \n");
50 do
51 {
52 printf("\nPodaj nazwe pliku \n");
53 scanf("%s", nazwa_pliku);
54 plik = fopen(nazwa_pliku, "r");
55 if(plik == NULL)
56 {
57 printf("Blad otwarcia pliku, sprobuj ponownie");
58 }
59 else
60 {
61 plik_petla=1;
62 }
63 } while(plik_petla==0);
64
65 PGconn *myconnection;
66 char connectexec[150];
67 do
68 {
69 strcpy(connectexec,"host=localhost port=5432 dbname=" );
70 puts("Podaj nazwe bazy danych:");
71 scanf("%s", baza_uzyt);
72 strcat(connectexec,baza_uzyt);
73 strcat(connectexec," user=");
74 puts("Podaj login do bazy danych:");
75 scanf("%s", login_uzyt);
76 strcat(connectexec,login_uzyt);
77 strcat(connectexec," password=");
78 puts("Podaj haslo do bazy danych:");
79 system("stty -echo");
80 scanf("%s", haslo_uzyt);
81 system("stty echo");
82 strcat(connectexec,haslo_uzyt);
83 // pr�ba po��czenia
84 //myconnection = PQconnectdb("host=localhost port=5432 dbname=login_uzyt user=login_uzyt password=haslo_uzyt");
85 myconnection = PQconnectdb(connectexec);
86 // sprawdzamy status po��czenia
87 if(PQstatus(myconnection) == CONNECTION_OK)
88 {
89 printf("connection made\n");
90 // informacje o polaczeniu
91 printf("PGDBNAME = %s\n",PQdb(myconnection));
92 printf("PGUSER = %s\n",PQuser(myconnection));
93 printf("PGPASSWORD = ********\n");
94 printf("PGHOST = %s\n",PQhost(myconnection));
95 printf("PGPORT = %s\n",PQport(myconnection));
96 printf("OPTIONS = %s\n",PQoptions(myconnection));
97 }
98 else
99 {
100 printf("connection failed: %s\n", PQerrorMessage(myconnection));
101 puts("SPROBUJ PONOWNIE");
102 }
103// w razie utraty polaczenia wywolanie
104// PQreset(myconnection);
105// zamyka polaczenie i nawiazuje je raz jeszcze
106// z dotychczasowymi parametrami
107 }while(PQstatus(myconnection) != CONNECTION_OK);
108
109 printf("\nTworze tabele i dodaje rekordy z pliku %s ... \n", nazwa_pliku);
110
111 char nazwa_pliku_tabeli[20];
112 int pozycja_kropki;
113 char * p = strchr(nazwa_pliku, '.'); //lokalizacja kropki w nazwie pliku
114 pozycja_kropki = p - nazwa_pliku;
115 strncpy(nazwa_pliku_tabeli, nazwa_pliku, pozycja_kropki); //przypisuje nazwe tabeli (juz bez .)
116
117 char dropTable[30];
118 strcat(dropTable, "DROP TABLE IF EXISTS ");
119 strcat(dropTable, nazwa_pliku_tabeli);
120 doSQL(myconnection, dropTable);
121
122 char krotka[30][50];
123 /*char lp[3];
124 char tytul[25];
125 char rezyser_imie[15];
126 char rezyser_nazwisko[20];
127 char scenariusz_imie[15];
128 char scenariusz_nazwisko[20];
129 char rok_produkcji[4];
130 char kraj_produkcji[15];
131 char gatunek[20];
132 char ogarniczenie_wiekowe[2];
133 char dystrybucja[30]; */
134 char line[200];
135 const char srednik[2] = ";";
136 fgets(line, sizeof line, plik);
137 char *token;
138 token = strtok(line, srednik);
139 int iter = 0;
140 while(token != NULL)
141 {
142 strcpy(krotka[iter], token);
143 token = strtok(NULL, srednik);
144 printf(" \n %s \n", krotka[iter]);
145 iter++;
146 }
147 int ilosckolumn = iter;
148 printf("Rozmiar tablicy krotka: %ld", sizeof(krotka));
149 char createTable[300];
150 strcat(createTable, "CREATE TABLE ");
151 strcat(createTable, nazwa_pliku_tabeli);
152 strcat(createTable," ( id SERIAL PRIMARY KEY, ");
153 strcat(createTable, krotka[0]);
154 strcat(createTable, " VARCHAR(20) NOT NULL UNIQUE, "); //bo rozni sie obecnoscia UNIQUE od pozostalych
155 for(iter=1;iter<ilosckolumn-1;iter++)
156 {
157 strcat(createTable, krotka[iter]);
158 strcat(createTable, " VARCHAR(20) NOT NULL, "); //srodkowa czesc zapytania, gdzie sa przecinki
159 }
160 strcat(createTable, krotka[ilosckolumn-1]);
161 strcat(createTable, " VARCHAR(20) NOT NULL ); "); //koniec zapytania
162 doSQL(myconnection,createTable);
163
164
165
166 PQfinish(myconnection);
167 fclose(plik);
168 return 0;
169}