Java - Localhost - Veritabani

Başlatan srgnaras, 16 Aralık 2013 - 19:35:23

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

srgnaras


import java.sql.*;

public class baglanti {

public static void main(String[] args) {
try {
String myDriver = "com.mysql.jdbc.Driver";
String db = "jdbc:mysql://localhost:3306/veritabani_1";
Class.forName(myDriver);
Connection baglanti = DriverManager.getConnection(db, "root", "***");

String sorgu = "SELECT * FROM meyve";

Statement st = baglanti.createStatement();
ResultSet rs = st.executeQuery(sorgu);

while (rs.next()) {
String s_ad = rs.getString("ad");
String s_soyad = rs.getString("tür");

System.out.print(s_ad + " " + s_soyad + "\n");
}

st.close();
} catch (Exception e) {
System.err.println("Hata !");
System.err.println(e.getMessage());
}
}

}

Veritabanı konusunda hiçbir şey anlamdım. Elimde iki kaynak var ikisinde de localhost kavramı kullanılsada ne olduğu açıklanmamış. Ayrıca kitaplar Windows ortamı için yazıldığı için Linux üzerinde zaten nerede olduğunu anlatmayacaktı..
Şimdi yukarıdaki kodlara bakın localhost:3306 da (ki yaptığım araştırma sonucunda bu loacalhost'un /var/www olduğunu öğrendim-yanlış olabilir-) veritabani_1.odb adında bir veritabanım var ancak buna ragmen veritabanına bağlanmıyor. Dönen sonuç:
Hata !
Unknown database 'veritabani_1.odb'

Java-Eclipse-Localhost-Veritabani konularında bilgisi olan varsa yardım edebilir mi?
En zengin insan en güçlü arkadaşlara sahip insandır.

furkankalkan

Bu anlatım mysql için.  Bunun için mysql veritabanı kurmanız gerek ya da odb veritabanı için araştırma yapmanız gereken.
Lover
twitter.com/furkan_kalkan1

srgnaras

@dewilman mysql hakkında özel bir bilgim yok sadece belirli bir düzeyde sql bilgim var.
komut satırından mysql veritabanı oluşturmaya çalıştığımda
mysql> CREATE DATABASE veritabanim;
ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'veritabanim'
şeklinde hata dönüyor ve yine localhost orada.. İşte benim odb uzantılı veritabanı yaratmamın sebebi buydu. Ama asıl üstünde çalışmak istediğim mysql ancak elimde belge yok. Bir bilginiz varsa ve paylaşırsanız çok sevinirim.
En zengin insan en güçlü arkadaşlara sahip insandır.

matrax_41

@srgnaras, mysql yapılandırmanla ilgili bir sorunun var sanırım. Erişim izni hatası almışsın.

srgnaras

Buradaki baglanıtıda bulunan forum aracılığla yükleme yapmıştım.
En zengin insan en güçlü arkadaşlara sahip insandır.

matrax_41

mysql mysql --user=kullanıcıadı --password=şifre
şeklinde giriş yaptıktan sonra show-databases; komutunu işletir misin ? İkinci seçenek konsolla değil de phpmyadmin ile giriş yapmayı deneyebilirsin.

srgnaras

#6
srgnaras@pandora:~$ mysql mysql --user=root --password=***
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.5.34-0ubuntu0.12.10.1 (Ubuntu)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show-databases;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-databases' at line

En zengin insan en güçlü arkadaşlara sahip insandır.

heartsmagic

Komutta arada tire işareti yok:

show databases;

Eğer veritabanlarını basarsa tekrar oluşturmayı dener misin?

create database falancaveritabani;

Not: Gerçek parola olmasa bile emin olmak adına verdiğin çıktıdaki parola kısmını gizliyorum.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

srgnaras

#8
srgnaras@pandora:~$ mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 38
Server version: 5.5.34-0ubuntu0.12.10.1 (Ubuntu)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
+--------------------+
2 rows in set (0.00 sec)

mysql> create database falancaveritabani;
ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'falancaveritabani'



edit:
tekrar denedim dikkatli yapmadığım için...
srgnaras@pandora:~$ mysql mysql --user=kullanıcıadı --password=şifre
ERROR 1045 (28000): Access denied for user 'kullanıcıadı'@'localhost' (using password: YES)
srgnaras@pandora:~$ mysql mysql --user=root --password=***
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 40
Server version: 5.5.34-0ubuntu0.12.10.1 (Ubuntu)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> CREATE DATABASE falancaveritabani;
Query OK, 1 row affected (0.00 sec)

En zengin insan en güçlü arkadaşlara sahip insandır.

heartsmagic

Yapmış son denemede. Dikkatlice root ile bağlanman lazım.

Bu arada, ben parolanı kapattıkça sen açıyorsun :) Umarım genelde kullandığın bir parola değildir bu.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

srgnaras

evet heartmagic sürekli kullandığım bir parola değil o yüzden gözükmesinde sakınca görmedim. :)
ikincil olarak veritabanı oluşuyor ancak nereye gidiyor?
son olarak bana bir veritabanı örneği gösterebilirmisiniz.. (tablosu, alanı ...) veya bunu anlatabilecek bir belge.
En zengin insan en güçlü arkadaşlara sahip insandır.

heartsmagic

show databases;
dersen görünmesi lazım. Nereye gidiyor derken sen alt yapıyı mı merak ediyorsun? Alt yapı hakkında fikrim yok ancak vt'ler ve tablolar için şuraya bakabilirsin:
http://dev.mysql.com/doc/refman/4.1/en/database-use.html

Ayrıca birçok örnek de bulabilirsin bu konuda.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

sem

#12
Anladığım kadarı ile veri tabanı ve mantığı genel anlamda tam olarak kafanızda şekillenmemiş durumda. Bununla ilgili bir çok belge bulabilirsiniz, RDBMS ya da İVTYS nedir diye arattığnızda... Ben kısaca girizgah oluşturayım sizin için. (Basit kısımlardan da bahsedeceğim, "bu kadarını da biliyoruz herhalde" diye düşünmeyin, forumun doğası gereği  ilerde başka arkadaşlarımızın da işine yarayabilecek şekilde yazacağım, bu parantezden yazının uzun olacağını anlayabiliyoruz =)).

İngilizcesi: RDBMS: Relational Database Management System
Türkçesi:   İVTYS    : İlişkisel Veri Tabanı Yönetim Sistemi.

Veri Tabanı

En basit deyimi ile veri tabanı, isminde belirtildiği gibi verileri saklamanızı sağlar. Tüm anlatımlardaki basit örneklerden birisi olan telefon rehberiniz bir veri tabanıdır. Dijital olsa da olmasa da veri tabanıdır. Çünkü verilerinizi burada saklayabilirsiniz. Elbette bir telefonda bulunan ya da kağıtta tutulan veriler bir firma ya da bir uygulama için ihtiyaç duyulan veri tabanını karşılayamaz. Daha büyük veri tabanlarına ihtiyaç duyulur. Veri tabanının tek görevi ihtiyaca göre veriyi saklamaktır. Yukarıda kısaltması ve uzun açıklaması verilen ibarenin yani İVTYS'nin sadece VT kısmıdır bu. Yani Veri Tabanı. Burayı aklımızda tutuyoruz =). Verilerimizi saklayacak bir "ŞEY"e ihtiyacımız var. Buradaki şeyin karşılığı günümüzde veri tabanıdır.

Veri Tabanı Yönetim Sistemi

Verilerimizi saklayacağımız veri tabanı da belirttiğim gibi ihtiyaca göre şekilleniyor. Büyük ya da karmaşık verileri, kağıtlarda, ufak boyutlu dosyalarda metin olarak vs. saklayamıyoruz. Çünkü veri büyüdükçe bu verilerin yönetimi zorlaşıyor. Hatta milyar satırlık veriler oluşuyor. Böyle verileri insanın el yordamı ya da tek tek kendisinin işlemesi gibi bir durum söz konusu olamaz. İşlemek ile kastım ise yine ihtiyaca yönelik işlemler. Sakladığımız verileri, "bir verim var bu burada dursun" diye bir yere koyup bırakamıyoruz. Örneğin bir internet sitesi/forum açmışsanız, bir kullanıcı, şifresini değiştirmek isteyebilir. Bu durumda bu kullanıcının verisini güncelleme ihtiyacı duyabiliyorsunuz. Ya da birisi internet sitenize gelip istenmeyen içerikli bir resim koyduysa, kişinin verisini silme ihtiyacınız doğuyor. Bir kişinin ileti atabilmesi ise zaten başlı başına yeni bir veri demek, yani yeni veri ekleme ihtiyacı hissediyorsunuz. Gibi gibi ihtiyaçlar doğuyor ve insanın yapabileceği işler olmaktan çıkıyor bu işlemler, hem veri boyutu hem de diğer olanaklar doğrultusunda. Bu nedenle oluşturulan veri tabanının yani bir önceki paragrafta bahsettiğimiz "şey"i  yönetecek bir birime ihtiyaç duyuluyor. Buna veri tabanı yönetim sistemi diyoruz. Veri tabanı yönetim sistemleri de tamamen ismindeki ibareyi yapmakla sorumludurlar. Veri tabanında bulunan verilerin yönetimi ve verilere erişim. Bu kısımda yukarıda kısaltması verilen Veri Tabanı Yönetim Sistemi oluyor; VTYS.

Bir üstteki paragrafın en kısa açıklaması ise; VTYS'nın amacı, istemciye (istemci bir kişi ya da bir uygulama olabilir) VT'de saklanan verilerde ihtiyaca göre işlemler yapma olanağı sağlamaktır. Burada "İŞLEMLER" konusunda açık kapı bırakıp ileride tekrar dönelim.

İlişkisel Veri Tabanı Yönetim Sistemi

İVTYS'nin VTYS'si bu şekilde. Başındaki İ yani İlişkisel kısmı ise VT'de bulunan yani veri tabanımızdaki bilgilerin ne şekilde saklandıkları ile ilgilidir. Veriler yapısal tablolarda saklanıyorsa ve bu tablolar arasında ihtiyaca göre ilişki tanımlanabiliyorsa bu Veri Tabanı Yönetim Sistemi, verilerimizi İlişkisel olarak saklayabiliyor diyebiliriz.

Örneğin bu forum veri tabanında "üyeler" diye tablo olduğunu düşünün ve üye bilgilerimizin bu tabloda saklandığını düşünün. Bir de "iletiler" diye bir tablo düşünün ve foruma atılan her iletinin bu tabloda saklandığını düşünün. Siz forumda bir konuyu açtığınızda, her bir iletinin solunda, iletiyi kimin attığı bilgisi yer yalıyorsa, demek ki, bir yerlerde iletiler tablosu ile uyeler tablosu arasında bir bağlantı kurulmuş demektir.  İlişki ile kasdedilen tamamen bu gerçek hayatta bulunan ilişkinin, veriye yansıtılması olarak düşünülebilir.

SQL

SQL yukarıdaki bahsettiğimiz eko sistemin neresinde duruyor?  SQL "yapısal sorgulama dili" demek Türkçe olarak. Yukarıda bir açık kapı bırakarak bir takım işlemlerin yapıldığını söylemiştik. Bu işlemler topluluğu veri tabanı jargonunda CRUD olarak bilinir. Tüm terimlerde olduğu gibi bu da İngilizce bir takım kelimelerin kısaltması ya da baş harfinden oluşur. Veri tabanında yapacaklarımız olarak açık kapı bıraktığımız işlemlerimizi, yukarıdaki forum örneğinden devam ederek açıklayalım keza üstünden geçmiştik aslında;

CRUD: Create - Read - Update - Delete

Create: Foruma bir ileti atmak için ya da yeni bir üye kaydı için veri tabanınıza yeni bir veri eklemeniz gerekmektedir. Bu Create olarak tanımlanır, yeni bir veri ekleme SQL'de INSERT işlemine tekabul eder.

Read : Bu da mevcut bir verinin okunmasını açıklamak için kullanılır. Forumda bir kullanıcıyı tıkladığınızda kişinin özelliklerini daha doğrusu bilgilerini görebilirsiniz. Bu Read olarak tanımlanır ve SQL'de SELECT işlemine tekabul eder.

Update: Forumda iletinizi tekrar düzenlediğinizde, mevcut bilgilerinize yenisini eklediğinizde, kullandığnız işletim sisteminizde değiştirdiğinizd, vs gibi işlemler için kullanılır yani mevcut veri üzerinde yapılan değişiklikler/güncellemeler.  SQL'de UPDATE işlemine tekabul eder.

Delete: Bu da yine aynı isminde olduğu gibi bir verinin silinmesi  gibi işlemler için kullanılır. Test için yaratılan bir kullanıcının silinmesi örnek olarak verilebilir ve SQL'de DELETE işlemine takabul eder.

Verilerimiz üzerinde bu işlemleri yapabilmek isteriz ve bu aşamada Veri Tabanı Yönetim Sisteminden beklentimiz bize bu işlemleri yapabilmek üzere, veri tabanına yani daha anlaşılır hali ile verimize erişim sağlamasıdır. Yani buradan şunu anlıyoruz, bizim Veri Tabanı Yönetim Sisteminde bağlanmamız gerekli. Burası da yazının ileriki bölümlerinde gerekli olacak;

DML & DDL

Elbette bir Veri Tabanı Yönetim Sistemden beklentilerimiz sadece bunlar olamaz. Çünkü dikkat ederseniz yukarıdaki işlemler tamamen veri ile ilgili. Yani bulunan veriler üzerinde değişiklik yapma durumlarını kapsıyor. INSERT, UPDATE, DELETE, SELECT vs gibi salt veriye yönelik işlemler. Bu şekilde sadece veriye yönelik yapılan işlemlere veri tabanı jargonunda DML deniliyor. Bu da yine tüm diğer kısaltmalarda olduğu gibi İngilizce bir ibarenin kısaltması; Data Manipulation Manguage. Türkçesini;  Veri İşleme Dili gibi olarak düşüne bilirsiniz.

Şu an VTYS'den beklediğimizden büyük bir kısma değindik ama asıl önemlisi; verileri işleme tamam da, bu verinin nasıl bir yapıya olduğunu tanımlamaya değinmedik. Örneğin SQL'deki CREATE işlemi ile tabloyu yaratarak, verinin nasıl bir formatta ve hangi türlere sahip olacağını belirleyebiliyorduk hatırlarsınız. Buna da jargonda DDL diyorlar; Data Definition Language. Verinin kendisi değil yapısı üzerindeki tüm işlemler DDL olarak tanımlanır; örneğin bir tabloya ALTER işlemi uygulayarak sayısal bir alanı metinsel bir alana çevirerek veri yapısında değişiklik yapabilirsiniz. Bu gibi CREATE, ALTER vs gibi veri yapısı yani tablo ve şema yapılarını ilgilendiren komutlara da DDL diyoruz.

SQL eko sistemin tam olarak burasında duruyor. Veri Tabanı Yönetim Sistemi ile anlaşma konusu (DDL & DML). Bir kullanıcı ya da uygulama, istediklerini yaptırabilmek adına Veri Tabanı Yönetim Sistemi ile haberleşebilmeli.  En yaygın kullanılan veri tabanı yönetim sistemleri de, SQL tabanlıdır ve SQL komutları kullanarak Veri Tabanı Yönetim Sistemimizle haberleşebiliriz. Elbet farklı yöntemler de bulunuyor bunları konu dışı bırakıyoruz.

Şu elimizde bunlar var; bir veri tabanımız var ve içerisinde bizim veri yapısını belirlediğimiz formatta veriler bulunuyor. Yani DDL ve DML kullanarak yaratılmış veriler ve DML & DDL komutlarını gönderebileceğimiz bir yönetim sistemi var. Aradaki boşluk ve yukarıdaki açık kapımız ise DML & DDL'i VTYS sayesinde kullanıyoruz fakat aradaki bağlantımız açık şu an.

VTYS Erişim

Tüm yazı boyunca bahsettiğimiz veri tabanı yönetim sistemi, aslında bir anlık mesajlaşma, medya oynatıcı, bir metin editörü vs vs vs yani herhangi bir uygulama gibi sıradan bir uygulamadan ibaret ve her sıradan uygulama gibi sıradan bir kurulum ve ayar (jargona göre configuration) aşaması var.  Veri Tabanı Yönetim Sistemine örnek olarak MySQL'i verecek olursak MySQL de herhangi bir uygulama gibi sadece bir uygulamadan ibaret;

sudo apt-get install vlc[code]

yazarak VLC medya oynatıyıcı kurduğumuz gibi;

[code]sudp apt-get install mysql-server


Komutu ile de MySQL Veri Tabanı Yönetim Sistemini kurabiliyoruz. İstediğimiz ayarları ise; /etc/mysql/my.cnf dosyası sayesinde yapabiliyoruz. VLC'de bir video izlerken alt yazı dilini ayarladığımız gibi, sıradan bir uygulama özelliği aslında bu da. Herhangi bir uygulamada yaptığımız gibi Veri Tabanı Yönetim Sistemlerinde de kurduğumuz uygulamanın ayarlarını yapabiliyoruz, ihtiyaca göre.

Elimizde bir uygulama var, ve bu uygulamaya bağlanma/iletişime geçme ihtiyacı duyuyorsak, genel olarak bir kaç soru çıkıyor ortaya;

1-) İletişime geçmek istediğimiz uygulama (örneğimizde veri tabanı yönetim sistemi) hangi bilgisayarda duruyor?
2-) VYTS'nin durduğu bilgisayara ne şekilde erişeceğim, bir PC'ye erişmek için o bilgisayara ait bir tanımlayıcıya ihtiyacım var, tabi ki bu da bildiğimiz IP adresi. Yani ikinci soru VTYS'nin bulunduğu bilgisayarın IP adresi. A.B.C.D örnek IP adresimiz olsun.
3-) Bir bilgisayar üzerinde çalışan bir uygulamaya erişmek için sadece IP adresi tekillik oluşturmaz. Sadece IP'sini bilmek, bir bilgisayardaki herhangi bir uygulamaya erişmek için yeterli değildir. İletişim kurulmasında, tekillik sağlayan IP adresi + Port ikilisidir. VTYS için değil, herhangi bir işlem için de bu böyledir. Yani üçüncü sorumuz bağlanacağım A.B.C.D adresinin hangi portuna bağlanacağım?

(Bu gibi ayarlamaları MySQL için yukarıda belirttiğimiz my.cnf dosyasından yapabiliyoruz.)

1. sorunun cevabı eğer "Üzerinde çalıştığım bilgisayar" ise eğer yani VTYS uzaktaki bir bilgisayarda değil de üzerinde bulunduğumuz bilgisayarda çalışıyorsa eğer o zaman 2. sorunun cevabını  localhost olarak verebiliriz.

Bu açıklamaya göre localhost şudur diyebiliriz; localhost bilgisayarınızın kendisidir. Bir ağ (network) uzmanı değilim ama bildiğim kadarı ile şöyle açıklayabilirim; kendi bilgisayarınızda bir sunucu ya da benzeri bir uygulamaya bağlanmanız gerektiği durumda, herhangi bir yönlendirici (router) ya da modem vs. gibi hiç bir birim olmadan, doğrudan kendi bilgisayarınızda çalışan uygulamalara bağlanabileceğiniz tanımlamadır. Aslında 127.0.0.1 adresine tekabul eder;

cat /etc/hosts

komutu ile localhost'un tanımlamasını görebilirsiniz. Yani kafanızı karıştırmasına gerek yok, kendi bilgisayarınıza bağlanırken kullanabileceğiniz bir adres olarak düşünebilirsiniz ve bu gerçekten kendi bilgisayarınız olduğundan, kablosuz ağı kapatıp ve ethernet kablosunu çekip yani bilgisayarınızın tüm ağ ile iletişimini keserek de bağlanabileceğiniz yerel sunucu olarak düşünebilirsiniz.

Yukarıdaki üç sorunun cevabını biliyorsak eğer, VTYS'ye bağlanabiliriz demektir. Zaten amacımız VTYS'ye bağlanabilmekti. Siz kendi verdiğiniz kod örneğinde JDBC ile veri tabanına bağlanmışsınız;

String db = "jdbc:mysql://localhost:3306/veritabani_1";

jdbc:mysql: JDBC ile MySQL'e bağlanıyorsunuz.
localhost:3306: Kendi bilgisayarınıza, 3306. porttan bağlanıyorsunuz demek ki VTYS bu portu dinliyor. JDBC sayesinde dinlenen bu porta bağlanarak, VTYS'ye sorgu gönderebiliyorsunuz.

JDBC nasıl yapıyor bu işlemi? Bu tarafa da girmek niyetinde değilim, JDBC'de kullanıdğı sürücüler sayesinde VTYS'lere bağlanarak, bağlandığı VTYS ile aynı dilden konuşabiliyor olarak düşünebiliriz şimdilik. JDBC Detayına girmeyeceğim dediğim gibi.

JDBC ile bir veri tabanına bağlandık, ve DDL ve DML'lerimizi kendisine göndererek, istediğimiz her işlemi yapabiliyoruz olarak varsayalım. Örneğin şu komutu gönderelim kendisine;


create table tablom
(
     birinci_alan date
,    ikinci_alan   varchar(20)
)
;


Anekdot: DDL'ler commit işlemine ihtiyaç duymaz.

Artık bir tablomuz var ve bu tabloda DML işlemleri uygulayabiliyoruz. Bizim için SQL sorgularına yanıt alabildiğimiz farazi daha doğrusu mantıksal bir birim var; tablo. Tablo bizim için verilerimizin içerisinde duracağı, yapısını bizim belirleyeceğimiz ve verilerde istediğimiz DML'i çalıştıracağımız bir birim. Bizim için önemli olan bu. Arka planda olduğu umrumuzda bile değil (geliştiricilerden bahsediyorum =)=)). Ben bir tablo yaratmak istedim ve tablom artık orada duruyor. Veri Tabanı Yönetim Sistemime bağlanıyorum;

select * tablom;

dediğimde verime ulaşıyorsam ya da insert, update, delete işlemlerini ya da truncate vs. işlemlerimi yapıyorsam, benim açımdan sorun yok. Çünkü benim muhattabım VTYS. Ben ona bağlanırım, tablo yaratmasını söylerim,  VTYS de "peki abi" der, dediğimi yapar. Benim orada tablom var ve insert, update, delete işlemlerim, ya da DDL ile yapacağım yapısal değişiklikleri yapmak VTYS sorumluluğunda. Bunun için kurdum çünkü onu, işi bu; dediğimi yapmak.

Normalde bu şekilde, ama onun açısından bakarsak =) yani tablo benim için mantıksal bir birim elbette. Ama bilgisayarı açıyorum, kapıyorum, VTYS'yi yeniden başlatıyorum vs. yine her bağlandığımda tablom orada duruyorsa, o zaman tablo benim için mantıksal olsa da VTYS bunu fiziksel bir yerlerde saklamalı. Aksi halde bilgisayarımı kapattığımda VTYS'nin tekrar tabloya ulaşamaması gerekli ya da tabloda bulunan verilere.

VTYS için fiziksel olan birim de ikilik (binary) dosyalardır. Biraz farklı bir VTYS'ye yönelelim, en pahalısından bahsedelim =) Oracle'a geçiş yapalım. Oracle da aynı MySQL gibi bir Veri Tabanı Yönetim Sistemidir. Aslında firmanın adı Oracle; Oracle DB ise Oracle firmasının Oracle ismindeki veri tabanı yönetim sistemidir. Ek olarak MySQL de Oracle firmasına aittir.

Tüm SQL tabanlı VTYS'lerde olduğu gibi Oracle'da da Create table komutu ile tablolarımızı yaratabiliyoruz. Yukarıda sinyalini verdiğimiz gibi, bizim için mantıksal birer birim olan tablolar aslında VTYS'ler için "bir yerden sonra" birer ikilik (binary) fiziksel dosyadan ibarettir. 

Oracle'da mantıksal olarak daha geniş bir kavram daha vardır. Tablespace. Tablespace'ler diğer mantıksal birimleri kapsayan, kapsül birimleri olarak düşünülebilir.


create table tablom
(
     birinci_alan date
,    ikinci_alan   varchar(20)
)
;


Dediğimizde, varsayılan tablspace'te bir tablo yaratmış oluruz. Ama tabloyu belirli bir tablesapce içerisinde yaratmak istiyorsak;


create table tablom
(
     birinci_alan date
,    ikinci_alan   varchar(20)
)
tablesapce my_tbs
;


sözdizimi ile tabloyu yaratmamız gerekir. Buradaki "tablespace" ibaresi "create" gibi, özel bir sözcüktür ve bir tablespace ismi bekler. Biz örnek olarak my_tbs verdik. Bu şekilde tablo yarattığımızda, tablo my_tbs ismindeki tablespace'te yaratılır. Tabi bu komutu verebilmek için öncelikle "create tablespace" komutu ile my_tbs isminde bir tablesapce yaratmamız gerekir.

Tablespace'i örnek vermemin bir amacı var. Gördüğünüz gibi tablespace de table'den farksız şekilde bizim için yine mantıksal olan ve diğer birimleri (tablo, indeks vs...) kapsayan bir küme gibi. Ama tablespace'i table'dan ayıran özellik ise tablespace'i mantıksal birimin en sonu gibi düşünebiliriz. Tablespace'lerden sonraki birimler, artık datafile'lardır. Datafile ise tablespace bilgilerinin tutulduğu birimlerdir ama datafile fiziksel bir işletim sistemi dosyasıdır. VTYS datafile'ları oluşturur ve tablespace bilgilerini bu fiziksel dosyalarda saklar. Tamamen mantıksal birim olan tablolar, indeksler vs gibi birimler de tablespace'ler içerisinde bulunuyordu. Dolaylı olarak bizim için mantıksal olan birimlerim hepsi datafile'larda saklanmış olur.

Bahsettiğimiz gibi tablespace mantıksal birimlerde son nokta olmuş oluyor. Tüm mantıksal birimler tablespace'ler içerisinde yaratılıyor, tablespace'ler ise işletim sistemi dosyası olarak datafile'lar da tutuluyor. Yani bizim için mantıksal olan tüm birimler, VTYS için, işletim sistemine özel, ikilik (binary) dosyalardan ibaret. Bu bilgiler dosyaya yazıldığı için, elbetteki sistemi açıp kapatmamız, vtys'yi açıp kapatmamız, verilerimizin kaybolmasına neden olmuyor; harddiske kaydettiğimiz bir fim, her bilgisayarımızı açtığımızda nasıl yerinde duruyorsa, bu mantık ile insert ettiğimiz veriler de aynı şekilde yerli yerinde (datafile'larda) durmuş oluyor.

Bahsettiğim tablespace birimi Oracle'a has bir konuydu. Tablespace yanılmıyorsam MySQL'de de bulunuyor. Ama fiziksel ve mantıksal birimlerim datafile'larda birleşmesi tüm VTYS'ler için geçerli.

Yani marka bağımsız konuşacak olursak mantık şu şekilde; VTYS'de mantıksal bir takım birimler bulunuyor. Bunlar kullanıcıların ya da Veri Tabanı Yöneticilerinin oluşturduğu birimler.  Bu mantıksal birimleri eninde sonunda VTYS harddiske dosyalar ve dizinler (VTYS'nin rahatına geldiği şekilde) halinde kaydediyor ve yönetimi buradan hallediyor. Bu fiziksel olarak yaratılan birimler sadece VTYS sorumluluğunda. Yani ben bir insert işlemi uyguladığımda sorgumu VTYS'ye gönderirim ve cevabını ondan alırım, arkada datafile üzerinde yapılan işlemler beni ilgilendirmez, sadece VTYS'yi ilgilendirir.

MySQL sistemi için konuşacaksak; "benim için mantıksal olan birimler, fiziksel olarak yani harddisk üzerinde nerede saklanıyor acaba?" diye soruyorsanız, my.cnf içerisinde nereyi ayarlamışsanız, orada duruyordur. Dizini görmek için;

grep datadir /etc/mysql/my.cnf

komutunu yürütebilirsiniz. Daha sonra MySQL'in veri tabanı birimlerini nasıl bir yapı ile sakladığını merak ediyorsanız, bu komutun çıktısında gösterilen dizine girerek inceleyebilirsiniz.

Temel olarak bu şekilde. Ama * tabi ki çok temel bir anlatım oldu bu. Çünkü VTYS'den beklenenler burada anlatılanlarla sınırlı değil elbette, kullanıcılar var, A.C.I.D. Kavramı var, yetkiler var, datafile yönetimi var vs vs vs gibi benim de bilmediğim bir çok özellik daha vardır mutlaka. Ben temel seviyede merak eden arkadaşlara yol göstermek istedim sadece.

Mesleğinizi bilemiyorum elbette. Fakat veri tabanı konusunda datafile yönetimi, mantıksal birimlerin disk üzerinde fiziksel olarak saklanması, veri tabanı performansı, veri tabanı stres testleri vs. gibi işlemlerin hiç birisi geliştiriciden beklenmez. Bu işlere Veri Tabanı Yöneticisi arkadaşlar bakarlar sağ olsunlar =). Java kodladığınız için geliştirici olmak istediğinizi düşündüm ve anekdot geçmek istedim bu görev dağılımı bilgisini. Ama yaptığınız elbetteki çok normal, güzel ve olması gereken bir şey bence de. İnsanın çalıştığı birimleri tanımak istemesi ve tanıması güzel. Ben de sadece geliştirici olarak çalışıyorum.

NOT1 : Biraz aceleye geldi yazdı maalesef, detaya giremediğim noktalar oldu. Anlam kayması, düşük cümle olduğunu düşündüğünüz ibareleri sorarsanız, vakit buldukça cevaplamaya çalışacağım.

NOT2: Format kötü çıktı ileti olarak gönderince, tekrar düzenledim, formatta gariplip sezerseniz, iletinin anlaşılabilirliği açısından belirtirseniz düzeltme geçeyim bu konuda da.

İyi çalışmalar
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?