Android MSSQL Uygulaması

Şubat 26, 2012

 

Merhaba arkadaşlar , bugün android ile MSSQL bağlantısı kurup sorgu çalıştırabileceğimiz bir uygulama geliştiriyor olacağız.Veri tabanı olarak uzak sunucuma aktardığım Northwind veri tabanının 3 tane tablo’sunu kullanacağız bu tablolardaki verileri sorguladıktan sonra ekrana grid şeklinde getiriyor olacağız aynı zamanda tüm detayları görebilmek için satırların click event’lerini yakalıyarak fazla sayıdaki kolon’ları kullanıcıya detaylı olarak göstereceğiz.Uygulama üzerinden hangi sunucuya bağlanacağımız , veri tabanı adı , kullanıcı adı ve şifre gibi bilgileri SQLite veri tabanında tutuyor olacağız.Çalıştıracağımız her sorgu bu bilgiler doğrultusunda sonuc döndürecektir.İlk olarak uygulamadan bir kaç ekran görüntüsü

 

 

Customers tablomuzu sorguladığımız zaman 26 tane satır veri geldi ve bu verileri sırası ile ekrana getirdik 2. resim ise üstüne tıklanan bir satırın detaylı olarak görünümü, tıklanan satır’ın arkaplan rengini turuncu yaparak belirgin hale getiriyoruz burada tüm kolonlar görünmektedir scroll’u alta doğru kaydırdıkça.Uygulama genel  olarak sorgulamaya dönük yapılmıştır crud işlemlerinin hepsi gerçekleştirilebilir ama select ‘in dışında geriye bir ResultSet dönmeyeceği için hata verir ama sorgu çalışmış olacağı için işlem gerçekleşmiş olacaktır.Uygulamamızı eclipse üzerinde geliştiriyor olacağız.MSSQL Uygulamasi adında bir uygulama oluşturalım

 

 

 

Uygulamamızı oluşturduktan sonra kullanacağımız dosyalarıda projemize ekleyelim. res > drawable-hdpi klasörünün altına görsel olarak kullanacağımız resimlerimizi ekliyoruz daha sonra projemizde kullanacağımız class’lar ve xml arayüzlerimizi ekleyelim tek tek kodlarımızı yazmaya başlayacağız. Android üzerinden sql veri tabanını sorgulayabilmemiz için gerekli olan driver’ımızıda projemize ekleyelim.Bu dosyayı projemize sağ tıklayıp Properties > Java Build Path > Libraries kısmından eklememiz lazım

 

 

Uygulamamız üzerinden internete ulaşacağımız için internet için gerekli izinlerin verilmiş olması lazım bunun için projemizin AndroidManifest.xml dosyasına gerekli izinleri ekleyelim

 

 

Bu dosya uygulamamız ile ilgili olan ayarların yapıldığı kısımdır burada projemizde gerekli olacak tüm izinleri ekleyebiliriz ayrıca .cs dosyalarımızıda burada belirtmemiz gereklidir yoksa çalışma zamanında hata alırız.İzinlerimizi en alta ekledik 1. izin internete bağlanabilmemiz için 2. izin ise internet kontrolü yapabilmemiz için gereklidir.

 

 

Uygulamamızın girişi için şu şekilde bir dizayn yapalım kullanıcı buradaki butonlar yardımı ile veri tabanı ayarlarını atayabilir ve sorgulama ekranına geçiş yapabilir.Bu ekranı main.xml dosyamızda şekillendirelim

 

 

Kontrollerimizin tüm özelliklerini bu şekilde atayalım ImageView nesnemizin android:src özelliğine ise projemize dahil ettiğimiz resimlerden sql olanı atayalım uygulama açılır açılmaz bu resim ekranda gözükecektir.Burada önemli nokta kontrollerin id’lerini mantıklı bir şekilde atama yapmaktır her kontrole kendisi ile ilgili bir id atarsak kod tarafında işimiz bir o kadar da kolaylaşıcaktır.

 

 

Sorgulama ekranımız ise bu şekilde, sorgulama.xml dosyamızı ise bu ekranın tasarımız için kullanıyor olacağız.

 

 

TableLayout kontrolümüze  TableRow kontrolü ekleyerek satırlarımızı oluşturacağız burada TableRow kullanmamamızın sebebi ise bu TableRow’ları çalışma zamanında dinamik olarak oluşturup eklemek.ScrollView ile çok fazla satır veri ekrana basıldığı zaman aşağıya doğru kayabilmek.

 

 

Veri tabanı ayarlarımızı yapacağımız sayfanın tasarımı ise bu şekilde onuda ayarlar.xml dosyasında oluşturalım

 

 

Uygulama ilk çalıştırıldığı zaman buton kaydet olarak gelmektedir ve EditText’lerde boş olarak ama bir kere veri eklenince bu sayfaya tekrar girildiği zaman ayarların güncellenmesi daha kolay olması için bu veriler ekrana getirilmektedir.Ayarlar kısmında uzak sunucumuzun ip adresini varsa port’u ile bu sunucudaki veri tabanı adımızı ,kullanıcı adımızı ve şifremizi girmemiz gerekmektedir.Birazcıkta kod yazalım ilk olarak MSSQLUygulamasiActivity.java dosyamıza gelelim

 

 

Dosyamızı bu şekilde düzenleyelim.Burada ilk olarak bu sınıf içerisinde gerekli olan import’larımızı yazalım değişkenlerimizi oluşturalım daha sonra onCreate method’umuzda kodlarımızı yazmaya başlıyalım ki burası bu dosyaya istekde bulunulduğu zaman ilk olarak çalışacak kısımdır.Bir sınıfı oluşturduğunuz zaman onCreate method’u defaut olarak gelmemektedir onun için şu yolu izleyebilirsiniz. Boş bir yerde sağ tık Source > Override / Implement Methods… seçenegi seçilir daha sonra projenize eklemek istediğiniz method bu kısımdan seçilerek eklenir. setContentView(R.Layout.main); ile bu sınıfın hangi görsel xml dosyasını kullanacağını belirliyoruz. setRequestedOrientation ile uygulamamızın çalışma zamanında nasıl bir duruş şekli olacağını ayarlıyoruz SCREEN_ORIENTATION_PORTRAIT ile uygulamamız ilk açıldığı zaman dik olarak başlıyacak ve siz telefonu yana yatırsanız bile uygulama dik durmaya devam edecektir. setTitle ile tahmin edeceğiniz üzere uygulamamızın başlıgını atıyoruz. Bu method’umuzda son olarakta görsel arayüz’deki kontrollere erişebilmek için bir methoz yazıyoruz Kontroller method’u

 

 

Button ‘ların click event’lerini yakalayabilmek için setOnClickListener(this) kullanıyoruz tabiki bu şekilde yazdıktan sonra onClick method’unu ezmediğimiz için eclipse bize kızıcaktır hemen onClick method’umuzuda ekleyelim

 

 

Tüm buton’larımız tıklandığı zaman bu method çalışıcaktır onun için hangi buton’un tıklandığını anlayabilmek için switch kullanıyoruz gelen’i id si yardımı ile bulup ona göre işlem yapılmasını sağlıyoruz.İlk case ifademizde Sorgulama ekranını açabilmemiz için bir intent oluşturup bunu startActivity diyerek aktif olmasını sağlıyoruz.Hakkında kısmında ise mesajımızı yazıp Builder ile ekrana bilgi olarak bir mesaj çıkartıyoruz.Bu mesajın başlığını , icon’unu atıyoruz.Uygulamadan çıkılsınmı sorusu için Cikis() method’unu kullanıyoruz

 

 

Buradada aynı şekilde Builder nesnesi yardımı ile mesaj çıkartıyoruz ama burada ekstra olarak kullanıcıya 2 tane evet ve hayır butonları gösteriyoruz ve kullanıcı hangisini seçerse ona göre işlem yapıyoruz evet demesi durumunda finish() method’u yardımı ile kapanmayı sağlıyoruz hayır derse uygulama çalışmaya devam ediyor ama dialog penceremizi kapatıyoruz.Bu class’da yapacaklarımız bu kadar şimdi ise Ayarlar.java class’ımızı geliştirelim

 

 

Buradada aynı şekilde gerekli import’larımızı ekliyoruz setContentView(R.ayarlar.ayarlar) diyerek ayarlar.xml dosyamızı görsel arayüz olarak kullanılması sağlıyoruz.Başlığımızı atıyoruz , arayüz’ümüzdeki kontrollere ulaşıyoruz ve uygulamamızın sürekli dik durması için setRequestedOrientation ile atamamızı yapıyoruz.Kontroller method’umuz

 

 

EditText’lere ve button’a ulaştıktan sonra button’un click event’ini yakalamak için setOnClickListener(this) diyoruz. SetButtonText method’umuz

 

 

Burada birazdan yazacağımız DB sınıfımızın method’larını kullanıyoruz SQLite veri tabanı ile bağlantımızı açıyoruz sorguluyoruz ve dönen sonuca göre hiç veri yoksa Button’un text özelliğine Kaydet sadece 1 veri varsa Güncelle olarak atama yapıyoruz.SetResults method’umuz

 

 

Eğer veri tabanında daha önceden girilmiş bir veri varsa onu ekrandaki kontrollerin text özelliklerine atıyoruz Cursor sınıfının moveToNext method’u yardımı ile o an gelen verilerin içerisinde gezinebiliriz ileri yönlü olarak burada tek veri geldiği için direkt olarak bu verileri kontrollere atıyoruz.onClick method’umuz

 

 

Kullanıcının EditText ‘lerde girdiği verileri .getText.toString() diyerek alıyoruz ve buton’u Kaydet veya Güncelle olmasına bakarak insert veya update method’umuzu çalıştırıyoruz.Insert ve Update method’larımız DB sınıfımızın içerisindedir.DB sınıfımız

 

 

Standart olarak import’larımızı ekliyoruz daha sonra değişkenlerimizi tanımlıyoruz SQLite veri tabanı ile işlem yapacağımız için veri tabanı adımızı ve tablomuzu burada oluşturuyoruz.SQLite veri tabanını kullanmak için telefonunuzdan herhangi bir ayar yapmanıza gerek yoktur bu kodlar sayesinde işlemlerinizi gerçekleştirebilirsiniz.Conn adında veri tabanımızı oluşturuyoruz , Info adında tablomuzu oluşturuyoruz ve kolon’larımızı ekliyoruz, 4 tane bilgi tutacağımız için ona göre bir tasarım yapıyoruz tabiki bu alanların veri tiplerinide bu kısımda atıyoruz.DbHelper sınıfımız

 

 

Değişkenlerde atadığımız sorguların burada çalıştırlmasını sağlıyoruz gerekli method’ları kullanarak.

 

 

Uygulama tarafında işimize yarayacak tüm method’larımızı bu şekilde yazıyoruz Insert method’unda gerekli parametreleri aldıktan sonra ContentValues nesne’sinin put method’u ile verilerimizi atıyoruz daha sonra insert diyerek kaydımızı gerçekleştiriyoruz.

 

 

Update method’umuzdada aynı şekilde parametrelerimizi aldıktan sonra database.update ile verileri güncelliyoruz ama burada farklı olarak bir de koşul belirtiyoruz  ID ‘ si 1 olanı güncelle diyoruz.Burada 1′in default olarak yazılmasının sebebi ise bu veri tabanına sadece 1 tane veri girişi olması bu sebep’den dolayı ID hiç bir zaman 1 ‘den farklı bir değer alamıyor.Query method’unda ise sorgulamak istediğimiz alanları belirtiyoruz ve hangi veri tabanında sorgulama yapacağımızı.Sorgulama sınıfımız

 

 

Gerekli import’larımızı yazıyoruz.Değişkenlerimiz ve onCreate method’umuz

 

 

Uygulama içerisinde en karmaşık sınıf diyebilirim bu yüzden bir button altında uzun kodlar yazmaktan ziyade genellikle kod parçalarını method’lara bölerek ayırdım anlaşılması daha kolay olması açısından. onCreate method’umuzda getWindow ile başlayan kod uygulamamızın bu kısmını tam ekran olarak çalışması için gerekli olan kodlardır.Başlığımızı atıyoruz , görsel arayüzdeki kontrollere ulaşıyoruz , veri tabanı ayarlarını atıyoruz ve en sondada uygulama telefonda yatay bir konumda çalışması için gerekli tek satır kodu yazıyoruz.Ayarlar method’umuz

 

 

SQLite veri tabanımızdan kullanıcın bilgilerini çektikten sonra global değişkenlerimize atıyoruz  getColumnIndex kısmında tablomuzda bulunan kolon adımızı yazıyoruz.url kısmında eklediğimiz jdbc driver’ı yardımı ile sorgulama yapacağımız için string ‘imizi bu şekilde olulturuyoruz daha sonra veri tabanı bağlantımızı kapatıyoruz.Kontroller method’umuz

 

 

Görsel arayüz’ümüzdeki kontrollerimize ulaşıyoruz.Button’ların click event’lerini yakalıyoruz.onClick method’umuz

 

 

Arayüz’de bulunan 3 tane Button’u id’sinden belirleyip tıklanan Button’a göre method’lara yönlendiriyoruz. KisaYollar method’umuz

 

 

Kullanıcı sql sorgusu yazarken onu hızlandırabilecek bazı özel kelimeleri burada ekledim bu dizi genişleteletilerek daha fazla seçenek sunulabilir.Builder yardımı ile kullanıcıya gösteriyoruz son olarakta listemizi.onClick event’inde kullanıcı hangisini seçti ise o seçeneği sorgu’muzun yazıldığı text’e ekliyoruz. onClick method’unda bulunan item kullanıcının tıkladığı seçeneği belirtir cs[item] diyerek içeriğini alabiliriz.Tablolar method’u

 

 

İlk olarak sorgulama yapacağımız için internet kontrolü yapıyoruz eğer internet bağlantısı o anda yok ise uygulama hata vermesin diye durduruyoruz.Burada veri tabanımızdaki tablolarımızı listeleyeceğimiz için sorgumuzu bu şekilde default olarak kodların içerisine yazıyoruz ve bu sorguyu TabloSorgula method’una gönderip geriye sonucu ResultSet olarak alıyoruz. Tablolarımızı ekleyeceğimiz Array’i ilk olarak temizliyoruz daha sonra yeni sorgu sonucundaki tabloları bu listeye ekliyoruz ve Builder yardımı ile bu tablo listemizi kullanıcıya gösteriyoruz aynı şekilde seçilen veriyi sorgu text’imize ekliyoruz. InternetKontrol method’umuz

 

 

ConnectivityManager sınıfımızın method’ları yardımı ile kontrolümüzü yapıyoruz ve geriye boolean dönüyoruz.Bu şekilde bir internet kontrolü yapabilmek için AndroidManifest.xml dosyasında izninin eklenmiş olması gerekmektedir.Tablo sorgula method’umuz

 

 

Class.forName yapısı bize projemize eklediğimiz jdbc driver’ını tanımamızı yani kullanabilmemizi sağlamaktadır DriverManager.getConnection ile parametrelerini gönderdiğimiz veri tabanımızda gerekli bağlantıyı kurmamızı sağlıyor. conn.createStatement() method’u ile Statement sınıfından bir geri dönüş alıyoruz daha sonra bu statement değişkenimizin executeQuery method’u yardımı ile yine parametre olarak aldığımız sorgumuzu çalıştırıp sonucunu ResultSet nesnemize alıyoruz.Giriş kısmındada bahsettiğim gibi bu noktada select ‘den başka bir sorgu çalıştırılırsa yazdığımız sorgu işlemini yapacaktır ama geriye bir ResultSet dönmeyeceği için uygulama burada hata fırlatacaktır.Uygulamanın yapılış amacı sorgulamaya dönük olduğu için burada ekstra bir kontrol yapılmamıştır.Sorgula method’umuz

 

 

Sorgulama yapacağımız için ilk olarak internet kontrolümüzü yapıyoruz. TabloSorgula method’umuzdan dönen ResultSet ‘de sorguladığımız tablodaki veriler bulunmakta kolon bilgilerine ulaşabilmek için ResultSetMetaData sınıfından yararlanıyoruz bu şekilde kolon sayısı’nı buluyoruz bu bilgiyi satırlarımızı sıralı bir şekilde TableRow nesnemize ekleyebilmek için kullanacağız.Bir önceki sorgulamadan hafızada olan bilgileri temizledikten sonra sorgu sonucu ekranda gösteren method’larımızı yazalım.BaşlıklarıEkle method’u

 

 

TableLayout nesnemize satırları TableRow nesnesi yardımı ile ekleyeceğimizden daha önce bahsetmiştik burada o işlemi gerçekleştiriyoruz.Kolon bilgisi için tek satır başlık ekleyeceğimiz için herhangi bir döngüye girmeden 1 tane TableRow nesnesi oluşturuyoruz ve kolon isimlerimizi bu TableRow nesnemize ekliyoruz.ResultSet nesnemizden gelen metaData bilgisinden getColumnName method’u yardımı ile index’i i olan kolon adını çekiyoruz TableRow nesnemize ekliyoruz burada yaptığımız uzunluğu 7 den büyükmü kontrolü ise isimler çok uzun olursa ekranda diğer kolonlara yer kalmaz diye gerçekleştirdiğimiz bir kontrol.En sonunda burada oluşturduğumuz TableRow nesnemizi TableLayout nesnemize ekliyoruz.SatirlariEkle method’u

 

 

Her bir satır için TableRow nesnemizi en başta oluşturuyoruz burada öncekinden farklı olarak onClick event’ini yakalıyoruz bunu yapmaktaki amacımız ise kullanıcı herhangi bir satıra tıklarsa açılır bir mesaj olarak daha düzgün şekilde tıklanan satırın verilerini kullanıcıya sunabilmek ve tıklanan satırın rengini belirgin olması açısından turuncuya atıyoruz ama kullanıcı başka bir satıra tıklayınca bu satırın önceki rengine geri dönsesi için Renk ayarla method’unu kullanıyoruz.Sorgu sonucunda onlarca kolon olabilir ister istemez bütün kolonlar ekrana sığmayacağı için kullanıcı ekranın dışında kalan alanları göremeyecektir bu şekilde olan sonuçlar için oldukça faydalı bir özellik.Daha sonra her bir kolon verisi için TextView oluşturuyoruz ve bu satıra yan yana ekliyoruz bu ekleme işlemi sırasında başlık’tada yaptığımız gibi uzunluk kontrolünü yapıyoruz.Ekranda otomatik artan bir rakam olması için default olarak önce biz bir tane TextView ekliyoruz daha sonra veri tabanından gelen verileri yan yana ekliyoruz.Her ekleme işleminde ekranda daha görsel olması için sonuçların farklı renklerde olmasını if kontrolü yardımı ile sağlıyoruz.Son olarakta oluşan satır sayımızı Toast mesajı yardımı ile kullanıcıya gösteriyoruz.RenkAyarla ve SatirGoster method’larımız

 

 

RenkAyarla method’umuzda kullanıcının bir önce tıkladığı satırın bilgisini hafızada tuttuğumuz için onun rengini eski haline getiriyoruz ve yeni tıklanan satırın rengini turuncu yapıyoruz ama aynı zamanda bu satırı hafızaya alıyoruz.SatirGoster method’umuzda ise kullanıcı’nın tıkladığı satırın id ‘si parametre olarak alınıyor oluşturulan String nesnemize kolon başlıkları ve tıklanan satırın içeriği ekleniyor Builder sınıfı yardımı ile kullanıcıya gösteriliyor.Bu sayede çok fazla kolon olupta ekrandan taşan bir sonuca bile kullanıcı hiç zorlanmadan ulaşmış oluyor.Uygulamamızda kodlama olarak yapmamız gerkenler bu kadar son olarak telefonda ve tablet ‘de ekran görüntüleri

 

 

 

 

 

Kaynak Kodları Buradan İndirebilirsiniz

posted in Android by gokhan

Follow comments via the RSS Feed | Yorum yapın | Trackback URL

65 Comments to "Android MSSQL Uygulaması"

  1. Yunus wrote:

    Çok güzel olmuş Gökhan, ellerine sağlık çok şey öğrencem bu örnekle.

  2. Uğur Yaşar wrote:

    Elinize sağlık, yazılarınızın devamını bekliyoruz =)

  3. süleyman wrote:

    elinize saglık gökhan sistem analizi dersinden proje aldım androide ofis uygulması diye onun kodlarınıda yardımcı olursan sevınırım

  4. gokhan wrote:

    Merhaba ,

    Elimden geldiğince yardımcı olmak isterim.Siz yapmaya başladıysanız uygulamayı takıldığınız noktaları yazarsanız sevinirim.İyi çalışmalar

  5. Erkan wrote:

    Elinize sağlık, gerçekten çok güzel bir uygulama olmuş.

  6. Yunus wrote:

    Merhaba Gökhan, eclipse’e projeyi eklediğimde projenin üzerinde ünlem işareti çıkıyor, projeyi çalıştırmak istediğimde ise
    “Your project contains error(s), please fix them before running your application” diye bi hata veriyor.
    acaba bende eksik birşeylermi var

  7. gokhan wrote:

    Selam Yunus,

    Projeyi ekledikten sonra çoğunlukla sende sonradan eklenen jar dosyası hata verdiriyordur onun içinde şu şekilde bir yol izlermisin : Proje sağ tık > Properties > Java Build Path kısmındaki Libraries sekmesinde sql bağlantısını gerçekleştirdiğimiz jar dosyası eklenmiş olmalı jtds-1.2.5.jar adında bu dosya hata veriyor ise buradan silip tekrar Add External Jar diyerek eklemen gerekir.Bu şekilde çoğunlukla hata giderilicektir.

    Birde hatayı uygulama tam olarak nerede veriyor mesela uygulamanın içerisindeki class ‘ların içerisindeki kodlardamı veriyor yoksa ünlem işareti sadece genel proje klasör’ünün üzerindemi?

    İyi çalışmalar

  8. Yunus wrote:

    Evet dediğin gibi lib kısmındaki path i düzelttiğimde oldu çok tşkler, ellerine sağlık.

  9. Ebubekir wrote:

    insert ve update işlemleri için de bir örnek paylaşır mısınız ?

  10. hasan wrote:

    Merhaba Yunus bey,

    Gökhan beyin problemi bende de oldu. External jar’dan dediğiniz gibi düzelttim.

    Akabinde şu hatayı veriyor.

    [2012-10-10 16:21:19 - MSSQLUygulamasi] Project has no default.properties file! Edit the project properties to set one.

    Yardımınız için şimdiden teşekkür ederim.

  11. hasan wrote:

    isimler karıştı, kusura bakmayın.

  12. ahmet wrote:

    gökhan bey insert işlemiyle de ilgili bir örnek gösterirseniz çok mutlu oluruz.

  13. gokhan wrote:

    Merhaba arkadaşlar,

    Android tarafında bu uygulamayı çalıştırdıysanız insert veya update için ekstra herhangi bir şey yapmanıza gerek yok aslında neden derseniz bizim insert , update veya delete derken bahsertiğimiz şey tamamen sql tarafında gerçekleşen bir işlemdir Android tarafı ile alakalı bir kısmı yok sadece sizin yapmanız gereken Android tarafında doğru sql cümlesini göndermek.Uygulama üzerindeki bir method’dan örnek vermek gerekirse

    Aşağıdaki method’u inceleyelim,

    private ResultSet TabloSorgula(String sorgu) {
    ResultSet results = null;
    try {
    Class.forName(driver).newInstance();
    Connection conn = DriverManager.getConnection(url, userName,
    password);
    Statement statement = conn.createStatement();
    results = statement.executeQuery(sorgu);

    } catch (Exception e) {
    Toast.makeText(this, “Error : ” + e.toString(), Toast.LENGTH_SHORT)
    .show();
    }
    return results;
    }

    Gerekli parametreleri aldıktan sonra .executeQuery() method’unu çalıştırıyoruz , bu method bizden sql tarafında çalıştırmak istediğimiz string cümleyi istemektedir.Burada siz sql tarafı ile ne yapmak isterseniz ona göre bir string sql cümlesi yazıp göndermelisiniz.Mesela veri tabanına bir kayıt atmak istiyorsanı INSERT INTO , silmek istiyorsanız DELETE FROM , güncellemek istiyorsanız UPDATE cümlelerini yazmalısınız.Eğer çalışacak olan string sql cümlesinden bir sorgu sonucu geri dönecekse o sonucu ResultSet ‘e almalısınız.

    Anlaşılmadık bir nokta olursa daha detaylı olarak bir örnek uygulama üzerinde de anlatabilirim.

    İyi çalışmalar

  14. mete top wrote:

    merhabalar anlatım cok yararlı tesekkurler fakat bunu emılatorde denemek ıcın local server baglantısı nasıl yapabılırım. tesekkurlelr

  15. gokhan wrote:

    Merhaba,

    Uygulama uzak sunucu’daki veri tabanını sorgulamak için yapılmıştı ama siz local de çalışmak isterseniz ip ve şifre bilgilerinizi ona göre düzenlemelisiniz veya local derken SQLite ‘dan bahsediyorsanız o zaman sistem biraz değişmesi lazım.Burada MSSQL ‘e bağlanabilmek için dll kullanılıyor SQLite için bu dll’e gerek yok mesela.

    İyi çalışmalar

  16. mete top wrote:

    Android uygulama Local olarak baglanti sagladim. (Ms sql) gokhan bey ben delphi 2007 ile tenik servis programi yazdim bun kendim kullaniyorum burada gelen sevis taleplerini kendi proramima girdigimde servis elemaninin elindeki android cep telefonunada gelsin veya android uygulamasi 10 dakikada bir sistemden sorgulayarak varsa yeni servis uyari yapsin. Ayni zamanda sizin bu uygulamada sorgu sonrasi listeye tikladigimizda bana ayri bir ekran acsin ve her tablo bilgisini bir textview icinde gostersin. Ayrica bu islemde personel islemi bitirdiginde bu acilqn kisimda aciklama, tamamlandi gibi kisimlari yaptiktan sonra guncelle butonuna basip sql serverda guncelleme yapmasini nasil yapabiliriz. Tesekkurler

  17. sema wrote:

    merhabalar
    benm mssql şifrem yok yani sisteme otomatik giriş yapıyorum ve kurulum aşamasında hangi şifreyi verdiğimi hatırlamıyorum.bağlantı kurulma aşamasında kullanıcı adı ve şifre yazmadan otomatik giriş yapabilme şansımız var mı ?

  18. gokhan wrote:

    Merhaba,

    Aslında bunları oldukça basit bir şekilde yapabilirsin.İlk olarak arkadaşın senin veri tabanını android ile internet üzerindenmi sorgulayacak yoksa local veri tabanımı kullanacaksın? Her iksinde de işlemler aynı bağlantıyı sağladıktan sonra, şu an uygulamada hem listeleme hemde tek bir satıra tıklayıp detay’ını görme özellikleri var sadece sen o açılan detay penceresine bir tanede “Tamamlandı” buton’u eklemek ve veri tabanını güncellemek istiyorsun, bunuda şu şekilde yapabilirsin açılan detay penceresinde o an açılan satırın ID bilgisi bulunmakta bu ID bilgisi senin için önemli olan şey , kullanıcı detay’ı gördükten sonra “Tamamla” buton’una bastığı zaman bu ID yi sadece veri tabanında güncellemen lazım.

    Bu arada makaledeki projeyi kendinde çalıştırabildinmi?

    İyi çalışmalar

  19. gokhan wrote:

    Merhaba ,

    Eğer localde çalışacak isen kullanıcı adı ve şifreye gerek olmaz ama burada sql tarafı bazı güvenlik önlemlerinden dolayı engelleyebilir onun için sen mssql server’da bir tane yetkili kullanıcı oluştur onun kullanıcı adı ve şifresi ile bağlan.Burada gecen kullanıcı adı ve şifre bilgisi sql server’ın değilde bir kullanıcının olursa çok daha sağlıklı olur.

    İyi çalışmalar

  20. mete top wrote:

    test için localde suan yapıyorum. projeyı tamamladıgımda ıse ınternet uzerınden yapacagım. sımdılık sa ıle baglanıyorum. normalde kullanıcı var.
    Bu arada projenızı calıstırdım sıkıntı yok.

  21. gokhan wrote:

    Merhaba,

    İstersen şimdi ilerlemen gereken adımı yaz ben sana nasıl yapılacağını tarif edeyim.Kendin yapsan çok daha iyi olur senin açından.

    İyi çalışmalar

  22. mete top wrote:

    Hepsini yaptım. Bir yer kaldı Servisleri (sorgulama ekranı) cağırırken bekleme olacagından dolayı AsyncTask kullanmayı düşündüm ama denedim denedim olmadı.
    sorgulama.java

    package com.MSSQL;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ArrayList;

    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.AlertDialog.Builder;
    import android.app.Dialog;
    import android.app.ProgressDialog;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.content.pm.ActivityInfo;
    import android.database.Cursor;

    import android.graphics.Color;
    import android.net.ConnectivityManager;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.WindowManager;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ProgressBar;
    import android.widget.TableLayout;
    import android.widget.TableRow;
    import android.widget.TextView;
    import android.widget.Toast;

    public class Sorgulama extends Activity implements

    OnClickListener {
    Button bSorgula, bKisaSorgular, bKisaYollar, bTablo,dugme;
    EditText etSorgu;
    ProgressBar bekleleme;
    TableLayout tl;
    ResultSetMetaData metaData;
    String Servisidx = “”;
    String Musteriadx = “”;
    String Servisid = “”;
    String Musteriad = “”;
    String Adressi = “”;
    String Telefonu = “”;
    String Servistipi = “”;
    String Urunadi = “”;
    String Onceliktip = “”;
    String Bildirimmi = “”;
    String Konusu = “”;
    String Aciklama = “”;
    String tarih =”";
    private ProgressDialog pd;
    TableRow renkTableRow;

    int kolonSayisi = 0, tvId = 0, otoID = 1;
    String url, driver, userName, password;

    ArrayList arrayTablolar = new ArrayList();
    ArrayList arrayResults = new ArrayList();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.sorgulama);

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setTitle(“Teknik Servis Mobil v1.0″);

    Toast.makeText(this,”Servisleri Listeleme”,
    Toast.LENGTH_LONG).show();

    Kontroller();

    Ayarlar();

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    Intent x= new Intent(getApplicationContext(), DETAY.class);
    x.putExtra(sabitler.SERVISIDX,”");
    x.putExtra(sabitler.MUSTERIX,”");
    x.putExtra(sabitler.SERVISID,”");
    x.putExtra(sabitler.MUSTERI,”");
    x.putExtra(sabitler.ADRES,”");
    x.putExtra(sabitler.TEL,”");
    x.putExtra(sabitler.SERVISTIP,”");
    x.putExtra(sabitler.URUN,”");
    x.putExtra(sabitler.ONCELIK,”");
    x.putExtra(sabitler.BILDIRIM,”");
    x.putExtra(sabitler.KONU,”");
    x.putExtra(sabitler.ACIKLAMA,”");

    }//–
    //-

    //–
    private void Ayarlar() {

    DB db = new DB(this);
    db.open();
    Cursor c = db.Query();

    String ipAdresi = null, veriTabaniAdi = null, kullaniciAdi = null, sifre = null;

    while (c.moveToNext()) {
    ipAdresi = c.getString(c.getColumnIndex(“IpAdresi”));
    veriTabaniAdi = c.getString(c.getColumnIndex(“VeriTabaniAdi”));
    kullaniciAdi = c.getString(c.getColumnIndex(“KullaniciAdi”));
    sifre = c.getString(c.getColumnIndex(“Sifre”));
    }

    url = “jdbc:jtds:sqlserver://” + ipAdresi + “;databaseName=”
    + veriTabaniAdi + “;instance=GENPOWER”;
    driver = “net.sourceforge.jtds.jdbc.Driver”;

    userName = kullaniciAdi;
    password = sifre;

    db.close();

    }

    private void Kontroller() {
    bSorgula = (Button) findViewById(R.id.bSorgula);
    bKisaYollar = (Button) findViewById(R.id.bKisaYollar);
    bKisaSorgular = (Button) findViewById(R.id.bKisaSorgular);
    bTablo = (Button) findViewById(R.id.bTablo);
    etSorgu = (EditText) findViewById(R.id.etSorgu);
    tl = (TableLayout) findViewById(R.id.tlSonuc);

    bSorgula.setOnClickListener(this);
    bKisaYollar.setOnClickListener(this);
    bKisaSorgular.setOnClickListener(this);
    bTablo.setOnClickListener(this);

    }

    @Override
    protected Dialog onCreateDialog(int id) {
    final ProgressDialog dialog = new ProgressDialog(this);
    dialog.setMessage(“Lütfen Bekleyiniz…”);
    dialog.setIndeterminate(true);
    dialog.setCancelable(false);
    return dialog;
    }

    @Override

    public void onClick(View view) {

    switch (view.getId()) {
    case R.id.bSorgula:
    showDialog(0);
    etSorgu.setText(“SELECT InServisId as No,StMusteri as Müşteri,(StAdres+’ / ‘+StSehir) as Adres,(StTel1+’ – ‘+StTel2+’ – ‘+StTel3+’ – ‘+StTel4) as Telefon,StServisTipi as [Servis Tipi],StUrun as Ürün,Oncelik as Öncelik,(SELECT CONVERT(CHAR(11),DtBildirim,103)+ CONVERT(CHAR( 5),DtBildirim,114)) as [Bildirim Tarihi],StKonu as Arıza,StAciklama as Açıklama FROM [SERVIS].[dbo].[TbAndroid] “);
    String sorgu = etSorgu.getText().toString();
    Sorgula(sorgu);

    break;
    case R.id.bKisaYollar:
    showDialog(0);
    KisaYollar();
    break;
    case R.id.bKisaSorgular:

    showDialog(0);
    KisaSorgular();
    break;
    case R.id.bTablo:
    Tablolar();

    }

    }

    void showdialog()
    {
    pd = ProgressDialog.show(this, “Yükleniyor”,
    “Resim yükleniyor lütfen bekleyiniz…”, true, true);
    pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    }

    private void Sorgula(String sorgu) {

    try {
    if (etSorgu.getText().toString().equals(“”)) {
    dismissDialog(0);
    Builder builder = new Builder(this);
    builder.setMessage(“Sorgu Boş”).show();

    return;
    }

    if (!InternetKontrol()) {

    Toast.makeText(this, “İnternet Bağlantınızı Kontrol Ediniz.”,
    Toast.LENGTH_LONG).show();

    return;
    }

    ResultSet results = TabloSorgula(sorgu);

    metaData = results.getMetaData();
    kolonSayisi = metaData.getColumnCount();

    otoID = 1;

    arrayResults.clear();
    tl.removeAllViews();

    BasliklariEkle();
    SatirlariEkle(results);
    dismissDialog(0);

    } catch (Exception e) {
    dismissDialog(0);

    Toast.makeText(this, “HATA :” + e.toString(), Toast.LENGTH_LONG)
    .show();

    return;
    }

    }

    private ResultSet TabloSorgula(String sorgu) {

    ResultSet results = null;
    try {
    Class.forName(driver).newInstance();
    Connection conn = DriverManager.getConnection(url, userName,
    password);
    Statement statement = conn.createStatement();
    results = statement.executeQuery(sorgu);

    } catch (Exception e) {
    Toast.makeText(this, “Hata : ” + e.toString(), Toast.LENGTH_SHORT)
    .show();
    }
    return results;

    }

    private void SatirlariEkle(ResultSet results) {
    try {
    int satirSayisi = 0;
    int rowColor = Color.BLACK;

    while (results.next()) {

    TableRow row = new TableRow(this);
    row.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {

    SatirGoster(((TableRow) view).getId());

    RenkAyarla(view);
    view.setBackgroundColor(Color.rgb(245, 92, 44));

    Intent x= new Intent(getApplicationContext(), DETAY.class);
    x.putExtra(sabitler.SERVISIDX,Servisidx.toString());
    x.putExtra(sabitler.MUSTERIX,Musteriadx.toString());
    x.putExtra(sabitler.SERVISID,Servisid.toString());
    x.putExtra(sabitler.MUSTERI,Musteriad.toString());
    x.putExtra(sabitler.ADRES,Adressi.toString());
    x.putExtra(sabitler.TEL,Telefonu.toString());
    x.putExtra(sabitler.SERVISTIP,Servistipi.toString());
    x.putExtra(sabitler.URUN,Urunadi.toString());
    x.putExtra(sabitler.ONCELIK,Onceliktip.toString());
    x.putExtra(sabitler.BILDIRIM,Bildirimmi.toString());
    x.putExtra(sabitler.KONU,Konusu.toString());
    x.putExtra(sabitler.ACIKLAMA,Aciklama.toString());

    startActivity(x);
    }
    });

    TextView tvID = new TextView(this);
    tvID.setText(String.valueOf(otoID));
    row.setId(otoID);
    row.addView(tvID);

    if (rowColor == Color.BLACK) {
    rowColor = Color.DKGRAY;
    row.setBackgroundColor(Color.DKGRAY);
    } else {
    rowColor = Color.BLACK;
    row.setBackgroundColor(Color.BLACK);
    }

    otoID++;

    for (int i = 1; i 7) {
    s = s.substring(0, 7) + “.”;
    }
    tv.setText(s + ” “);
    tv.setId(tvId);
    row.addView(tv);

    tvId++;
    }
    satirSayisi++;
    tl.addView(row);
    dismissDialog(0);
    }
    Toast.makeText(this, satirSayisi + ” tane servis bulundu”,
    Toast.LENGTH_LONG).show();
    } catch (Exception e) {
    Toast.makeText(this, “Hata : ” + e.toString(), Toast.LENGTH_SHORT)
    .show();
    return;
    }
    }

    private void SatirGoster(int otoId) {
    String satir = “”;
    for (int i = 1; i < kolonSayisi + 1; i++) {
    try {
    satir += metaData.getColumnName(i).toString() + " : \r\n";
    satir += arrayResults.get(otoId * kolonSayisi – 1 + i)
    .toString() + "\r\n\r\n";

    Servisidx = arrayResults.get(otoId * kolonSayisi – 1 + 1).toString();
    Musteriadx = arrayResults.get(otoId * kolonSayisi – 1 + 2).toString();
    Servisid = arrayResults.get(otoId * kolonSayisi – 1 + 1).toString();
    Musteriad = arrayResults.get(otoId * kolonSayisi – 1 + 2).toString();
    Adressi = arrayResults.get(otoId * kolonSayisi – 1 + 3).toString();
    Telefonu = arrayResults.get(otoId * kolonSayisi – 1 + 4).toString();
    Servistipi = arrayResults.get(otoId * kolonSayisi – 1 + 5).toString();
    Urunadi = arrayResults.get(otoId * kolonSayisi – 1 + 6).toString();
    Onceliktip = arrayResults.get(otoId * kolonSayisi – 1 + 7).toString();
    Bildirimmi = arrayResults.get(otoId * kolonSayisi – 1 + 8).toString();
    Konusu = arrayResults.get(otoId * kolonSayisi – 1 + 9).toString();
    Aciklama = arrayResults.get(otoId * kolonSayisi – 1 + 10).toString();

    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    Builder builder = new Builder(this);
    //builder.setMessage(satir).show();
    }

    private void BasliklariEkle() {
    try {
    TableRow rowHeader = new TableRow(this);

    TextView ID = new TextView(this);
    ID.setText("Sıra ");
    rowHeader.addView(ID);

    for (int i = 1; i 7) {
    cName = cName.substring(0, 7) + “.”;
    }
    tv.setText(cName);
    tv.setId(tvId);
    rowHeader.addView(tv);
    tvId++;
    }
    tl.addView(rowHeader);
    } catch (SQLException e) {
    Toast.makeText(this, “Hata : ” + e.toString(), Toast.LENGTH_SHORT)
    .show();
    return;
    }
    }

    private void RenkAyarla(View view) {

    if (renkTableRow != null) {
    TableRow tr = renkTableRow;
    if (tr.getId() % 2 == 0)
    tr.setBackgroundColor(Color.BLACK);
    else
    tr.setBackgroundColor(Color.DKGRAY);
    }

    renkTableRow = (TableRow) view;
    }

    private void KisaSorgular() {
    final CharSequence cs[];
    cs = new String[4];

    cs[0] = “select * from [SERVIS].[DBO].TbMusteri”;
    cs[1] = “select * from [SERVIS].[DBO].TbServis”;
    cs[2] = “select * from [SERVIS].[DBO].TbFatura”;
    cs[3] = “select * from [SERVIS].[DBO].TbHesap”;

    etSorgu.setText(“”);
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(“Kısa Sorgular”).setIcon(R.drawable.query)
    .setItems(cs, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int item) {
    String sorgu = etSorgu.getText().toString();
    etSorgu.setText(sorgu + cs[item]);
    dismissDialog(0);
    }

    });
    AlertDialog alert = builder.create();
    alert.show();
    }
    private void KisaYollar() {
    final CharSequence cs[];
    cs = new String[7];

    cs[0] = “select”;
    cs[1] = “*”;
    cs[2] = “from”;
    cs[3] = “[SERVIS].[DBO].”;
    cs[4] = “where”;
    cs[5] = “and”;
    cs[6] = “select * from [SERVIS].[DBO].”;

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(“Kısa Yollar”).setIcon(R.drawable.query)
    .setItems(cs, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int item) {
    String sorgu = etSorgu.getText().toString();
    etSorgu.setText(sorgu + cs[item]);
    dismissDialog(0); }
    });
    AlertDialog alert = builder.create();
    alert.show();
    dismissDialog(0);
    }
    private void Tablolar() {
    try {
    if (!InternetKontrol()) {
    Toast.makeText(this, “İnternet Bağlantınızı Kontrol Ediniz.”,
    Toast.LENGTH_LONG).show();
    return;
    }

    String sorgu = “SELECT StMusteri,StAdres,StTel1,StServisTipi,StUrun,Oncelik,(SELECT CONVERT(CHAR(11),DtBildirim,103)+ CONVERT(CHAR( 5),DtBildirim,114)) as DtBildirim,StKonu FROM [SERVIS].[dbo].[TbAndroid]“;
    ResultSet results = TabloSorgula(sorgu);

    arrayTablolar.clear();

    while (results.next()) {
    arrayTablolar.add(results.getString(3).toString());
    }

    CharSequence cs[];
    cs = new String[arrayTablolar.size()];

    for (int i = 0; i < arrayTablolar.size(); i++) {
    cs[i] = arrayTablolar.get(i);
    }

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Tablolar").setIcon(R.drawable.table)
    .setItems(cs, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int item) {
    String sorgu = etSorgu.getText().toString();
    etSorgu.setText(sorgu + arrayTablolar.get(item));
    }
    });
    AlertDialog alert = builder.create();
    alert.show();
    } catch (Exception e) {
    Toast.makeText(this, "HATA :" + e.toString(), Toast.LENGTH_LONG)
    .show();
    return;
    }
    }
    private boolean InternetKontrol() {
    showDialog(0);
    ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    if (manager.getActiveNetworkInfo() != null
    && manager.getActiveNetworkInfo().isAvailable()
    && manager.getActiveNetworkInfo().isConnected()) {
    dismissDialog(0);
    return true;
    } else {
    return false;
    }
    }

    }

  23. gokhan wrote:

    Merhaba,

    Bu kodlar asynctask kullanmadan çalışıyor mu? asynctask ile ilgili şu adresleri bir incele istersen oldukça güzel örnekler mevcut

    Yazdığın kod’un neden çalışmadığını log tutarak veya hataları mesaj verdirerek uygulamanın nerede patladığını anlayabilirsin

    http://www.vogella.com/articles/AndroidPerformance/article.html

    http://stackoverflow.com/questions/9671546/asynctask-android-example

    http://developer.android.com/reference/android/os/AsyncTask.html

    http://android10.org/index.php/articlesother/239-android-application-and-asynctask-basics

    İyi çalışmalar

  24. mete top wrote:

    asynctask kullanmadan çalışıyor. bir bakıyım linklere. teşekkurler

  25. Tolga wrote:

    Ellerin dert gormesin , cok tesekkur ediyorum =)

  26. mete top wrote:

    gokhan bey;
    herşey tamam fakat secilenler tablosuna bilgi girişi yaptıktan sonra (sqlite database) bu tablodakılerı while dongusu ıle sql serverdakı store procedure calıstırıp secılen parcaların teker teker ınsert etmekteyım.
    asagıdakı kodda normalde sqllite tablosundan bu bılgılerı listview’e gondere bılıyorum ama listview yerıne store procedur cagırdıgımda sadece ılk verı celısıyor . dıger satırlar ıcın while dongudu olusmuyor.
    nedenı ne olabılırç
    tesekkurler.

    private void DBListeSatEkle(Cursor c) {
    CallableStatement proc_stmt = null;
    try {

    Class.forName(driver).newInstance();
    Connection coz = DriverManager.getConnection(url, userName,
    password);
    String InServisId = null, InProductId = null, FlMiktar = null;
    DBPARCA db = new DBPARCA(this);
    db.open();
    Cursor c1 = db.Query();
    //Cursor c = db.rawQuery(bilgiservisid);

    Toast.makeText(this,”getCount: “+ c1.getCount(),
    Toast.LENGTH_LONG).show();
    productArray.clear();
    c1.moveToFirst();

    if(c1.getCount() > 0) {
    while(true) {

    proc_stmt = coz.prepareCall(“{ call [SERVIS].[dbo].SpAktarim_AndroidProductGetir(?,?,?) }”);
    proc_stmt.setString(1, c1.getString(1));
    proc_stmt.setString(2, c1.getString(2));
    proc_stmt.setString(3, c1.getString(4));
    proc_stmt.executeQuery();

    if(!c1.moveToNext()) break;
    }
    proc_stmt.close();

    }
    } catch (Exception e) {
    Log.d(“Error”,”error in cursor”);
    e.printStackTrace();

    }
    }

    dbhelper class
    public Cursor Query() {
    Cursor c = database.query(“secilenler”, new String[] { “ID”, “Inservis”,
    “ProductId”, “UrunAd”,”Adet” }, null, null, null,
    null, null);
    return c;
    }

  27. gokhan wrote:

    Merhaba,

    while(true) { Buradaki kullanım şekli yanlış olmuş , while(c1.Next()) olması lazım.Tabi bu şekilde yaptığın zaman bir üst satırdaki if kontrolünede gerek kalmaz çünkü oradaki next() method’u bir adım sonra kayıt varsa while döngüsünün içerisine girmesini sağlar eğer yeni kayıt yoksa zaten while içerisine girmez kod , döngü bitirilmiş olur.

    c1.moveToFirst(); ve if(!c1.moveToNext()) break; bu kod’larada da gerek yok.

    İyi çalışmalar

  28. Furkan wrote:

    Teşekkürler çok faydalı bir çalışma.Ben birkaç cihazdan(android işletim sistemli) Ms Sql Server daki ortak bir veritabanına web servis kullanmadan doğrudan erişebilir miyim?Bunu yapabiliyorsam ne şekilde yapmalıyım.
    Teşekkürler…

  29. gokhan wrote:

    Merhaba,

    Evet erişebilirsin hatta bu makale’deki örnek de tam onu anlatıyorum web servisi kullanmadan ara bir dll ile mssql sorgulama, istersen kaynak kod’u indir bir kurcala kendi uzak sunucu bilgilerini gir istediğin sonucu verecektir

    İyi çalışmalar

  30. Taner wrote:

    Çok güzel bir uygulama olmuş elinize sağlık teşekürler.

  31. Taner wrote:

    class ta ünlem veriyor yalnız :) test edemedim

    class c = 2 hata

  32. gokhan wrote:

    Merhaba,

    Hata vermesinin sebebi dll dosyasını import etmemen den dolayı olabilir, makalenin en başındaki resimde gördüğün adımları sendeki proje de kontrol edersen sorun kalkacaktır

  33. sema wrote:

    ben neden projeyi çalıştıramıyorum :( yardım edin lütfen

  34. gokhan wrote:

    Merhaba,

    Aldığın hatayı yazarsan yardımcı olabilirim

  35. osman wrote:

    Merhaba,
    Java ve Adroid tarafında yeniyim. Uygulamanızın kaynak kodunu indirerek eclipse import ettim. Eclipse jtds-1.2.5.jar referansında sorun var gösteriyordu silip tekrar import ettim sorun gitti.

    Uygulamayı çalıştırdım, sql ayarları kısmını kaydettim yalnız sorgu çalıştırdığımda aşağıdaki hatayı alıyorum.
    java.lang.classnotfoundexception net.sourceforge.jtds.jdbc.driver

    adroid tarafından ms sql tarafına bağlanmam gerekecek bir projeye başlamak üzere olduğum için 1 haftadır aynı hatayı çözmeye çalışıyorum.
    CLASSPATH değişkeni için C:\eclipse\classpath dizini girdim ve jtds-1.2.5.jar dosyasını da bu dizine kopyaladım.PATH değişkeni için de C:\Program Files\Java\jdk1.7.0_11\bin dizinini girdim. İnternette hataya çözüm olarak CLASSPATH yolu ve jar dosyası göstrilmiş. windows 7 de test ediyoruım. Soruna çözüm üretme konusunda yardımcı olabilirseniz çok memnun olurum, şimdiden baya bi zaman harcamış oldum.
    İyi Çalışmalar

  36. gokhan wrote:

    Merhaba,

    Slq server tarafında yetkili bir kullanıcı tanımladığını varsayıyorum yoksa ilk onu oluşturup deneyin , bu tip sorunları başkalarıda yazdı birde şunları deneyin : Uygulamayı eclipse juno üzerinde çalıştırın aynı ayarları yapın , birde windows 7 ‘de engellliyor olabilir güvenlik olaylarından istersen windows xp de deneme yap eğer orada çalışırsa windows 7 deki engelleyen noktayı bulmak kolay olur.

    İyi çalışmalar

  37. osman wrote:

    Merhaba,

    sql de sa kullanıcı ile oturum açmaya çalışıyorum ve o konuda bir sıkıntı olduğunu sanmıyorum, aynı kodla zaten eclipse de java projesi oluşturduğumda veritabanına bağlanabiliyorum, fakat android projesinde aynı java jar dosyasını ve kodu kullandığımda belirttiğim hatayı alıyorum. sqljdbc4.jar ile android projesinden ms sql e bağlanmak isrtediğimde onda da sll olması zorunluluğu var sanırım – internetten de arattım kadarıyla-, bu yüzden jtds-1.2.5.jar ı kullanmaya çalışıyorum, sll i ben çözümleyip çalıştırsam bile bu uygulamayı kullanacak müşterilerimiz işin içinden çıkamayacaktır. Android tarafında emulatöre bu driverin ya da benzer bir gereksinimin kurulması gibi bir durum söz konusu olabilir mi?

    İyi Çalışmalar

  38. erhan pesen wrote:

    hocam merhaba sizin vermiş olduğunuz kod için çok teşekkürler yanlız kodu uyguladığımda java.lang.ClassNotFoundExcaption:net.sourceforge.jtds.jdbc.Driver hatası almaktayım baglantı classını kaldırıp tekrar ekledım aynı sıkıntı devam etmekte bı yardımcı olabılırmısınız

  39. Furkan wrote:

    Merhaba,
    Öncelikle verdiğiniz bilgiler için teşekkürler.
    Android bir cihazdan ve aynı anda bir masaüstü bilgisayardan(ya da farklı bir android cihazdan) ortak bir veritabanına erişmemi gerektiren bir proje üzerinde çalışıyorum.Bu projem için Ms SqlServer’ı nasıl kullanabilirim?Kullanabilirsem nasıl yapmalıyım, bahsettiğiniz şekilde bu işi halledebilir miyim?

  40. Fırat wrote:

    merhabalar;

    Verdiğiniz bilgiler icin tesekkür ederim. Emeğinize saglık.

    Ancak konu ile ilgili olarak bir kac sorum olucak. Bilgisayardaki sql e android emulator den bir türlü sql baglantısını yapamadık. java.lang.classnotfoundexception net.sourceforge.jtds.jdbc.driver hatasını bende alıyorum kaldırdım , yeniden yükledim yine hata devam etti. bunun üzerine 1.3.0 versiyonunu kurdum ekledim yine aynı hata. ayrıca baska makinede deniyorum onda da program çalışıyor ancak sorgulama ekranında tablolar dedigim zaman bi süre bekleyip program yanıt vermiyor uyarısı alıyorum. bu konuda yardımcı olabilirmisiniz?

    Saygılarımla

  41. mehmet wrote:

    Merhabalar Gökhan Bey,
    Bende de üstte mesajları bulunan Osman,Fırat ve Furkanın yazdığı hatanın birebir aynısını alıyorum, uygulama çalışıyor ancak sorgulama ekranında tablolar a tıkladığımda java.lang.classnotfoundexception net.sourceforge.jtds.jdbc.driver hatasını alıyorum.
    Bu arada Eclipse üzerindeki simulatör ile deniyorum uygulamayı.
    Yardımcı olabilirseniz çok sevinirim.

  42. Onur wrote:

    Merhaba Gökhan Bey,
    Tezim için android telefonu MSSQL server a bağlamam gerekiyor fakat kullaniciAdi ve şifre oluşturulmasında sorun yaşadım. Arkadaşlarımın laptoplarından birçok farklı sey deneyip kendi laptopuma bağlanmaya çalıştım fakat sorunu çözemedik. Hamachi bile kullanarak denedim :( sizce göremediğim sey nedir?

  43. Oğuzhan wrote:

    gökhan bey merhaba,
    çok ama çok teşekkür ederim bu güzel örneginiz için,
    rica etsem localde bu baglantıyı nasıl yapacagımız ile ilgili connection string yapısını da bizimle paylaşabilir misiniz?

  44. gokhan wrote:

    Merhaba,

    En yakın sürede bu yazının daha gelişmiş halini yazacağım oradan takip edebilirsin.

  45. sencer wrote:

    Merhabalar;
    Programın bize çok faydalı olacağı kesin fakat bende java.lang.ClassNotFoundException: net.sourceforge.jtds.jdbc.Driver hatası alıyorum debug ile ilerlediğimde bu class’ı bulamadığını görüyorum sanırım bizim import ile ilgili sıkıntımız var

  46. Aydın Yılmaz wrote:

    Merhabalar,

    “java.lang.ClassNotFoundExcaption:net.sourceforge.jtds.jdbc.Driver” Hatasını alan kişilerin dikkatine……!

    Bu sorun cihazınızda adı geçen jtds dosyasının bulunmamasından kaynaklanıyor.

    Çözüm:
    Projeyi sağ tıklayın ve özelliklere (properties) girin. En son sekme olan “Order and Export” sekmesini açın. Listede yer alan “ltds-1.2.5.jar” dosyasını işaretleyin. Son olarak ok tulşayıp çıkın.

    Projeyi yeniden derleyin. Sorununuz çözülecektir. Bu işlemi yaparak jdts-1.2.5.jar dosyasını uygulamanızın içine dahil edecek ve cihazınıza kurduğunuz zaman o sürücüyü de uygulamayla birlikte kuracaktır.

    Tekrar ediyorum cihazınızda o sürücü bulunmadığından bu hatayı vereriyor. Derlemenize jdts.jar dosyasını da dahil ettiğinizde sorun kalmayacaktır.

    İyi çalışmalar….

  47. sencer wrote:

    Arkadaşlar az once yazdığım sorunun çözümünü buldum. http://sourceforge.net/projects/jtds/ adresinden son sürümü 1.3.0 sürümünü indirdim ve problemsiz çalıştı. Bilginize…

  48. Aydın Yılmaz wrote:

    Benim başka bir sorunum var bununla ilgili…

    Wifi üzerinden bağlandığım zaman sql sunucuya sorun yok. Herşey gayet güzel çalışıyor. Ancak GSM şebeke üzerinden bağlanmaya kalktığımda sql sunucuya erişemiyorum….

    günlerdir bunu aşmaya çalışıyorum…

  49. sencer wrote:

    Bağlantı ile SQL2012 ye bir türlü bağlanamıyorum. instance olan hiç bir serveri desteklemiyor fakat instance yok ise sorunsuz bağlanıyor. çozum konusunda fikriniz varmı?

  50. Oguzhan Ahmet wrote:

    gökhan bey,

    sizin çalışmanızdaki yöntemleri izleyerek kendi yaptığım uygulamada maalesef durdu diye mesaj cıkıyor. sebebi ne olabilir ?

  51. gokhan wrote:

    Merhaba Oğuzhan,

    Debug yaptınmı kod nerede hata veriyor tespit edebildinmi?

  52. Oguzhan Ahmet wrote:

    Teşekkürler Gökhan bey, listview activity ile alakalı bir sorunmus hallettim. List view’e veri çekerken izlememliz gereken yol nedir.

    Listview1.add(results.getstring(1).tostring) şeklindemi ekleyecegiz? ufak bir örnek verebilirmisiniz ?

  53. gokhan wrote:

    Merhaba,

    Evet add() method’u ile yeni bir kayıt ekleyebilirsin , 2. yol olarak Adapter da kullanabilirsin

    Adapter kullanımına örnek;

    http://www.gokhanakgol.com/2012/09/05/android-autocompletetextview-kullanimi/

  54. Aydın Yılmaz wrote:

    Bende ise durum şu;

    Daha önce de belirttiğim gibi mobil cihazımda wi-fi ile bağlıyken program akıyor. Hiç bir sorunu yok.

    Ancak 3g ile bağlanınca uzaktaki SQL sunucuya erişemiyorum ve Oğuzhan bey’in aldığı mesajı alıyorum. Program durduruldu diye.

    Port taraması yaptığımda 3g de iken sunucunun haberleştiği 1433 portunu görmüyor. Bu sorunu bir türlü aşamadım.

    Bu arada Gökhan Bey, Sizlere çok teşekkür ediyorum. Çok açık ve anlaşılır bir örnek sonmuşsunuz. Harika bir çalışma olmuş…

  55. Furkan wrote:

    Hocam localdeki ms sql’e bağlantı ile ilgili bir örnek yapabilirseniz ya da bunu öğrenebileceğim bir yer tavsiye ederseniz çok makbule geçer.Hayli zamandır androidden mssql’e bağlanmaya çalışıyorum bir türlü olmuyor.En kısa zamanda yardım bekliyorum.

  56. gokhan wrote:

    Merhaba Faruk,

    Android ile local mssql e bağlanma konusunda yeni bir yazı yazdım oradan konuya hakim olabilirsin

  57. Emre wrote:

    Öncelikle yazınız için teşekkürler.
    Hata1:java.lang.class.notfoundException:net.sourceforge.jtds.jdbs.driver
    Hata2:java.lang.nullpointerException hatası almaktayım.
    başka bir Ipadres veritabanı adı kullanıcı adı ve şifresi girdim mssql den bağlanabiliyorum.Yardımcı olabilriseniz sevinirim.

  58. get rid of cellulite diet wrote:

    What’s up, just wanted to mention, I enjoyed this post. It was funny. Keep on posting!

  59. wwe randy orton media wrote:

    I always used to study article in news papers but now
    as I am a user of net thus from now I am using net for articles,
    thanks to web.

  60. Debenhams Discount code wrote:

    Thanks for sharing your thoughts about Android MSSQL Uygulaması.
    Regards

  61. how to treat cold sores fast wrote:

    My partner and I stumbled over here by a different website and thought I might check things out.

    I like what I see so now i’m following you. Look forward to looking over your web page for a second time.

  62. h-net2.msu.edu wrote:

    This is very interesting, You’re a very skilled blogger. I have joined your rss feed and look forward to seeking more of your wonderful post. Also, I’ve
    shared your web site in my social networks!

  63. programmer wrote:

    hocam merhaba emeğinize sağlık baya detaylı bir uygulama olmuş ama ben server aracılığıyla veri çekiyorum ve bana sadece listviewin bir satırına tıkladığınızda ayrıntının gelmesini istiyorum. sizin yaptığınız gibi. çok inceleyemedim sadece o kod kısmını bana yazmanız mümkün mü

  64. gokhan wrote:

    Merhaba,

    İstediğin kısım yazıdaki SatirGoster() method’unda yapılıyor.

  65. Resul BAL wrote:

    Merhaba, Gökhan bey yazınız için çok teşekkür ederim. Bu makale ile çok yardımcı oldunuz. Hakkınızı helal edin.

    Bu arada
    android.os.NetworkOnMainThreadException hatası alanlar varsa OnCreate() metodu altına aşağıda ki kodu yazdıktan sonra o hata ortadan kalkıyor.

    if (Build.VERSION.SDK_INT >= 9) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
    }

Leave Your Comment

*

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org