<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Korhan Ozturk - Kişisel Yazılım Günlüğü</title>
	<atom:link href="http://korhanozturk.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://korhanozturk.com</link>
	<description>&#34;Paylasmak Guzeldir&#34;</description>
	<lastBuildDate>Tue, 29 Nov 2011 12:59:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Java SE 7 ile Gelen Yenilikler</title>
		<link>http://korhanozturk.com/java-se-7-ile-gelen-yenilikler/</link>
		<comments>http://korhanozturk.com/java-se-7-ile-gelen-yenilikler/#comments</comments>
		<pubDate>Sun, 23 Oct 2011 21:29:52 +0000</pubDate>
		<dc:creator>Korhan</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Automatic Resource Management with Java 7]]></category>
		<category><![CDATA[Java 7]]></category>
		<category><![CDATA[Java 7 Özellikleri]]></category>
		<category><![CDATA[Java SE 7]]></category>
		<category><![CDATA[Java SE 7u1]]></category>
		<category><![CDATA[JDK 7 Features]]></category>
		<category><![CDATA[JDK7]]></category>
		<category><![CDATA[JRE 7]]></category>
		<category><![CDATA[Strings in Switch]]></category>

		<guid isPermaLink="false">http://korhanozturk.com/?p=100</guid>
		<description><![CDATA[Merhabalar, Java SE Development Kit (JDK) 7 duyurulalı 6 aydan fazla zaman oldu. JDK 6&#8242;nın sunulduğu 2006 yılından beri yeni bir sürüm çıkarmayan Java&#8217;nın üreticisi Sun Microsystems (artık Oracle firmasına bağlı tabi) doğal olarak yazılımcının beklentisini iyice yükseltti. Java 7 ile birlikte Java Virtual Machine&#8217;den yeni I/O API&#8217;sine; yeni swing component&#8217;lardan yazılımcının işini kolaylaştırmayı hedefleyen <a href='http://korhanozturk.com/java-se-7-ile-gelen-yenilikler/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>Merhabalar,<br />
Java SE Development Kit (JDK) 7 duyurulalı 6 aydan fazla zaman oldu. JDK 6&#8242;nın sunulduğu 2006 yılından beri yeni bir sürüm çıkarmayan Java&#8217;nın üreticisi Sun Microsystems (artık Oracle firmasına bağlı tabi) doğal olarak yazılımcının beklentisini iyice yükseltti. Java 7 ile birlikte Java Virtual Machine&#8217;den yeni I/O API&#8217;sine; yeni swing component&#8217;lardan yazılımcının işini kolaylaştırmayı hedefleyen dil syntax&#8217;ındaki geliştirmelere kadar pek çok yenilik de biz programcılara tanıtıldı. Genelde kod yazma işini kolaylaştırmak ve JVM&#8217;i daha performanslı çalışır hale getirmek üzere hazırlanan bu geliştirmeler, kullanıcıların beklentisine sunuldu. Her ne kadar, bu yeni Java platformunu kullanalı çok uzun zaman olmasa da bu yazımda, kullandığım ya da kullanışlı olduğuna inandığım jdk 7 ile yeni gelen bazı özelliklere kısaca değineceğim.<br />
<strong>String tipindeki değişkenlerin switch blokları içinde kullanımı</strong><br />
Bildiğiniz gibi Java 6 ve öncesine kadar String tipinde tanımlanmış bir değişkenin farklı değerlerini karşılaştırmak istediğimizde bunu if &#8211; else blokları içersinde &#8220;equals(String str)&#8221; methodu yardımıyla gerçekleştiriyorduk. Java 7 ile birlikte artık String tipindeki değişkenleri de Integer tipindekiler gibi Switch cümlecikleri içersinde karşılaştırabiliyoruz. Son derece gerekli olduğuna inandığım bu yeni geliştirmeyi basitçe şu şekilde örneklendirebiliriz:</p>
<p><em>Java 7&#8242;den önce</em></p>
<pre class="brush:java">
String mevsim="";
		if(mevsim.equals("yaz")){
			//sıcak
		}
		else if(mevsim.equals("sonbahar")){
			//yağmurlu
		}
		else if(mevsim.equals("kıs")){
			//soguk
		}
		else{
			//ılık
		}
	}
</pre>
<p><em>Java 7&#8242;den sonra</em></p>
<pre class="brush:java">
switch(mevsim){
		case "yaz"://sıcak
		break;
		case "sonbahar": //yagmur
		break;
		case "kıs" ://soguk
		break;
		default :
			//ilkbahar
		}
</pre>
<p><strong>Try-Catch Bloklarında otomatik Kaynak Yönetimi</strong><br />
Pek çok Java&#8217;yla yazılım geliştiren developer&#8217;ların klasik yöntemidir bir kaynağı try-catch blokları içersinde açıp, düzenleyip sonrasında da finally blogu içinde kapatmak. JDK 7 ile birlikte bu uygulama da rafa kalkacak gibi görünüyor.<br />
<em>Java 7&#8242;den önce</em></p>
<pre class="brush:java">
InputStream istream = null;
	File sampleTxtFile = new File("sample.txt");
	try{
		istream = new FileInputStream(sampleTxtFile);
		/*read and process file
		 *
		 *
		 */

	}
	catch(IOException e){
		e.printStackTrace();
	}
        finally{
		if(istream!=null){
			istream.close();
		}
	}
</pre>
<p><em>Java 7&#8242;den sonra</em></p>
<pre class="brush:java">
InputStream istream = null;
		File sampleTxtFile = new File("sample.txt");
		try(istream = new FileInputStream(sampleTxtFile)){		

			/*read and process file
			 *
			 *
			 */

		}
		catch(IOException e){
			e.printStackTrace();
		}
</pre>
<p>Java 7 ile gelen bir diger küçük yenilik de artık binary tipi sayıların yazılımı ve derlenebilmesi oldu. Daha önceleri Integer için sadece 16 (hexadecimal) ve 8 (octal) tabanlı değerler desteklenirken; Java 7 ile birlikte &#8217;0b&#8217; (veya &#8217;0B&#8217;) prefix&#8217;ini kullanarak binary değerler elde edilebilir. Örnek olarak:</p>
<p>private int binaryValue=0b0010;<br />
System.out.println(binaryValue); //Ekrana 2 olarak basılır.</p>
<p>Ayrıca <a href="http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Double.html">double</a> tipindeki sayısal sabitlerin <em>underscore</em> (&#8216;_&#8217;) kullanılarak da düzenli bir formatta yazılması gelen küçük yenilikleredn biri. Örnek olarak:</p>
<p>public static final double piSayisi = 3.1415_92_6535_897_93;<br />
private double kartNumarasi = 5412_2345_4342_0348; </p>
]]></content:encoded>
			<wfw:commentRss>http://korhanozturk.com/java-se-7-ile-gelen-yenilikler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PreparedStatement nedir, nasıl kullanılır, avatanjları nelerdir?</title>
		<link>http://korhanozturk.com/preparedstatement-nedir-nasil-kullanilir-avatajlari-nelerdir/</link>
		<comments>http://korhanozturk.com/preparedstatement-nedir-nasil-kullanilir-avatajlari-nelerdir/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 17:56:51 +0000</pubDate>
		<dc:creator>Korhan</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[jdbc]]></category>
		<category><![CDATA[PreparedStatement]]></category>
		<category><![CDATA[setXXX]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://korhanozturk.com/?p=80</guid>
		<description><![CDATA[Önceki yazılarımda veri tabanında değişiklik yapmak ya da sorgu çekmek için, Java&#8217;nın Statement Interface&#8217;ini kullanarak SQL sorgularımızı teker teker göndermiştik. Bu SQL sorguları da veri tabanına her gidişinde orada tekrar derlenir, veri tabanının yönetim sistemi tarafından ideal bir yürütme politikası belirlenir ve sorgular çalıştırılır. Genelde, veri tabanıyla iletişimin çok büyük verileri kullanarak yapıldığını göz önünde <a href='http://korhanozturk.com/preparedstatement-nedir-nasil-kullanilir-avatajlari-nelerdir/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>Önceki yazılarımda veri tabanında değişiklik yapmak ya da sorgu çekmek için, Java&#8217;nın Statement Interface&#8217;ini kullanarak SQL sorgularımızı teker teker göndermiştik. Bu SQL sorguları da veri tabanına her gidişinde orada tekrar derlenir, veri tabanının yönetim sistemi tarafından ideal bir yürütme politikası belirlenir ve sorgular çalıştırılır. Genelde, veri tabanıyla iletişimin çok büyük verileri kullanarak yapıldığını göz önünde bulundurursak bahsettiğim işlemi tekrar tekrar yapmak yürütme hızını ve verimi oldukça düşürecektir. Bu sebeple, bir uygulamanın database ile girdiği veri alış-verişinde Java&#8217;nın PreparedStatement (Interface) yapısı tercih edilmelidir. PreparedStatement önceden derlenmiş SQL cümlelerini saklamaya yarayan yapılara verilen isimdir. PreparedStatement özellikle;<br />
- Bir SQL sorgusunu tekrar tekrar (mesela bir for döngüsü içersinde) çalıştırmak gerektiğinde,<br />
- İçiçe geçmiş tabloları barındıran bir SQL sorgusunu çalıştırırken,<br />
- SQL sorgularındaki değişken sayısı fazla olduğu gibi durumlarda tercih sebebidir ve veri tabanının performansını farkedelir derecede artırır.</p>
<p>PreparedStatement syntax&#8217;ı ise oldukça basittir:<br />
SQL sorgularındaki parametrik alanlara soru işareti (?) yerleştirilir ve bu alanlar SQL sorgusu veri tabanına gönderilmeden önce gerçek değerleriyle doldurulur. Başta soru işareti ile doldurduğumuz alanlara daha sonra setter methodlar (setString(), setDate() vs.) yardımıyla gerçek değerleri atarız. Mesela, pStmt.setString(2, &#8220;Selam&#8221;) kullanımında preparedStatement&#8217;ın ikinci parametresine &#8220;Selam&#8221; değerini atamış oluruz. Dilerseniz PreparedStatement yapısının kullanımını iki farklı örnekte detaylıca inceleyelim. İlk örnekte önceden oluşturulmuş &#8216;Calisan&#8217; tablomuzdaki bir kayıdın değeri değiştirilirken, ikinci örnekte de PreparedStatement yapısının bir döngü içersinde ne kadar performanslı çalıştığını gözlemleyelim.</p>
<pre class="brush:java">
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class PreparedStatementOrnegi {
	//static olan main method içersinden erişebilmek adına bütün değişkenler static olarak tanımlanmalıdır.
	private static String url = "jdbc:oracle:thin:@localhost:1521:XE"; //Bu örnek için lokaldeki database'e bağlanacağız.
	private static Connection conn;
	private static PreparedStatement prepSta;

	public static void main(String[] args) throws SQLException {
		try
		{
			//Sınıfımızı DriverManager'a tanıtmakla başlayalım
			DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
			//Database ile bağlantıyı oluşturalım: Bunun için TestUser kullanıcı adını ve password parolasını kullanacağız.
			conn = DriverManager.getConnection(url, "TestUser", "password");

			//Parametrik olarak hazırladğımız pre-compiled update sorgusu
			prepSta = conn.prepareStatement("Update Calisan set DEPARTMAN = ?, MAAS = ? Where CALISAN_ID = ?");

			prepSta.setString(1, "Management"); //Birinci parametreyi "Management" değeri ile doldur
			//İkinci parametreyi (maaş sütununu) 2000 ile calisan_id bölümünü ise 7 ile dolduralım
			prepSta.setInt(2, 2000);
			prepSta.setInt(3, 7);

			//Artık sorguyu çalıştırabiliriz. i local değişkeni etkilenen satır sayısını belirtir.
			int i = prepSta.executeUpdate();
			System.out.println(i + " Row(s) Affected...");

		}

		catch(SQLException e)
		{
			System.out.println("Hata: " + e.getErrorCode() + " " + e.getMessage());
			throw new SQLException(e);
		}

		finally
		{
			//Hafızayı şişirmemesi açısından bağlantıları kapayabiliriz.
			prepSta.close();
			conn.close();
		}
	}

}
</pre>
<pre class="brush:java">
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

public class PStatementPerformans {
	private static Connection conn;
	private static Statement stmt;
	private static PreparedStatement prepStmt;
	private static String url = "jdbc:oracle:thin:@localhost:1521:XE";
	private static long baslangicZamani, bitisZamani;

	public static void main(String[] args) throws SQLException
	{
		try{

			DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
			conn = DriverManager.getConnection(url, "TestUser", "password");
			stmt = conn.createStatement();
			baslangicZamani = System.currentTimeMillis();
			for(int i = 0; i<10000; i++){
				stmt.executeUpdate("Insert into TESTTABLOSU values ('test', " + i + ")");

			}
			bitisZamani = System.currentTimeMillis();
			System.out.println("Statement ile çalışma zamanı " + (bitisZamani - baslangicZamani) + " ms. \n");

			stmt.execute("Truncate table TESTTABLOSU");

			baslangicZamani = System.currentTimeMillis();
			prepStmt = conn.prepareStatement("Insert into TESTTABLOSU values (? , ?)");
			for(int j = 0; j<10000; j++){
				prepStmt.setString(1,"test");
				prepStmt.setInt(2, j);
				prepStmt.executeUpdate();
			}
			bitisZamani = System.currentTimeMillis();
			System.out.println("PreparedStatement ile çalışma zamanı " + (bitisZamani - baslangicZamani) + " ms. \n");

		}
		catch(Exception e){
			throw new RuntimeException(e);
		}
		finally{
			conn.close();
			stmt.close();
			prepStmt.close();

		}
	}

}
</pre>
<p>Yukarıdaki programı çalıştırdğımızda PreparedStatement yapısının Statement yapısına oranla %50'ye varan bir performans kazancı sağladığını göreceksiniz.<br />
<img src="http://korhanozturk.com/preparedstatement-nedir-nasil-kullanilir-avatajlari-nelerdir/prepstaperformance2/" /></p>
]]></content:encoded>
			<wfw:commentRss>http://korhanozturk.com/preparedstatement-nedir-nasil-kullanilir-avatajlari-nelerdir/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java BatchUpdate Yapısı Nedir, Nasıl Kullanılır?</title>
		<link>http://korhanozturk.com/java-batchupdate-yapisi-ile-veri-tabanina-baglanmak/</link>
		<comments>http://korhanozturk.com/java-batchupdate-yapisi-ile-veri-tabanina-baglanmak/#comments</comments>
		<pubDate>Mon, 15 Aug 2011 16:05:55 +0000</pubDate>
		<dc:creator>Korhan</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Batch]]></category>
		<category><![CDATA[BatchUpdate]]></category>
		<category><![CDATA[Oracle Veri Tabanı]]></category>
		<category><![CDATA[PreparedStatement]]></category>

		<guid isPermaLink="false">http://korhanozturk.com/?p=68</guid>
		<description><![CDATA[Merhaba Arkadaşlar, Bir önceki yazımda JDBC yardımıyla Oracle Veri Tabanına bağlanmayı ve SQL sorgularımızı Java programımızdan çalıştırmayı anlatmıştım. Örneğimde ise yazdığım SQL cümlelerini hemen ardından Statement Interface&#8217;inden executeUpdate() methodunu çağırarak çalıştırmıştım. Fakat SQL sorgularımızı çalıştırmanın tek yolu bu değil. Batch adı verilen, JDBC 2.0 API&#8217;si ile birlikte desteklenmeye başlanan ve Statement, PreparedStatement ve CallableStatement objelerinin <a href='http://korhanozturk.com/java-batchupdate-yapisi-ile-veri-tabanina-baglanmak/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>Merhaba Arkadaşlar,<br />
Bir önceki yazımda JDBC yardımıyla Oracle Veri Tabanına bağlanmayı ve SQL sorgularımızı Java programımızdan çalıştırmayı anlatmıştım. Örneğimde ise yazdığım SQL cümlelerini hemen ardından <a href="http://download.oracle.com/javase/1.4.2/docs/api/java/sql/Statement.html">Statement</a> Interface&#8217;inden executeUpdate() methodunu çağırarak çalıştırmıştım. Fakat SQL sorgularımızı çalıştırmanın tek yolu bu değil. Batch adı verilen, JDBC 2.0 API&#8217;si ile birlikte desteklenmeye başlanan ve <em>Statement, PreparedStatement </em> ve <em>CallableStatement</em> objelerinin liste halinde tuttuğu sorguları topluca çalıştırmaya yarayan bu yapı veri tabanıyla iletişimin bir başka yoludur. Özellikle çok sayıda satırı etkileyen SQL sorgularında executeUpdate() methoduna oranla daha iyi bir performans gösteren Batch, aynı zamanda kodun satır sayısı da göz önünde bulundurulduğunda daha etkili bir yöntemdir. Aşağıda, bir önceki örnekte oluşturduğum &#8216;Calisan&#8217; tablosuna Batch yapısını kullanarak yeni kayıtlar ekleyen örnek bir program ekledim. Umarım işinize yarar.</p>
<pre class="brush:java">import java.sql.*;
public class BatchUpdateOrnegi {

	private static String url = "jdbc:oracle:thin:@localhost:1521:XE";
	private static Connection conn;

	public static void main(String[] args) throws SQLException
	{

		try
		{

			//Öncelikle kullanacağımız Oracle jdbc driver'ımızı tanımlayalım.
			DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
			//Driver'ımızı tanımladığımıza göre artık bir bağlantı objesi oluşturabiliriz
			conn = DriverManager.getConnection(url, "TestUser", "password");

			//SQL statementlarımızı yazmadan önce veri tabanımızın batchUpdate'i destekleyip desteklemediğini öğrenebiliriz

			//Bunun için veri tabanımız hakkında her türlü bilgiye ulaşabilceğimiz bir databaseMetaData objesi oluşturmamız gerekmekte.
			DatabaseMetaData dbMData = conn.getMetaData(); 

			//DatabaseMetaData interface'inin supportsBatchUpdates() methodunu kullanacağız test için.
			if(dbMData.supportsBatchUpdates())
			{
				System.out.println(dbMData.getDatabaseProductVersion() + " batchUpdate'i desteklemektedir... ");
				//Bir sonraki işlemimiz pek çok database'de öntanımlı olarak belirlenen autocommit özelliğini kapatmak olacak.
				conn.setAutoCommit(false);

				//Şimdi SQL cümlelerimizi ekleyeceğimiz Statement objemizi tanımlayıp mevcut bağlantımızla ilişkilendirebiliriz.
				Statement stmt = conn.createStatement();

				stmt.addBatch("Insert Into Calisan Values (4, 'Fehmi Sözer', 'Testing', '01.07.1983', 1950)");

				stmt.addBatch("Insert Into Calisan Values (5, 'Leyla Uzungül', 'Testing', '15.12.1985', 1950)");

				stmt.addBatch("Update Calisan set Maas = 2000 Where ISIM = 'Zeki Duman' ");

				//Yığına (batch) eklediğimiz cümleleri artık toplu halde çalıştırabiliriz. Bunun için executeBatch() methodunu kullanacağız.
				stmt.executeBatch();
                                //Yaptığımız değişikliklerin veri tabanına kaydolması için commit()'leyebiliriz artık.
				conn.commit();

				//Şimdi de girdiğimiz değerleri tablodan çekip ekrana düzenli bir şekilde bastıralım
				 ResultSet resSet = stmt.executeQuery("Select * From Calisan"); //Sonuç setindeki her bir obje sorgudan gelen bir satırı temsil etmektedir.

				 ResultSetMetaData rsmetadata = resSet.getMetaData(); //Sonuç setimizin sütun bilgisini almak adına meta data bilgisini alalım.

				 int sütunSayisi = rsmetadata.getColumnCount();

				 //Sütun başlıklarını bastıralım.
				 for (int a = 0; a &lt; sütunSayisi; a++)
				 {
				 	 System.out.print(rsmetadata.getColumnName(a + 1) + "\t");
				 }
				 System.out.println("\n=============================================================================================================");

				 //Sonuç setimizdeki her satır için bilgileri ekrana bastıralım
				while (resSet.next())
				{
					for (int j = 0; j &lt; sütunSayisi; j++)
					{
						System.out.print(resSet.getString(j + 1) + "\t");
					}
					System.out.println();
				}

			}
			else
			{
				System.out.println(dbMData.getDatabaseProductVersion() + " batchUpdate'i desteklememektedir!...");
				System.exit(0);
			}

		}

		catch( SQLException e)
		{
			System.out.println("error: " + e.toString());
		}
		finally
		{
			conn.close();
		}

	}
}</pre>
<p>Yukardaki kodu çalıştırdıktan sonraki veri tabanındaki &#8220;Calisan&#8221; tablosunun son görüntüsü aşağıdaki gibi olacaktır:<br />
<img src="http://korhanozturk.com/wp-content/uploads/2011/08/batchUpdate_ss.png" alt="BatchUpdate" width="304" height="228" /></p>
]]></content:encoded>
			<wfw:commentRss>http://korhanozturk.com/java-batchupdate-yapisi-ile-veri-tabanina-baglanmak/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JDBC ile Veri Tabanina Baglanmak</title>
		<link>http://korhanozturk.com/jdbc-ile-baglanti/</link>
		<comments>http://korhanozturk.com/jdbc-ile-baglanti/#comments</comments>
		<pubDate>Wed, 20 Jul 2011 20:43:23 +0000</pubDate>
		<dc:creator>Korhan</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[jdbc]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Oracle 10g XE]]></category>

		<guid isPermaLink="false">http://www.korhanozturk.com/blog/?p=47</guid>
		<description><![CDATA[Merhaba Arkadaşlar, Bu yazımda JDBC (Java Database Connectivity) kullanarak veri tabanına erişimi ve aynı veri tabanında çeşitli modifikasyonlar yapmayı anlatacağım. Öncelikle JDBC&#8217;nin ne olduğunu tanıtmakla başlayayım. JDBC bir Java programından herhangi bir veri tabanına bağlanarak SQL cümlelerini çalıştırmaya yaran bir Java API&#8217;sidir. Aşağıdaki JDBC ile basit bir örnekleme yapacağım. Bu uygulamada İlişkisel Veri Tabanı olarak <a href='http://korhanozturk.com/jdbc-ile-baglanti/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>Merhaba Arkadaşlar,</p>
<p>Bu yazımda JDBC (Java Database Connectivity) kullanarak veri tabanına erişimi ve aynı veri tabanında çeşitli modifikasyonlar yapmayı anlatacağım. Öncelikle JDBC&#8217;nin ne olduğunu tanıtmakla başlayayım. JDBC bir Java programından herhangi bir veri tabanına bağlanarak SQL cümlelerini çalıştırmaya yaran bir Java API&#8217;sidir. Aşağıdaki JDBC ile basit bir örnekleme yapacağım. Bu uygulamada İlişkisel Veri Tabanı olarak Oracle Database 10g Express Edition kullanacağım. Ayrıca hatırlatmak gerekir ki JDBC&#8217;nin derleme sırasında hata vermemesi ve düzgün çalışması için projenin Build Path&#8217;indeki kütüphanelere kullanacağımız JDBC&#8217;nin .jar uzantısını eklememiz gerekmektedir. Bunun için ister Veri Tabanının içersindeki JDBC dizininden ekleme yapabiliriz (bu adres Oracle XE için C:\oraclexe\app\oracle\product\10.2.0\server\jdbc\lib şeklindedir) ya da <a href="http://devapp.sun.com/product/jdbc/drivers">http://devapp.sun.com/product/jdbc/drivers</a> adresinden istediğimiz driver&#8217;ı indirip onun içersindeki .jar uzantısını ekleyebiliriz. Bu detayı da belirttikten sonra veri tabanına bağlanıp, tablo oluşturup, değer girip değer çektiğimiz örnek kodumuz:</p>
<pre class="brush:java">
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

public class DBTest {

	public static void main(String[] args) throws SQLException
	{

		//Oracle Express Edition yüklü olan local host'umuza bağlanmak için hazırladığımız Url
		String url = "jdbc:oracle:thin:@localhost:1521:XE"; //Oracle Veritabanı öntanımlı olarak 1521 portunu kullanır.
		Statement stmt = null;
		Connection conn = null;
	     try
	     {

			 DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
			 //Bağlantımız için gerekli Url, Kullanıcı adı ve şifreyi girelim
			 conn = DriverManager.getConnection(url, "TestUser", "password"); //JDBC driver manager'ı aracılığıyla bağlantıyı oluşturalım.
			 stmt = conn.createStatement(); 

			 //Veri tabanına bağlandığımıza göre örnek bir tablo oluşturabiliriz
			 String createString = "Create Table Calisan (Calisan_ID NUMBER(8) NOT NULL PRIMARY KEY,  Isim VARCHAR2(50), Departman VARCHAR2(50), Dogum_Tarih DATE,  Maas NUMBER(12))";
			 stmt.executeUpdate(createString);

			 //Şimdi de oluşturduğumuz tabloya verilerimizi girelim.
			 stmt.executeUpdate("Insert into Calisan Values ( 1, 'Zeki Duman', 'Ar-Ge', '14.02.1987', 1800 )");
			 stmt.executeUpdate("Insert into Calisan Values ( 2, 'Necati Uzunyay', 'HR', '20.07.1983', 2000 )");
			 stmt.executeUpdate("Insert into Calisan Values ( 3, 'Ayşen Geçit', 'HR', '22.01.1989', 1800 )");

			 //Şimdi de girdiğimiz değerleri tablodan çekip ekrana düzenli bir şekilde bastıralım
			 ResultSet resSet = stmt.executeQuery("Select * From Calisan"); //Sonuç setindeki her bir obje sorgudan gelen bir satırı temsil etmektedir.

			 ResultSetMetaData rsmetadata = resSet.getMetaData(); //Sonuç setimizin sütun bilgisini almak adına meta data bilgisini alalım.

			 int sütunSayisi = rsmetadata.getColumnCount();

			 //Sütun başlıklarını bastıralım.
			 for (int a = 0; a &lt; sütunSayisi; a++)
			 {
			 	 System.out.print(rsmetadata.getColumnName(a + 1) + "\t");
			 }
			 System.out.println("\n=============================================================================================================");

			 //Sonuç setimizdeki her satır için bilgileri ekrana bastıralım
			while (resSet.next())
			{
				for (int j = 0; j &lt; sütunSayisi; j++)
				{
					System.out.print(resSet.getString(j + 1) + "\t");
				}
				System.out.println();
			}

	     }
	     catch (SQLException e) //Olası bir beklenmedik durum için...
	     {
	         System.out.println("Problem with SQL Statement!");
	         System.out.println(e.getMessage());
	     }

	     finally
	     {
	    	 //Baglantımızı ve sorgulama aracımızı artık kapatabiliriz.
	    	 stmt.close();
			 conn.close();
	     }

	}

}
</pre>
<p>Program çalıştırıldığından vereceği sonuç aşağıdaki gibi olacaktır:</p>
<p><a href="http://www.korhanozturk.com/blog/wp-content/uploads/2011/07/jdbcEmployeeOutput.png"><img class="alignnone size-medium wp-image-55" title="jdbcEmployeeOutput" src="http://www.korhanozturk.com/blog/wp-content/uploads/2011/07/jdbcEmployeeOutput-300x91.png" alt="" width="300" height="91" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://korhanozturk.com/jdbc-ile-baglanti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hello World!</title>
		<link>http://korhanozturk.com/acilis/</link>
		<comments>http://korhanozturk.com/acilis/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 12:34:50 +0000</pubDate>
		<dc:creator>Korhan</dc:creator>
				<category><![CDATA[Kategorisiz]]></category>

		<guid isPermaLink="false">http://www.korhanozturk.com/blog/?p=8</guid>
		<description><![CDATA[Sitemiz Onur Şentüre&#8216;nin yardımlarıyla açılmış  olup, içerik en kısa zamanda geliştirilecektir. Yorum ve görüşlerinizi bekliyorum&#8230;]]></description>
			<content:encoded><![CDATA[<p>Sitemiz <a href="http://www.onursenture.com">Onur Şentüre</a>&#8216;nin yardımlarıyla açılmış  olup, içerik en kısa zamanda geliştirilecektir.</p>
<p>Yorum ve görüşlerinizi bekliyorum&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://korhanozturk.com/acilis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

