|
|
Bu makalenin farkl� dillerde bulundu�u adresler: English Castellano ChineseGB Deutsch Francais Nederlands Russian Turkce |
Diego Alberto Arias Prad <dariapra(at)yahoo.es> Yazar hakk�nda: Ben Lugo �spanya'da bir Telekominikasyon m�hendisiyim. Linux'u kullanmaya ne
zaman ba�lad���m� kesin olarak hat�rlayam�yorum, 1995 ya da 1996 y�l�ndayd�.
Ondan �nce bir Microsoft Windows kullan�c�s�yd�m ve Linux'un varl���ndan haberdar
de�ildim. �lk kez Linux'u �niversitede bir bilgisayarda g�rd�m. Bana �ok ilgi
�ekici g�r�nd� ve hemen evimdeki bilgisayar�ma kurdum; ilk da��t�m�m Slackware'd�.
T�rk�e'ye �eviri: Okan Ar� <okanari(at)aridersanesi.com> ��erik:
|
TclMySQL k�t�phanesine giri��zet:
Bu makalede nas�l MySQLTcl kuraca��n�z� ve kullanaca��n�z� ��reneceksiniz, Tcl
k�t�phanesi Tcl betiklerinden MySQL veritaban� sunucusuna SQL sorgular� g�ndermenizi
sa�lar (select, insert, delete...). Kullan�lan Tcl, MySQL sunucu ve MySQLTcl k�t�phanesi
versiyonlar� �unlad�r : 8.4.2, 4.0.15 ve 2.40. |
E�er sizin Linux da��t�m�n�z ya da *BSD i�letim sisteminiz paket kurulumunu
destekliyorsa (RPM veya DEB gibi) veya portlar� destekliyorsa (�rne�in Crux
Linux veya FreeBSD), bu y�ntemlerden
birini kullanabilir ve bu b�l�m� atlayabilirsiniz..
E�er siz de "elle" kurma y�ntemini tercih ediyorsan�z a�a��da benim
uygulad���m y�ntem anlat�lm��t�r. Anlat�lanlar bir yol g�sterici olarak g�r�lmelidir,
ad�m ad�m kurulum rehberi olarak de�il. Linux
Mandrake da��t�m� (versiyon 9.2), bash ile:
$ ./configure --with-mysql-lib=/usr/lib $ make $ make install |
$ export CPP=/usr/bin/cpp $ ./configure --with-tcl=/usr/lib/local/tcl8.3 --with-tclinclude=/usr/local/include/tcl8.3 --with-mysql-include=/usr/local/include/mysql --with-mysql-lib=/usr/local/lib/mysql $ make $ make install |
Bu b�l�mde, Tcl programlama yapamayan ama bu makaleye ilgi duyanlar i�in Tcl
Temelleri'ne giri� yapaca��m. Siz zaten bir Tcl programc�s� iseniz bu b�l�m�
atlayabilirsiniz.
Bu �rne�i (ve tabi ki devam eden di�er �rnekleri) Tcl shell (tclsh) kullanarak
yeniden �retebilirsiniz.
Tcl de�i�kenleri set konutu ile yarat�ld�, baz� �rnekler:
% set address {Edison Avenue, 83} Edison Avenue, 83 % set zip_code 48631 48631 |
% set address Edison Avenue, 83 % set zip_code 48631�u anda ekrana address de�i�keninin de�erini yazd�rmak istiyoruz. Bu puts komutu ile ger�ekle�tirilir:
% puts stdout [set address] Edison Avenue, 83stdout parametresi puts komutuna g�nderildi. Bu parametre puts komutuna standart ��kt�y� kullanmas�n� s�yliyor ki bu bizim durumumuz i�in ekran. puts komutuna g�nderilen ikinci parametre[set address]. K��eli parantez i�indeki komut Tcl yorumlay�c�s� taraf�ndan puts komutundan daha �nce yorumlanacakt�r; buna komut de�i�tirme (command substitution) diyoruz. (�evirenin notu : Bu isimlendirmeyi tam �eviremedi�im i�in �ngilizce olarak kullanaca��m bundan sonra). Ayn� olay farkl� bir yolla da yap�labilir:
% puts stdout $address Edison Avenue, 83Bu �rnekte yapt���m�za ise de�i�ken de�i�tirme (variable substitution) diyoruz. (�evirenin notu : Bu isimlendirmeyi bundan sonra �ngilizce olarak kullanaca��m): de�i�ken ad�ndan �nceki $ karakteri variable substitution olmas�n� sa�l�yor.
% puts stdout "the zip code is [set address]" the zip code is 48631 % puts stdout "the zip code is $address" the zip code is 48631 % puts stdout {the zip code is [set address]} the zip code is [set address] % puts stdout {the zip code is $address} the zip code is $addressBu �rnekte �unu g�r�yoruz, e�er grupland�rmak i�in k�me parantezi kullan�l�rsa command ve variable substitution ger�ekle�miyor ama �ift t�rnak kullan�l�rsa ger�ekle�iyor.
% unset address % set address can't read "address": no such variable % unset zip_code % set zip_code can't read "zip_code": no such variable
Katar veri yap�s� �� temel Tcl vei yap�s�ndan birisidir. Bir katar karakterler
k�mesidir. Katar set komutu ile yarat�l�r.
% set surname Westmoreland Westmoreland % set number 46.625 46.625Her iki surname ve number de�i�kenleri katard�r. Katarlar string komutu ile y�netilebilirler, string komutunun genel kullan�m yap�s�(syntax) ��yledir : string i�lem katarde�eri di�erarg�manlar (string operation stringvalue otherargs).Bu kullan�m� nas�l yapaca��m�z� anlatan bir ka� �rnek g�relim:
% string length $surname 12 % set surname [string range $surname 0 3] West % puts stdout $surname West % string tolower $surname westJava veya Pascal'�n aksine, Tcl bir strong-typed programlama dili de�ildir.(�evirenin notu : terimi �ngilizce kullanaca��m.) A�a��daki �rnek bunu g�stermektedir.:
% set number [expr $number + 24.5] 70.125 % string range $number 2 5 .125expr komutu ile, number de�i�keninin 24.5 artt�r�ld�. Bundan sonra string komutu ile number de�i�kenine katar gibi i�lem yapt�r�ld� ve son d�rt karakteri g�r�n�yor.
Tcl listeleri katarlar�n �zel durumudur, listenin elemanlar� �zel karakterler
ile ayr�lm��t�r ve �zel bir yorumlamaya tabi tutulurlar.
% set friends_list {Fany John Lisa Jack Michael} Fany John Lisa Jack Michael % set friends_list [string tolower $friends_list] fany john lisa jack michael % set friends_list fany john lisa jack michaelListe i�lemesine izin veren bir ka� Tcl komutu a�a��dad�r. Baz� �rnekler g�relim.
% lindex 2 $friends_list lisa % lrange $friends_list 2 4 lisa jack michael % set friends_list [lsort -ascii $friends_list] fany jack john lisa michael % set friends_list fany jack john lisa michael % set friends_list [linsert $friends_list 2 Peter] fany jack Peter john lisa michael % string toupper $friends_list FANY JACK PETER JOHN LISA MICHAELSon �rnek listelerin ve katarlar�n ayn� veri yap�s�nda olduklar�n� g�sterir.
Dizi katar de�eri ile indekslenmi� bir liste olarak g�r�lebilir. Biz dizi
�rnekte g�r�ld��� �ekilde yarat�l�r:
% set phone_numbers(fany) 629 629 % set phone_numbers(michael) 513 513 % set phone_numbers(john) 286 286Dizi de�erleri set command ve variable substitution kullan�larak g�sterilebilir; daha �nceki �rnekte g�rd���m�z gibi katar de�eri indeksi parantez ile ayr�l�r.
% set $phone_numers(michael) 513array komutu dizi de�i�keni hakk�nda bilgi d�nd�r�r. Bu komutun yapabilece�i hakk�nda bir ka� �rnek g�relim:
% array size phone_numbers 3 % array names phone_numbers fany john michael
Tcl betikten veritaban�na bir sorgu g�ndermeden �nce veritaban� sunucusuna ba�lant� kurmak gereklidir. Bu b�l�mde nas�l ba�lant� kuraca��m�z� ve ba�lant� problemlerini nas�l a�aca��m�z� g�rece�iz..
Tcl betik�in MySQL veritaban� sunucusuna nas�l ba�land���n� g�steren bir
�rnek g�relim.
0: #!/usr/bin/tclsh8.4 1: 2: package require mysqltcl 3: global mysqlstatus 4: 5: set port {3306} 6: set host {127.0.0.1} 7: set user {john_smith} 8: set password {jsmith_password} 9: 10: set mysql_handler [mysqlconnect -host $host -port $port -user $user -password $password] 11: 12: mysqlclose $mysql_handler
L�tfen sol taraftaki s�tunun Tcl betik�in bir par�a�� olmad���n� yaln�zca
g�sterimi kolayla�t�rmak i�in oldu�unu untmalay�m. Ayr�ca kulland���n�z Linux
dat���m�nda g�re sat�r 0 daki b�l�m�n Tcl shell'ini g�sterecek path olarak ayarlanmas�
gerekti�i unutmayal�m.
Sat�r 0 bu dosyan�n bir Tcl beti�i oldu�unu ve Tcl yorumlay�c�s�n�n neredebulunaca��n�
anlat�r.
2. sat�r Tcl yorumlay�c�s�na komutlar� i�lerken MySQLTcl k�t�phanesinde aramas�n�
s�yler. �rne�in, 10. sat�rda mysqlconnect komutunu g�r�yoruz. E�er 2.
san�rdaki kod olmasayd� Tcl yorumlay�c�s� mysqlconnect komutunu i�lerken
bize komut bulunamad� hatas� verecekti.
5. ve 6. sat�rlarda Tcl beti�in ba�lanmaya �al��aca�� port ve host bilgileri
ayarlan�yor. Bu betikte 3306 numaral� port (ki MySQL sunucusu varsay�lan olarak
bu portu kullanmaktad�r) ve ayn� makine host olarak ayarlanm��.
7. ve 8. sat�rlarda veritaban� kullan�c� ad� ve parolas� ayarlan�yor.
10. sat�rda veritaban� ba�lant�s� sa�lan�yor. mysqlconnect komutunun
��kt�s� ismini bizim verdi�imiz mysql_handler de�i�keninde saklan�yor.
Bu de�i�ken veritaban� ba�lant�s�n�n tutucusu(handler) olacakt�r. Bu tutucu
veritaban�nda sorgulama yapmak ve ayn� zamanda ba�lant�y� sonland�rmak i�in
kullan�lacakt�r, bunu 12. sat�rda g�rebiliyoruz.
Bir �nceki b�l�mde beti�in 3. sat�r� anlatmad�k. �imdi onu anlat�yoruz.
MySQLTcl k�t�phanesi komutlar� hatalar� tutabilmektedir. E�er hata yakalanamazsa,
betik duracakt�r ve bu durum bizi ilgilendirebilir ya da ilgilendirmeyebilir.
Bu y�ntemle beti�i biraz de�i�tirelim.
10: if [catch {mysqlconnect -host $host -port $port -user $user -password $password} mysql_handler] { 11: puts stderr {error, the database connection could not be established} 12: exit 13: } else { 14: mysqlclose mysql_handler 15: }E�er set mysql_handler [mysqlconnect -host $host... komutu bir hata tutarsa, bu hatay� catch komutu yakalar. E�er k�me parantezi i�indeki �al��t�r�lan komut bir hata tutarsa catch komutu 1 d�nd�r�r aksi halde 0 d�nd�recektir. mysql_handler de�i�keni k�me parantezi i�erisindeki komutun ��kt�s�n� saklamaktad�r.
eleman | anlam� |
code | E�er hata yoksa mysqlstatus(code) s�f�rd�r,
ama hata varsa mysqlstatus(code) MySQL sunucusunun hata numaras�na
e�ittir. E�er olu�an hata MySQL sunucusu taraf�ndan yarat�lmam��sa de�er
-1 olur. mysqlstatus(code) de�i�keninin de�eri herhangi bir MySQLTcl k�t�phanesi komutu �al��t�r�ld���nda g�ncellenir. |
command | Son MySQLTcl k�t�phanesi komutu, mysqlstatus(command)'de
saklanan hatay� g�sterir. mysqlstatus(command)'�n de�eri her ba�ar�s�z MySQLTcl komutu sonras�ndan g�ncellenir, yani mysqlstatus(command)'�n de�eri ba�ar�l� MySQLTcl komutu sonras�nda g�ncellenmez. |
message | mysqltcl(message)'�n de�eri her ba�ar�s�z MySQLTcl komutu sonras�nda i�erisinde hata mesaj� bulunduran bir katar ile g�ncellenir. mysqlstatus(command)'u gibi mysqlstatus(message)'un i�eri�i ba�ar�l� MySQLTcl komutlar� sonras�nda g�ncellenmez. |
eleman | anlam� |
nullvalue | SQL sorgusu sonu�lar� g�sterilirken bo� de�eri temsil eden katar de�eridir. Varsay�lan olarak bo� katar kullan�l�r, musqlstatus(nullvalue) herhangi ba�ka bir katar de�erine ayarlanabilir. |
10: catch {mysqlconnect -host $host -port $port -user $user -password $password} mysql_handler 11: if {$mysqltatus(code) != 0} { 12: puts stderr $mysqlstatus(message) 13: } else { 14: mysqlclose mysql_handler 15: }
Belli ki, global dizi mysqlstatus veritaban� ba�lant�s� kurulurken olu�acak hatalar� daha fazla g�stermek i�in kullan�labiliir.
Bu b�l�mde bir �ok temel MySQLTcl k�t�phanesi komutlar� bulunacakt�r ve ben
bunlar�n nas�l kullanu�laca��n� baz� �rnekler ile g�sterece�im. T�m komutlar
hakk�nda bilgi i�in MySQLTcl k�t�phanesi kullan�m k�lavuuzu(man) sayfalar�na
bak�n�z.
Bu b�l�mde i�lenecek komutlar a�a��daki tabloda g�sterilmi�tir. Parametrelerin
alt� �izilmi�tir. E�er bir parametre iki ? aras�nda ise, bu parametrenin opsiyonel
oldu�unu g�sterir, | karakteri ise "veya" anlam�ndad�r.
komut | k�sa a��klama |
mysqlconnect ?option value ...? | veritaban�na ba�lan�r; di�er mysqltcl komutlar�nca kullan�lacak bir tutucu(handler) d�nd�r�r. |
mysqluse handle dbname | MySQL tutucusunu belirli bir veritaban� ile ili�kilendirir. |
mysqsel handle sql_statement ?-list | -flatlist? | veritaban�na SELECT sorgusu g�nderir. |
mysqlexec handle sql_statement | veritaban�na non-SELECT ifadesi g�nderir. |
mysqlclose handle | veritanab� ba�lant�s�n� kapat�r. |
Bu komut "Veritaban� ba�lant�s�" b�l�m�de zaten anlat�ld�. Bu komut ekstra bir parametre kabul eder, daha �nce g�sterilmeyen:-db. Bu parametre -db ile, ileride kullan�larak SQL ifadeleri i�in veritaban� kesinle�tirilir. Bir �rnek g�relim:
% set mysql_handler [mysqlconnect -h 127.0.0.1 -p 3306 \\ -user john_smith -password jsmith_password -db jsmith_database]MySQLTcl komutlar�n�n kullanaca�� mysql_handler veritaban� tutaca��(handler)n�n "hedef" veritanab� jsmith_database olarak adland�r�ld�.
Bu komut MySQL tutaca�� ile ili�kili veritanab�n�n de�i�tirilmesine izin verir.
Bu komut MySQL tutaca�� ile ili�kilendirilmi� veritaban�na SQL select ifadesi
g�derir. E�er sql_statement parametresi bir SQL select ifadesi de�il ise bir
hata olu�acakt�r.
list veya flat_list olabilen bir ���nc� opsiyonel parametre vard�r, Bu parametrenin
komutun ��kt�s�n� nas�l etkiledi�ini g�steren bir �rnek g�relim. MySQL tutucusu
ile ili�kili veirtaban�nda people ad�nda bir tablo oldu�unu ve yap�s�n�n
a�a��daki gibi oldu�unu kabul edelim:
id | first_name | last_ name | phone |
26 | Karl | Bauer | 8245 |
47 | James | Brooks | 1093 |
61 | Roberto | Castro Portela | 6507 |
% mysqlsel $mysql_handler {select first_name, last_name from people order by id asc} -list {Karl Bauer} {James Brooks} {Roberto {Castro Portela}} % mysqlsel $mysql_handler {select first_name, last_name from people order by id asc} -flatlist Karl Bauer James Brooks Roberto {Castro Portela}Birinci �rnekte (-list parameter), komut elemanlar� liste olan bir liste d�nd�r�yor. �kinci �rnekte (-flatlist parameter), komut elemanlar� concatenate edilmi� tek bir liste d�nd�r�yor.
% mysqlsel $mysql_handler {select first_name, last_name from people order by id asc} 3
Bu komut MySQL tutaca�� ile ili�kilendirilmi� veritaban�na SQL non-select
ifadesi g�derir. E�er sql_statement parametresi bir SQL select ifadesi
ise bir hata olu�acakt�r ama hi�bir�ey olmayacakt�r.
Daha �nceki b�l�mde g�sterilen bir �rne�i ele alal�m:
% mysqlexec $mysql_handler {delete from people where id=26} 1 % mysqlsel $mysql_handler {select first_name, last_name, phone from people order by id asc} -list {James Brooks 1093} {Roberto {Castro Portela} 6507} % mysqlexec $mysql_handler \\ {insert into people (id, first_name, last_name, phone) values (58, "Carla", "di Bella", 8925)} 1 % mysqlsel $mysql_handler {select first_name, last_name, phone from people order by id asc} -list {James Brooks 1093} {Carla {di Bella} 8925} {Roberto {Castro Portela} 6507}Elbette delete veya insert harici di�er SQL sorgular� da bu komu tile g�nderilebilir. ��rne�in sat�r g�ncellenebilir (update):
% mysqlexec $mysql_handler {update people set phone=3749 where first_name="James"} 1 % mysqlsel $mysql_handler {select first_name, last_name, phone from people order by id asc} -list {James Brooks 3749} {Carla {di Bella} 8925} {Roberto {Castro Portela} 6507}E�er ifade ba�ar�l� bir �ekilde i�lendiyse, mysqlexec komutu veritaban�na g�nderilen SQL non-select ifadesince etkilenen sat�r say�s�n� d�nd�r�r.
Daha �nce g�rd���m�z gibi, mysqlclose komutu veritanban� ba�lant�s�n� kapat�r. Bu komuta parametre olarak hnagi ba�lant�y� kapatmak istiyorsak onun MySQL tutama��n� verebiliriz.
MySQLTcl k�t�phanesi burada g�sterilen 5 komuttan daha �ok komuta sahiptir. Bu komutlar veritaban� hakk�nda bilgi edinmeye, escaping string'e izin verir, bunlar sorgu olu�turmaya ve i� i�e ge�mi� sorgular olu�turmaya uygundur... �yi bir kaynak, MySQLTcl k�t�phanesinin kurulumunun bir par�as� olan MySQLTcl kullan�m k�lavuzu(man) sayfalar�d�r.
[1] a slightly skeptical view on John K. Ousterhout and Tcl:
http://www.softpanorama.org/People/Ousterhout/index.shtml
[2] a tutorial on Tcl regular expressions:
http://www.mapfree.com/sbf/tcl/book/select/Html/7.html
TclTutor is a free and interactive application for learning Tcl:
http://www.msen.com/~clif/TclTutor.html
MySQL documentation, in various formats (HTML, PDF...):
http://www.mysql.com/documentation/index.html
|
G�rsely�re sayfalar�n�n bak�m�, LinuxFocus Edit�rleri taraf�ndan yap�lmaktad�r
© Diego Alberto Arias Prad, FDL LinuxFocus.org |
�eviri bilgisi:
|
2004-04-28, generated by lfparser version 2.46