Niedawno pojawił się artykuł na temat Pythona, dlatego teraz dla odmiany coś na temat Pike’a (Perla zostawiam dla innych). W jednym z poprzednich moich artykułów przedstawiałem, krótko sposób dostępu w RXML do bazy SQL. Teraz chciałbym (równie krótko) przedstawić jak to wygląda od środka (czyli jak to zapisać w Pike’u).
Uaktualnienie!
Pokazała się nowa, stabilna wersja języka Pike (7.2.197). Tutaj można znaleźć więcej infomacji na ten temat. Do sciągnięcia są również źródła oraz binaria dla systemu MS Windows.
Nie ukrywam, że program jest dość trywialny. Nie ma on jednak na celu przedstawienia całości zagadnienia, tylko na przedstawienie kilku kontrukcji języka Pike tj. klas, metod wyłapywania błędów czy też ogólnej budowy skryptu (programiści znający język C++ zauważą pewne podobieństwa)
Skrypt, który nazwałem sqlquery.pike spełnia trzy zadania:
- Łączy się z bazą danych
- Wysyła do niej zapytanie
- Wyświetla wyniki zapytania na ekranie
Do połączenia z bazą danych wykorzystamy klasę Sql. Jest to ogólny interfejs do baz danych SQL (w chwili obecnej obsługuje bazy mysql, postgres, sybase, oracle i odbc). To, jaką bazę chcemy użyć, określamy w URL-u przekazywanym do konstruktora klasy (np. tak wygląda URL łączący z bazą tekstów Andrzeja Waligórskiego: postgres://zuzanka@localhost/aw) gdzie:
- postgres – typ bazy danych
- localhost – lokalizacja (serwer) bazy danych
- aw – nazwa bazy
- zuzanka – użytkownik, łączący się z bazą
URL ten wysyłamy zazwyczaj jako parametr kontruktora klasy. W naszym przypadku, będzie to pierwszy parametr uruchamianego programu. Parametr ten zostanie przekazany do konstruktora klasy Query. Jej początek wygląda następująco:
class Query { inherit Sql.sql; // dziedziczymy po klasie SQL
a jej konstruktor:
void create(string url, string _query) { ::create(url); // wywołujemy kontruktor rodzica myquery = _query; }
Klasa Query zawiera (nie licząc konstruktora) jedną metodę query, która zajmie się przetworzeniem zapytania i wysłaniem wyników ma ekran. Zawiera też metody odziedziczone (tj. jak big_query() i error()) wykorzystane w metodzie query:
int query() { object result; // wynik zapytania (jako obiekt) array indices; // wynik zapytania (jako krotki) // wyślij zapytanie do bazy i przechwyć błędy mixed error = catch { result = ::big_query(myquery); }; // jeśli wystąpi błąd, zaraportuj i wyjdź if (error) { werror("Wystąpił błąd: "+error[0]+"n"); werror(::error()); exit(1); } // wypisz wyniki na ekranie while (indices = result->fetch_row()) { foreach (indices, object ii) { write(ii + "t"); } write("n"); } }
Pozostała nam jeszcze do omówienia funkcja main(). Tu nie ma wiele niespodzianek:
int main(int argc, array(string) argv) { if (argc != 3) { werror("Użycie: sqlquery.pike url queryn"); werror(" url: typ://uzytkownik:haslo@serwer/bazan"); werror(" typ = (postgres, mysql, odbc, sybase, oracle)n"); werror(" query: zapytanie SQLn"); exit(1); } else { object query=Query(argv[1], argv[2]); query->query(); } return 0; }
Całość uruchamiamy podając jako pierwszy parametr URL do bazy. Drugim parametrem jest zapytanie SQL
./sqlquery.pike "postgres://zuzanka@localhost/aw" "select * from aw;"
I jeszcze na koniec stamdardowa garść linków:
- Strona domowa Pike
- Wprowadzenie do programowania w Pike’u
- Opisy klas i metod (w trakcie opracowywania)
Archiwalny news dodany przez użytkownika: eloy.
Kliknij tutaj by zobaczyć archiwalne komentarze.