14 Şub 2010

SqlCommand Nesnesi Kullanımı

Yazan: Levent | Kategori: .Net, Ado.net, C#, Database

Bir önceki yazımızda c# uygulamamızı, veritabanına nasıl bağlayacağımızı görmüştük. Bunu da sqlconnection bağlantı nesnesini kullanarak gerçekleştirmiştik. Bugün ise sqlcommand üzerinde duracağız. sqlcommand nesnesi veritabanı üzerinde sorgulama , ekleme,silme ve güncelleme işlemlerini gerçekleştirebileceğimiz connected layer için en çok kullandığımız nesnedir. Geçen yazımızda FILMS adında bir veritabanı oluşturmuştuk. Bugün ise o veritabanına bir tablo ekleyeceğiz ve bu tablodan bazı sorgulamaları command nesnesi yardımıyla gerçekleştireceğiz. Önce server explorer alındaki data connections kısmından daha önce oluşturduğumuz FILMS veritabanını genişletelim ve altındaki tables a sağ tıklayıp yeni bir tablo oluştur diyelim. Tablomuzu aşağıdaki gibi düzenleyelim.




FilmID yi primary key olarak belirleyelim ve  coloumn properties ten Identity specification dan Is Identity i yes yapalım seed ve increment 1 olsun. Tablomuzu kaydedelim ve ismine ImdbTopTen diyelim. Sıra geldi tablomuza veri koymaya. Yine tables kısmından oluşturduğumuz ImdbTopTen tablosuna sağ  tıklayarak  show table data diyelim ve açılan sayfadan verilerimizi girelim. Ben şu şekilde girdim.





Tablomuzu doldurduktan sonra yeni bir windows forms projesi yaratalım ve formumuzn üzerine 2 tane button sürükleyelim isimleri btnExecuteScalar ve btnExecuteReader olsun. Sonra view code diyerek önce connection string imizi oluşturalım tabi “using System.Data.SqlClient;”  alanını projemize dahil ettikten sonra.

SqlConnection connFilms = new SqlConnection(@”Data Source= .\SQLEXPRESS;

Initial Catalog=FILMS;Integrated Security= True”);



Sıra geldi command nesnesini oluşturmaya.

SqlCommand scalarCommand = new SqlCommand(); ile nesnemizi oluşturduktan sonra bu nesneye bazı özellikler bağlamalıyız. Örneğin CommandType ; sql komutumuzun tipini belirtir.

CommandType.Text ,kullanacağımız sql sorgusunun text olduğunu; CommandType.StoredProcedure, sql sorgusunun stored prosedür olarak yapılacağını belirtir.



scalarCommand.Connection = connFilms; commandımız connFilms  bağlantısı üzerinden çalışacak.

scalarCommand.CommandType = CommandType.Text; commandımız text tipinde olsun.
scalarCommand.CommandText = @”Select FilmAdı from ImdbTopTen where ImdbSıra=5″; textimizdeki sql sorgusu.



Command nesnesine özelliklerimizi bağladıktan sonra bağlantımızı açıp Execute metodlarından birini kullanarak sorgumuzu gerçekleştirmeliyiz. Command ı execute etmek için 4 tane metodumuz var.

ExecuteScalar() metodu, sorgularımızın tek bir değer(cell) döndüreceği zaman kullanılmalıdır.
ExecuteReader(), sorgularımızın birden fazla değer döndüreceği durumlarda kullanılmalıdır.
ExecuteNonQuery(), sorgularımızdan etkilenen satır sayısını döndürür.
ExecuteXmlReader(),sorgularımız sonucu veritabanından verileri xml formatında döndürür.



Bağlantıyı açıp sorgu emrini şu şekilde veriyoruz.

connFilms.Open();
string _filmadı = (string)scalarCommand.ExecuteScalar();
Command nesnesinin ExecuteScalar metodu bize object tipinde bir obje dönecek. Bunu string e cast ediyoruz ve sorgumuzun sonucu artık elimizde..
ExecuteReader() metodunun, ExecuteScalar() dan command nesnesine bağlanması açısından hiç bir farkı yok. Metodların tek farkı ExecuteReader da bir yerine birden çok değerin dönmesi. Dönen bu kayıtlara DataReader nesnesi sayesinde ulaşabiliyoruz.



SqlCommand readerCommand = new SqlCommand(); command nesnesi oluşturuluyor
readerCommand.Connection = connFilms; commandın hangi bağlantıda kullanılacağı belirleniyor
readerCommand.CommandType = CommandType.Text; commandımızın tipi text olarak belirleniyor
readerCommand.CommandText = @”select FilmAdı,IMDBSıra,Puan from ImdbTopTen”; sql sorgumuz texte yazılıyor
connFilms.Open(); bağlantı açılıyor
SqlDataReader reader = readerCommand.ExecuteReader();



Execute.Reader() metodunun dönüş tipi SqlDataReader tipinde olduğundan bu tipte bir değişkene atama yapıyoruz. Yani SqlDataReader ın bir yapıcı metodu yoktur. SqlDataReader command içindeki ExecuteScalar() metodunun içinde yaratılır ve geriye dönüş değeri olarak kullanılır.
reader nesnesinin görevi tablomuzdaki herbir satırı tutmaktır. reader nesnesine ait Read() metodu ise bir sonraki satırın başına konumlanmamızı sağlar. Bu şekilde tıpkı sıradan erişimli dosya okur gibi tablolarımızı okuyabiliriz.
reader["FilmAdı"],  FilmAdı kolonunda ilgili satırda bulunan hücreyi tutar. reader[0] da aynı görevi üstlenir. 0 tablomuzun kolonunun indisidir. Ancak rakam yerine kolon adlarının belirtilmesi daha uygundur. Örneğin tabloda kolonların yerlerini değiştirdiğimizde indis numarasını da değiştirmek zorunda kalırız ancak kolon isimlerini kullanırsak böyle bir derdimiz olmayacaktır.



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace CommandOrnegi
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        SqlConnection connFilms = new SqlConnection(@"Data Source= .\SQLEXPRESS;
                    Initial Catalog=FILMS;Integrated Security= True");

        private void btnExecuteScalar_Click(object sender, EventArgs e)
        {
            try
            {
                SqlCommand scalarCommand = new SqlCommand();
                scalarCommand.Connection = connFilms;
                scalarCommand.CommandType = CommandType.Text;
                scalarCommand.CommandText = @"Select FilmAdı from ImdbTopTen where ImdbSıra=5";

                connFilms.Open();
                string _filmadı = (string)scalarCommand.ExecuteScalar();
                MessageBox.Show(_filmadı);

            }
            catch (Exception ex)
            {
                MessageBox.Show("eyvah! hata oluştu..");
            }
            finally
            {
                connFilms.Close();
            }

        }

        private void btnExecuteReader_Click(object sender, EventArgs e)
        {
            try
            {
                SqlCommand readerCommand = new SqlCommand();
                readerCommand.Connection = connFilms;
                readerCommand.CommandType = CommandType.Text;
                readerCommand.CommandText = @"select FilmAdı,IMDBSıra,Puan from ImdbTopTen";

                connFilms.Open();
                SqlDataReader reader = readerCommand.ExecuteReader();
                string sonuc = @"Film adı                 IMDBSıra         Puan";
                while (reader.Read())
                {
                   sonuc+=("\n"+reader["FilmAdı"].ToString() + "\t" + reader["IMDBSıra"].ToString()+ "\t"+
                        reader["Puan"].ToString());
                }
                reader.Close();;
                MessageBox.Show(sonuc);

            }
            catch (Exception ex)
            {

                MessageBox.Show("eyvah! hata oluştu..");
            }
            finally
            {
                connFilms.Close();
            }
        }
    }
}
yayaç
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • Twitter
  • BlinkList
  • StumbleUpon
2 Şub 2010

Sql server veritabanı ve C# bağlantısı

Yazan: Levent | Kategori: .Net, Ado.net, C#, Database, Xml

Önceki yazımda  Ado.net e kısa bir giriş yapmıştım. Bugün ise c# uygulamamızı, sql server a nasıl bağlayacağımızı öğrenelim. Aslında internette bu konuyla ilgili sayısız kaynak var ancak karmaşık olanlarının sayısı da çok. Ben çok daha basit bir dille anlatmaya çalışacağım. Sadece serverdaki bir veritabanıyla, bağlantıyı açıp tekrar kapatacağız. başka bir işlem yapmayacağız. Bunun için önce sql server ın açık olup olmadığını kontrol etmekte fayda var. Bilgisayarımdan yönete girerek servisler ve uygulamalar altındaki sql server configuration manager içindeki sql server 2005 servislerine giriyoruz. Burda SQL Server(SQLEXPRESS )  çalışır durumda olup olmadığını kontrol ediyoruz. kapalıysa açıyoruz ve visual studio ya dönüyoruz. Öncelikli işimiz sql server üzerinde bir veritabanı oluşturmak.  Bunun için server explorerı açıyoruz . (View -> Server Explorer)  Burda Data Connections a sağ tıklayıp Create new Sql Server Database diyoruz. Karşımıza aşağıdaki gibi bir pencere çıkıyor.

göründüğü gibi server name olarak  “.\SQLEXPRESS” diyoruz.  Buradaki nokta localhost umuzu temsil eder nokta yerine bilgisayarımızın ismini de yazabilirdik. Database imize bir isim de verdikten sonra işlem tamam. Dilersek  data connections altında oluşturulan database imize tablolar vs ekleyebiliriz. ama ben şu anda gerekli görmüyorum. Şimdi geldi uygulamamızı yazmaya ve uygulamamız ile yarattığımız database arasında bağlantı oluşturmaya. Bunun için yeni  bir windows forms app oluşturulım ve formumuzun üzerine 2 tane button koyalım isimleri aç ve kapat olsun. Sıra geldi kodlarımızı yazmaya.

Ado.NET , .Net framework kütüphanesinin bir alt kümesidir. Veritabanı işlemlerimizi daha kolay yapabilmek için bu kütüphanenin sınıflarını kullanırız. Önce projemize  kullanacağımız bağlantı nesnelerini içerisinde tutan “using System.Data.SqlClient” uzayını dahil edelim. Şimdi bağlantı nesnemizi  yaratacağız ve connection string imizi bu nesneye parametre olarak vereceğiz.

SqlConnection myCon = new SqlConnection(@”Data Source= .\SQLEXPRESS;
Initial Catalog=FILMS;Integrated Security= True”);

“@ “karakteri hatırlanacağı gibi string içerisindeki ‘ \’ gibi karakterlerden kaçınmak için kullanılıyordu. Data source, veritabanının bulunduğu yeri gösterir. Data source = dedikten sonra eğer kendi makinemize bağlanmak istiyorsak birçok seçeneğimiz var. Bunlar, “localhost” veya “bilgisayarımızın adı” veya “.” veya “bilgisayarımınz ip si” dir. Uzak bir bilgisayara bağlanmak istiyorsak  o bilgisayarın ip sini yazabiliriz. SQLEXPRESS ise bilgisayardaki server ımızın adı. Initial Catalog; o bilgisayar içerisinde hangi database ile bağlantı kuracağımızı tutar. Integrated Security=True  ise sql server a windows oturumu üzerinden bağlanmamızı sağlar. Artık myCon.Open(); dediğimizde bağlantımız açılacaktır.

Şimdi olaya bir başka açıdan bakalım. Diyelim ki bilgisayarımızın adını değiştirdik veya database in adı değiştirildi. Her değişim için uygulamamıza girip connection string imizi değiştirmemiz ve kodu yeniden derlememiz gerekecek. Bu sorunu aşmak için xml den yardım alabiliriz. Xml, bilgilerin kolay anlaşılabilir ve hızlı  bir şekilde kullanılmasını sağlar.Böylece herangi bir değişiklikte Kullanıcı uygulamalarına haber verilerek sorun yaşanmasının önüne geçilir. Bunun için yapmamız gereken bir configuration dosyası oluşturmak. Projemizin solution explorer kısmından references a sağ tıklayıp add reference diyoruz ve karşımıza çıkan pencereden  System.configuration ı reference lerimize ekliyoruz. Bu sayede artık uygulamamıza rahatça konfigürasyon dosyaları ekleyebiliriz.

Şimdi yapmamız gereken solution explorer kısmından projemize sağ tıklayıp add new item diyerek çıkan pencerden Application Configuration File ı bulmak ve eklemek. App.config dosyamızı aşağıdaki gibi düzenleyelim.



  
    
  

Burada yaptığımız işlem  aslında bir değişken tanımlamak ve değişkenin değerine connection stringimizi vermek. Bu sayede uygulama içerisinde sadece bağlantı adımızı kullanarak uygulamadan connection string imizi gizlemiş olacağız. Ayrıca değişkenimizin sadece değerinde değişmeler olabileceğinden uygulamamız bundan dolaylı bir şekilde etkilenecektir. Artık yapmamız gereken şey uygulama kodlarımız içinde bağlantı nesnesini oluşturuken connection stringimizi app.config den okutmak olacak. Şu şekilde yapmalıyız.

SqlConnection myCon = new SqlConnection(System.Configuration.
ConfigurationManager.ConnectionStrings["FilmsConnectionString"].ToString());

Oluşturduğumuz nesnenin parametresini konfigürasyon dosyasından string  olarak okuduk. Burada ConnectionStrings[] içerisinde connection string imizin ismini vererek çağırdık. Direk bir indeks numarısı da yazabilirdik. App.config içerinde birden fazla connection string imiz olduğunda ConnectionString[1].ToString() gibi bir çağırımla bu işlem gerçekleştirilebilir.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace DBbAĞLANTISI
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

      /*  SqlConnection myCon = new SqlConnection(@"Data Source= .\SQLEXPRESS;
                    Initial Catalog=FILMS;Integrated Security= True");
      */
        SqlConnection myCon = new SqlConnection(System.Configuration.
        ConfigurationManager.ConnectionStrings["FilmsConnectionString"].ToString());

        private void aç_Click(object sender, EventArgs e)
        {
            myCon.Open();
            if (myCon.State == ConnectionState.Open)
                MessageBox.Show("bağlantı açıldı");
        }

        private void kapat_Click(object sender, EventArgs e)
        {
            myCon.Close();
            if (myCon.State == ConnectionState.Closed)
                MessageBox.Show("Bağlantı sonlandırıldı");
        }
    }
}

mycon.State ; bağlantımızın o anda açık veya kapalı olduğunu tutan boolean bir değerdir.

Böylece c# uygulamamızı sql server daki database e bağlamış olduk.

Her türlü connection string için:  http://www.connectionstrings.com/

yayaç
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • Twitter
  • BlinkList
  • StumbleUpon
1 Şub 2010

Ado.net’e giriş

Yazan: Levent | Kategori: .Net, Ado.net, C#, Database

Şubat tatilini fırsat bilerek blogumla biraz ilgileneyim dedim ve blogger ın sadeliğinden ve yeteneksizliğinden kurtulup wordpress’ taşındım. Yeni ve bence gayet güzel bir tema bularak işe başladım. Abartılı eklentilerden sakınarak işe yarar bir kaç eklenti kurdum. Hala ufak tefek sorunlarım olsa da yeni yerimden gayet memnunum…

Şubat tatiline yeni girdik. Bu tatili de tıpkı öncekiler gibi heba etmek yerine birşeyler öğrenmeye ve bazı konularda pratik yapmaya ayırmak istiyorum. Hemen hemen herşeyde olduğu gibi bilgisayar mühendisliğinde de bir parça bütün ilişkisi var. Bu parçaları ayrı ayrı tanımak anlamak ve oturtmaktan sonra başka parçalarla da birleştirebiliyorsak işe yarar duruma geliriz bence. Burdan konuya direk geçiş yapayım. Parçalarımız bir yazılım ve bir adet de veritabanı olsun. Ve biz bu iki parçayı kullanarak işe yarar bir durum ortaya çıkartalım. Yazılımın yaptığı işlem, eldeki veriyi belirlenen prosedürlere göre işlemek ve ortaya bir sonuç çıkarmaktır. Ado.Net’ in yaptığı işlem de bu yazılımın veriye kolay erişimini sağlamaktır. .Net ortamı için geliştirilmiş bu sistem sayesinde veritabanı uzmanı olmaya gerek kalmadan veritabanıyla ilgili gerekli işlemleri kolayca yapabiliriz.

ado.net

Ado.NET te veriye erişimde iki katman bulunur. Bunlar connected layer ve disconnected layer lardır. Her iki katman üzerinde de ilerleyen günlede detaylıca durmayı düşünüyorum. Ancak, kısaca bahsetmem gerekirse; connected layerda, çalıştığımızda database ile birebir etkileşim içinde oluruz. Bu layerın en önemli objeleri command ve data reader dır. Command objesiyle doğrudan veritabanı üzerinde sql ifadelerini kullanarak  veya stored prosedürlerle select ,insert, update, delete gibi  işlemleri gerçekleştirebiliriz.  Data reader ile veritabanı tablolarındaki verileri doğrudan okuyabiliriz. Disconnected layerda ise öncelikli amaç hız ve etkin kaynak kullanımıdır. Bu katmanda kullanılan en önemli objeler data adapter ve dataset tir. Dataset, veritabanında bulunan bir veya bir kaç tablonun belleğe aktarılmış halidir.  Bilgisayar belleğine veritabanın sadece kullandığımız kısmının bir kopyasını alırız. Aktarımdan sonra bağlantıyı keseriz. Dataset nesnesi içerisindeki bu izdüşümle sanki gerçek veritabanı üzerinde çalışıyormuş gibi ilişkiler kurabilir, ekleme,silme, sorgulama,güncelleme gibi işlemleri gerçekleştirebiliriz. Data adapter ise bağlantısız katman uygulamasıyla veritabanı arasında bir köprü görevi görür.İzin verilen ölçüde database den verilerin alınıp uygulama tarafındaki dataset e uyarlanarak taşınmasını sağlar.Uygulama tarafında yaptığımız değişikliklerin de yine aynı şekilde  database’e taşımasından sorumludur.

yayaç
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • Twitter
  • BlinkList
  • StumbleUpon

Netbeans,eclipse veya visual studio gibi ide lerde yeni bir class oluşturmak istediğimizde önce bizden bu class ın yapısı için önbilgiler girmemiz istenir. Örneğin bu class ın Main class mı olacağı ,soyut olup olmayacağı, yada private veya public mi olacağı henüz oluşturulma aşamasında bize seçenek olarak sunulur ve bu öntanımlamalara göre bir class iskeleti oluşturulur.
Bugün,netbeans te yaratılan bir class ın en üst kısmında bulunan lisans şablonunun nasıl değiştirildiğini anlatmak istiyorum. Yeni bir class oluşturduğumuzda lisans kısmında default olarak şu yazar :

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

Yapacağımız işlemler sonucunda benim editörümde artık otomatik olarak şu yazacak :

/*
* Bu kod Levent Özkan tarafından 04-01-2010
* tarihinde geliştirilmiştir.
*/

Bu değişim için yapmamız gereken, açık bir proje varken tools menüsünden templates i seçmek.Daha sonra açılan pencereden java yı buluyoruz ve altındaki java class ı seçip open in editor diyoruz.Karşımıza aşağıdaki gibi java class template geliyor.


<#include “../Licenses/license-${project.license}.txt”>; satırından da anlaşılıdğı  gibi lisans bilgileri dosyadan okunuyor. Bizim yapacağımız şey ise yeni bir dosya yaratmak ve burdaki project.license parametrsini kendi dosyamıza bağlamak. Önce yeni bir lisans dosyası yaratalım.Bunun için yine tools menüsünden  templatesi seçiyoruz ve açılan pencereden Licenses dalı altındaki Default (yada herhangi bir) dosyaya tıklayıp duplicate ediyoruz. Oluşturduğumuz  dosyaya sağ tıklayıp proporties diyoruz ve burdan display name ve file name i ayarlıyoruz. Örneğin ben Display name : levent.txt  File Name : license-mydefault dedim. Burada file name in “license-XXX” şeklinde olması önemli.Dosyamızın özelliklerini belirledikten sonra sıra geldi içeriğini belirlemeye.Dosyamızı yine open in editor diyerek açıyoruz.Benim levent.txt dosyamı aşağıdaki gibi düzenledim.
Gerekli düzenlemeleri yaptıktan sonra kaydedelim. Şimdi sıra geldi java sınıf oluşturma şablonuna bu lisans dosyasını parametre olarak göndermeye. Bu işlemi yan taraftaki Files penceresinden (görünmüyorsa ctrl+2) yapıyoruz.Buradan nbproject altındaki project.properties i altmenüleri açmadan çift tıklıyoruz ve açılan sayfanın en altına giderek parametremizi yazıyoruz. Dikkat edilmesi gereken nokta, buraya display name in değil file name in yazılması.
Dosyamızın adı license-mydefault, ancak buraya sadece mydefault yazıyoruz.

project.license=mydefault satırını ekledikten sonra işimiz bitiyor. Yeni bir class oluşturduğumuzda
artık lisans kısmına belirttiğimiz dosyanın içeriğini otomatik olarak yazdırabiliriz.
Son olarak, eğer sadece ilgili projede değil de bütün projelerde kendi hazırladığımız şablonu kullanmak istiyorsak ;
#include “../Licenses/license-${project.license}.txt” satırında ${project.license} yerine kendi dosyamızın ismini yazmalıyız. <#include “../Licenses/license-mydefault.txt”> şeklinde yazıp kaydettiğimizde artık her projede kendi şablonumuz gösterilecektir..
yayaç
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • Twitter
  • BlinkList
  • StumbleUpon
26 Kas 2009

YAPTIRTAÇ 1.0

Yazan: Levent | Kategori: .Net, C#

Aklıma doğru düzgün bir isim gelmedi. Bende yaptırtaç koydum ismini. Yaptırtaç, sizin belirlediğiniz bir saatte yine sizin seçtiğiniz bir işlemin bilgisayar tarafından otomatik olarak yapılmasını sağlamayı amaçlayan .net ortamında c# dili ile yazılmış basit ve oldukça kullanışlı bir programcıktır. Yaptırtaç, henüz bilgisayarı kapatma , yeniden başlatma ve oturumu kapatma gibi 3 temel işlevi gerçekleştirebiliyor ancak zamanla ve gelen isteklere göre (tabi gelirse) özellikleri arttıralcak ve geliştirilecek.
Aslında böyle bir programa oldum olası ihtiyaç duydum desem abartmış olmam. Doğduğumdan beri hemen hemen hergece müzik eşliğinde dalarım uykuya. Bebekliğimde annem radyoyu yatağımın yanına koyar , kısık sesle açarmış müziği , ben de dalarmışım uykuya. Tabi ben uyuduktan sonra da annem gelir radyoyu kapatırmış..
Gelelim Yaptırtaç’a:
Yaptırtaç’ı  buradan indirin.Yaptırtaç tıkla çalışsın tarzı bir programdır.
Kullanılışı: Masadan kalkmadan önce müziğin sesi vs ayarlanır ve sonra yaptırtaç açılır.Tahmini uykuya dalma süresi hesaplanır ve buna göre yaptırtaç’ ın zamanı kurulur. daha sonra tamam diyerek gönül rahatlığıyla yatağa girilir ve uykuya dalınır. Yaptırtaçın bilgisayarınız istediğniz saat ve dakikada kapatacağından emin olabilirsiniz..
Tabi sadece uykuya dalmak için kullanılmaz yaptırtaç. Diyelim internetten bişeyler indiriyorsunuz kuyruğun bitme zamanına göre yaptırtaç’ı kurabilir ve işinize bakabilirsiniz.
Yaptırtaç ‘ın yapmasını istediğiniz veya yaparken yanlışlık yaptığı her türlü şeyi bana iletiniz. hoşçakalın….

yayaç
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • Twitter
  • BlinkList
  • StumbleUpon
7 Kas 2009

netbeans te koddan uml oluşturmak ()

Yazan: Levent | Kategori: Java, netbeans

Bu blogu ilk açtığımda günlük olarak bişeyler yazabileceğimi tahmin ediyordum ancak görüldüğü gibi ancak haftada bir yazabiliyorum. Ama yoğunluğum azaldıkça bloguma göstereceğim ilgide aynı oranda artacaktır. Bugün netbeans te  koddan nasıl uml diagramı oluşturulduğunu paylaşmak istiyorum. Paylaşayım ki kodlarını bitirip rapor aşamasına geçen arkadaşlar ‘uml diagramını nasıl nerden oluştururum acaba’ diye düşünüp google da envai çeşit aramalar yapmasınlar tıpkı benim bugün yaptığım gibi.

Önce uml eklentisini kurmamız gerekiyor. Bunun için sırsaıyla Tools -> Plugins  yolunu takip edib ve available plugins listesinden Uml yi bularak install edin. (netbeans 6.0 ve üzeri için)
Şimdi geldi varolan koddan uml diagramı olşturmaya. Bu ve benzeri türden yaklaşımlara  Reverse Engineering denildiğinide hatırlatmış olalım. Nasıl yapılıyormuş resimler eşliğinde gösterelim.

1- Netbeans te File -> new project dedikten sonra aşağidaki gibi bir pencere görürüz,soldaki categories kısmından UML i ,  sağ taraftaki projects kısmında da Reverse Engineered Java-Platform Model i seçiyoruz ve next diyoruz.

2- Projenizin ismini belirledikten sonra (benimkisi MyUml) orta kısımda uml diagramını çıkarmak istediğiniz projenin ismini göreceksiniz (benimkisi Rys1) biraz aşağıda ise o projenin source kodlarının bulunduğu src klasörü ve Test packageları var biz test kısmındaki tik i kaldırıp yola src ile devam ediyoruz ve finish diyoruz.

3- Projeyi finish diyip yarattığımızda proje dosyalarının gösterildiği sol tarafta projemiz ve ve projemizin kullanacağı sınıflar Model dalı altında gösterilir.

4- class diagramını oluşturmak istediğimiz classlarımızı ctrl ile tek tek seçiyoruz ve seçili dosyalara sağ tıklayıp create Diagram from Selected Elements diyoruz

5- Daha sonra çıkan pencereden Diagram type olarak class diagram ı seçip diagramımıza isim verdikten sonra finish diyoruz ve diyagramımızı oluşturuyoruz

6- Kodu geriye sararak tasarım görünümünü oluşturmuş olduk. Benim diagramımım biraz karmaşık olmakla birlikte şu şekilde

daha ayrıntılı ve benzer konular için şurayı araştırın.

Geldik bir cumartesi gecesinin daha sonuna : )

yayaç
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • Twitter
  • BlinkList
  • StumbleUpon
30 Eki 2009

Java StringTokenizer Sınıfı

Yazan: Levent | Kategori: Java, kod

Java nın 3000 e yakın hazır sınıfından  bir tanesi de StringTokenizer sınıfıdır. Bugün StringTokenizer sınıfının kullanımı ve bu sınıfa ait metodların ne işe yaradığını anlatmaya çalışacağım. StringTokenizer sınıfı herhangi bir metni belirlediğimiz herhangi bir kritere veya kriterlere göre parçalamak (parse etmek ,parsing) için kullanılır. Eğer herhangi bir kriter koymazsak bu durumda default olarak boşluk karakterine göre parçalama işlemi gerçekleştirilir ki bu işleme splitting denir.Parçalama işleminden sonra oluşan her bir parçaya Token denir.
Programming is Practise felsefesinden yola çıkarak bu sınıfın kullanımını kolayca anlayabileceğimiz basit bir program yazarak işe başlayalım.

import java.util.StringTokenizer;

public class Practise {

   public static void main(String[] args)
   {

       String cumle1=”deniz gözlerinden alır sonsuzluğun haberini”;
       StringTokenizer st1 = new StringTokenizer(cumle1);

       while(st1.hasMoreTokens())
               System.out.println(st1.nextToken());
// 1.bölüm sonu

       String cumle2=”ben,sen,o,biz,,,siz”;
       StringTokenizer st2= new StringTokenizer(cumle2,”,”);

       while(st2.hasMoreTokens())
              System.out.println(st2.nextToken());
// 2.bölüm sonu

       String cumle3=”yıldızlara;uzanıp,hep-seni sordum?gece!yarılarında. ”
       String delims =”,;-!.”;
       StringTokenizer st3= new StringTokenizer(cumle3, delims);
       System.out.println(“\n Token sayısı=”+st3.countTokens());

       while (st3.hasMoreElements())
               System.out.println(st3.nextToken());

// 3.bölüm sonu

    }

}

Programı bölüm bölüm inceleyecek olursak, ilk bölümde cumle1 stringini nasıl token lara ayırabileceğimizi görüyoruz.StringTokenizer tipinde bir st nesnesi oluşturuyoruz. Constructor parametre olarak sadece cumle1 stringini aldığından default olarak splitting işlemi yapacaktır yani boşluk karakterlerine göre token lara ayırma işlemi. Buna göre ilk bölümün çıktısı şu şekilde olmalıdır.

deniz
gözlerinden
alır
sonsuzluğun
haberini

İkinci bölümde, string içine bir kaç virgül ekleyerek oluşturduğumuz st2 nesnesinin yapıcısına cumle2 ve “,” stringlerini parametre olarak gönderiyoruz. Yapıcıya 2.parametre olarak gönderilen bu karaktere sınırlayıcı karakter (delimiter) adı verilir. Bu durumda cumle2 stringi “,” karakterinin görüldüğü her yerde token lara ayrılır. Çıktı şu şekilde olmalıdır.

ben
sen
o
biz
siz

Üçüncü bölümde, birden çok delimiter kullanılmak istenmiş ve bunlar karakter dizisi şeklinde bildirilmiştir.
StringTokenizer st3= new StringTokenizer(cumle3, delims); -kod satırının anlamı cumle3 stringini delims içindeki karakterlere göre token lara parçala- manasına gelmektedir.StringTokenizer oluşturduğu token ları bir dizi olarak değil ancak sırayla erişilebilecek bir enumaration type olarak döndürür. 3.bölümün çıktısı da aşağıdaki gibi olur.

Token sayısı=6
yıldızlara
uzanıp
hep
seni sordum?gece
yarılarında

Dikat edilirse, delims içinde boşluk karakteri ve “?” bulunmadığından dolayı
’seni sordum?gece’ tokenlara ayrılmamıştır.

hasMoreTokens(); boolean değer döndüren bir metoddur sırada token olup olmadığını kontrol eder
nextToken(); sıradaki token i döndürür
countTokens(); o anda kalan token sayısını verir.

Daha ayrıntılı bilgiler;
java-sun.com

yayaç
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • Twitter
  • BlinkList
  • StumbleUpon

İlk blog yazım .. İlkler benim için her zaman zor, heyecanlı ve bir o kadar da stresli olmuştur. Bu yazıya başladığım şu saniyelerde de bu durum etkisini hissetirmekte : ) Ama yine de bu durum bence normal bir süreç çünkü, yaşanan ilkler insan hayatını bir şekilde etkileyerek o hayata başka bir yön katar , hayatı başka bir tarafa kaydırabilir hatta yönsüz bile bırakabilir : ) Her insan için o kadar çok yön ve bu yönlere giden o kadar çok yol vardır ki; insan bu yolların hepsinde aynı anda bir yolculuk içerisindedir,bin parçalı bir yolda yolculuklar… Bu yolculukların hepsi birden hayat olur işte ve biz de bir yandan bu yollarda yürümeye devam ederken , diğer yandan da yeni yollara yani yeni ilklere saparız. Aklıma annemin beni elimden tutup, ilkokula keydetmeye götürdüğü gün geldi. Evimiz okula oldukça uzaktı, 7 yaşındaki bir çocuğun adımlarıyla 25- 30 dakikalik bir yol.. O tek katlı sarı okul binasının merdivenlerine yaklaştıkça korkum artıyordu. Gevşetmeye çalıştıkça ben, annem daha da sıkı tutuyordu ellerimi. Merdivenlerden çıkıp kayıt masasının önüne geldiğimizde ben artık ağlıyordum ve annemin elinden kurtulup okulun bahçe kapısına doğru koşmaya başlamıştım uzaklaştıkça yavaşladığımı da hatırlıyorum.. en sonunda o binaya zorla girdim ve kaydım yapıldı.Okullar açıldı.Annem ilk 5 gün boyunca ilk ders saatlerinde benimle derslere girmek zorunda kaldı, anne-oğul aynı sırada oturuyorduk : ) Annelerin hakkı ödenemez.. İlk haftalar deftere çizdiğimiz düz, sağa yatık, sola yatık çizgilerde bile onun emeği vardır : ) .. ilkti ve zordu..

İlkokuldan üniversiteye uzuun bir atlama yaparsam ( ‘93 – ‘06 = 13 yıl ) , üniversiteye bir bilgisayar mühendisinin en çok yapacağı şeyin kod yazmak olduğunu bilerek geldim ve ben hayatımda daha önce hiç kod yazmamıştım, ve bu konulara yabancı oldumu söylersem doğru söylemiş olurum. Benim için korkulu ve stresli bir dönemdi. Bu durum benim 1. sınıfa başlamadan önce 1 yıl hazırlık sınıfına gitmeme bile neden oldu… Çoğu kimsenin yaptığı gibi ben de önce bir araştırma sürecine girdim ve sonunda elime bir kitap aldım. bu kitap bir turbo pascal kitabıydı, keza ben hazırlık okuduğumda 1. sınıflara pascal öğretiliyordu. Kitabı elime alıp bilgisayarımın karşısına geçtiğimde heyecanlanmıştım. Bundan sonra en çok yapacağım işi ilk defa yapacaktım. Kitaptaki talimatları okuyarak bilgisayarıma önce bir pascal editörü kurdum ve artık kodları yazmaya hazırdım. İlk kod tartışılmaz “hello world!” olacaktı. ve kodları yazmaya başladım.

Program Hello ;

Uses Crt;

Begin

ClrScr;

Write ( ‘ Hello World!’ ) ;

Readln;

End.

Hatalı olmasın diye satırları birebir yazdım hatta write ‘ ın içini bile değiştirmeye çekindim : ) Kodları yazıp derledikten sonra hemen hemen herkesin başına gelen benim de başıma geldi, derleyici hata verdi : ) Eksik noktalı virgülleri koyup tekrar derledikten sonra hatasız şekilde program çalıştı ekranda beklenen ‘hello world!’ göründü. O anki heyecanı yaşayanlar bilirler, o heyecanla ve gazla kitapta bayağı ilerlemiştim : ) .. ilkti ve heyecanlıydı..

Bu yazıya başladığımda ne konuda yazacağımı bilmiyordum, ben başlıyayım o gelir dedim ve başlığı da şekillenen duruma göre atarım dedim; düz,sağa yatık ve sola yatık çizgilerle hello world!

yayaç
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • Twitter
  • BlinkList
  • StumbleUpon