Android 4.0 ile Local Mssql Server Bağlantısı

Nisan 20, 2013

Merhaba arkadaşlar bir önceki android 2.2 sürümü ile yaptığım örnek üzerine oldukça fazla soru geldi genel anlamda sorular sql server bağlantı kurma ile ilgiliydi.Bir önceki yazıya buradan ulaşabilirsiniz.Şimdi ise android 4.0 sürümü üzerinden local bilgisayarımızdaki sql server ‘a bağlanacağız. Android 4.0 sürümü ile birlikte bazı yenilikler gelmiştir bunların en önemlisi main thread içerisinde artık direkt sql kodu yazamıyoruz daha doğrusu sadece sql sorgulamaları değil örneğin main thread içerisinden direkt web servisinede bağlanamayız yeni sürüm ile bazı noktalarda kısıtlamalar geldi bu örnek’de onlarada dikkat ederek kodumuzu yazacağız.Geliştireceğimiz örnek için bir tane uygulama oluşturalım 4.0 veya üzerin bir sürüm belirleyelim.Aşağıdaki ekran görüntüsünü hazırlayalım



activity_main.xml dosyası kodları


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="70dp"
            android:layout_height="fill_parent"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="15dp"
            android:text="ID" />

        <EditText
            android:id="@+id/etID"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_marginRight="10dp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="70dp"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="70dp"
            android:layout_height="fill_parent"
            android:layout_marginLeft="10dp"
              android:layout_marginTop="15dp"
            android:text="Kategori" />

        <EditText
            android:id="@+id/etKategoriAdi"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_marginRight="10dp" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="130dp"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="70dp"
            android:layout_height="fill_parent"
            android:layout_marginLeft="10dp"
              android:layout_marginTop="15dp"
            android:text="Açıklama" />

        <EditText
            android:id="@+id/etAciklama"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp" />
    </LinearLayout>

    <Button
        android:id="@+id/bSorgula"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="220dp"
        android:text="Sorgula" />

</RelativeLayout>




Ekran tasarımını bu şekilde yapmadaki amacımız local mssql veri tabanından ID bilgisine göre tablo sorgulayıp kategori ve açıklama bilgilerini ekrana almak.Bunun için



MainActivity.java sınıfı kodlarımız


package com.example.mssqlconnection;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity implements OnClickListener {

	Button bSorgula;
	EditText etID, etKategoriAdi, etAciklama;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		bSorgula = (Button) findViewById(R.id.bSorgula);
		bSorgula.setOnClickListener(this);

		etID = (EditText) findViewById(R.id.etID);
		etKategoriAdi = (EditText) findViewById(R.id.etKategoriAdi);
		etAciklama = (EditText) findViewById(R.id.etAciklama);

	}

	@Override
	public void onClick(View v) {

		try {
			try {
				Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
			} catch (InstantiationException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		new Thread(new Runnable() {

			public void run() {

				runOnUiThread(new Runnable() {
					public void run() {
						ResultSet results = null;

						try {
							Connection conn = DriverManager
									.getConnection(
											"jdbc:jtds:sqlserver://192.168.1.222:1433;databaseName=Northwind",
											"Android", "123456");

							Statement statement = conn.createStatement();
							statement = conn.createStatement(
									ResultSet.TYPE_SCROLL_INSENSITIVE,
									ResultSet.CONCUR_READ_ONLY);

							int ID = Integer.valueOf(etID.getText().toString());

							String sorgu = "SELECT CategoryID,CategoryName,Description FROM Categories WHERE CategoryID ="
									+ ID;

							results = statement.executeQuery(sorgu);

							results.last();
							int kayitSayisi = 0;
							if (results != null) {
								kayitSayisi = results.getRow();
							}
							results.beforeFirst();

							if (results != null && kayitSayisi != 0) {
								while (results.next()) {

									String kategoriAdi = results
											.getString("CategoryName");

									String aciklama = results
											.getString("Description");

									etKategoriAdi.setText(kategoriAdi);
									etAciklama.setText(aciklama);
								}

							} else {

							}

						} catch (SQLException e) {
							e.printStackTrace();
						}
					}
				});

			}
		}).start();

	}
}





İlk olarak arayüzde tanımladığımız kontrollerimize kod tarafında ulaşıyoruz, button’un click event ini yakalıyoruz ve veri tabanını sorgulayacağımız kodlarımızı buraya yazıyoruz.Kod anlatımından önce yapmamız gereken jtds dosyasını projemize eklemek olacaktır bu dosya veri tabanı ile iletişim kurmamızı sağlıyor. jar dosyasını buradan indirebilirsiniz.Dosya’yı indirdikten sonra .zip içerisinden çıkartarak projemize sağ tık > Properties > Java Build Path > Libraries > Add External Jar diyerek ekliyoruz.

AndroidManifest.xml dosyası içeriği


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mssqlconnection"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.INTERNET" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>


Sql sorgulaması için gerekli tüm işlemleri yaptık, sorgulama için Nortwind veri tabanını local mssql server’a kuruyoruz bu işlem için buradan faydalanabilirsiniz.

Sql sorgusu için veri tabanı üzerinde bir tane sql kullanıcısı yaratmamız lazım bu bilgiyi sorgu sırasında connection string olarak kullanacağız bu işlem içinde buradaki makaleden yararlanabilirsniniz.

Nordwind veri tabanında sorgulayacağımız Categories tablosu görünümü




MainActivity.java sınıfında buton click event’inde yazdığımız kodlarda ise ilk olarak projeye eklediğimiz jar dosyasına ulaşıyoruz Class.forName() yardımı ile daha sonra yeni bir tane thread oluşturuyoruz bu nokta oldukça önemli android 4.0 ile bazı zorunlulukların olduğundan bahsetmiştim yazının başında işte bu noktada yeni bir tane thread açmamızın sebebi de bu aslında, uygulamamızda sql server işlemleri için yeni bir tane thread açıp kodlarımızı onun içerisinde yazıyoruz.Eğer yeni bir tane thread açmadan direkt buton click event’inde sql sorgusu yazsaydık main thread içerisinde sql kodu çalıştıramayacağımız ile ilgili bir hata alacaktık yeni bir thread açarak bunu önlemiş oluyoruz.

Daha sonra connection sınıfını kullanarak sql server ile bağlantımızı hazırlıyoruz burada local’deki mssql server ‘ın ip bilgisi ve :1433 port numarası aynı zamanda sql tarafında oluşturduğumuz kullanıcı bilgilerini doğru bir şekilde yazıyoruz. ip adresinizi öğrenmek için ( benim 192.168.1.222 yazdığım kısım ) çalıştır kısmına cmd yazıp çalıştırın ve command siyah ekran’ı açın daha sonra oraya ipconfig yazıp enter’layın ve karşınıza şu şekilde bir sonuç çıkacaktır




Burada IPv4 Address yazan kısmın karşısındaki rakam sizin bilgisayarınızın ip adresidir sizde benim 192.168.1.222 yazdığım yer ile kendi bilgisayarınız da bulduğunuz ip adresini değiştirin.

Oluşturduğunuz sql kullanıcısı bilgilerini girin.Ben kullanıcı adı : Android Şifre : 123456 olarak belirledim

Sql sorgumuzu hazırlıyoruz ve oluşturduğumuz statement değişkeni üzerinden executeQuery() method’unu çalıştırıyoruz.Buradan dönen sonuca göre kategori adı ve açıklama bilgilerine ulaşıp değerlerine atama yapıyoruz.Burada sorguya kullanıcının ekran dan girdiği ID bilgisini parametre olaral ekliyoruz.


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

2 Comments to "Android 4.0 ile Local Mssql Server Bağlantısı"

  1. ufuk wrote:

    merhaba dosyayı eclipse indirdim çalıştırdığımda şu hatayı aldım acaba sizce nedendir, teşekkürler

    [2013-04-25 16:31:17 - MssqlConnection] Android requires compiler compliance level 5.0 or 6.0. Found ’1.7′ instead. Please use Android Tools > Fix Project Properties.

  2. gokhan wrote:

    Merhaba Ufuk,

    Uygulamayı eclipse import ettiysen eğer aldığın hatanın çözümü için şu yolları izle sorun gidecektir;

    Uygulamaya sağ tık > Properties > Java Compiler > Enable project specific settings tıkla daha sonra Compiler compliance level kısmını 1.6 veya 1.7 yaparak dene

    Her değişiklikten sonra uygulamayı bir derlemen lazım eğer olmazsa her değişiklikten sonra eclipse i kapa aç

Leave Your Comment

*

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