Jump to content

Java'da Sqlite Veritabanı Kullanımı


Bitmap
 Share

Recommended Posts

Merhaba, bugün java ile sqlite’ın java’da nasıl kullanıldığını anlatmaya çalışacağım. Öncelikle Sqlite nedir Ondan başlayalım.

 

Sqlite sunucu gerektirmeyen (dolayısıyla kolayca taşınabilir), açık kaynak kodlu ve ilişkisel bir veritabanıdır. Sqlite birçok android projesinde, gömülü sistemlerde, ve tek kullanıcılı (Aynı anda bir kullanıcının kullandığı) uygulamalarda kullanılabilir. Oldukça küçük ve hızlıdır.

 

 

Şimdi Java ile nasıl entegre edeceğimizi inceleyelim:

 

Kurulum

Sqlite JDBC kütüphanesini indirmemize gerekiyor. Bu adresten indirebilirsiniz. Bunu indirdikten sonra oluşturduğumuz projeye ekliyoruz.

Projeye sağ tık->properties->”java built path"->"libraries"e geldikten sonra "add external jar" diyoruz ve indirdiğimiz .jar dosyasını seçip projeye ekliyoruz.

 

Aşağıdaki örneği görebilirsiniz:

1.png?w=800

Program

Projeye Github üzerinden ulaşabilirsiniz.

Telefon rehberi benzeri bir senaryomuz var. Rastgele oluşturulacak verileri programa kendisi girecek, günceleyecek, listleyecek ve silecek.

 

Veritabanımız Aşağıdaki biçimde hazırlandı:

2.png

 

 

Öncelikle SqliteDatabase classımızı oluşturalım. Yüklediğimiz sqlite kütüphanesindeki org.sqlite.JDBC classını kullanarak bağlantı nesnemizi oluşturacağız ve jdbc:sqlite:C:\\Database\\Adresi.sqlite şeklinde bir bağlantı cümlesi ile veritabanına bağlanacağız. Aşağıdaki class’tan connect() methodunu inceleyebilirsiniz:

protected void connect() throws SQLException {
		try {
			Class.forName("org.sqlite.JDBC"); /// sınıfı yükledik
			conn = DriverManager.getConnection("jdbc:sqlite:" + dbName); ///dbName değişken olarak geliyor.
		}
		catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

Geri kalanı ise diğer veritabanları ile aynı, sorgu yapacağız ve sonucu gelecek. PHP’den alışkanlık olarak bir Database class’I yazma ihtiyacı hissettim. Aşağıda bulabilirsiniz. Sorguları ise bu class’taki iki metot execute ve query ile işlemlerimizi gerçekleştireceğiz. Execute’i update,insert,delete komutları ile, query’i ise select komutu ile kullanacağız. Bu class’I düzenleyip istediğiniz DBMS ile kullanabilirsiniz.

 

SqliteDatabase.java

package com.github.kbayram;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class SqliteDatabase {
	private Connection	conn;
	private String		dbName;

	public SqliteDatabase(String dbName) {
		this.dbName = dbName;

	}

	/**
	 * This method for select statement
	 * 
	 * @param sql : sql query
	 * @param params Prepared statement parameters
	 * @return ResultSet
	 * @throws SQLException
	 */
	public ResultSet query(String sql, Object... params) throws SQLException {
		PreparedStatement stmt = prepare(sql, params);
		stmt.execute();
		return stmt.getResultSet();
	}

	public ResultSet query(String sql) throws SQLException {
		return query(sql, new Object[] {});
	}
	
	
	

	/**
	 * This method for insert,delete,update statements
	 * 
	 * @param sql query sentence
	 * @param params Prepared statement parameters
	 * @return int count of affedted rows
	 * @throws SQLException
	 */
	public int execute(String sql, Object... params) throws SQLException {
		PreparedStatement stmt = prepare(sql, params);
		stmt.execute();
		return stmt.getUpdateCount();
	}

	public int execute(String sql) throws SQLException {
		return execute(sql, new Object[] {});
	}
	
	
	
	/**
	 * Create a preperared statement and add parameters to this statement.
	 * @param sql
	 * @param params
	 * @return
	 * @throws SQLException
	 */

	private PreparedStatement prepare(String sql, Object... params) throws SQLException {
		connect();
		PreparedStatement stmt = conn.prepareStatement(sql);

		int i = 0;
		for (Object param : params) {
			stmt.setObject(++i, param);
		}
		return stmt;
	}
	
	/**
	 * Create connection to database.
	 * @throws SQLException
	 */
	protected void connect() throws SQLException {
		try {
			Class.forName("org.sqlite.JDBC");
			conn = DriverManager.getConnection("jdbc:sqlite:" + dbName);
		}
		catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * Close connection from database;
	 * @throws SQLException
	 */
	protected void disconnect() throws SQLException {
		if (conn != null && !conn.isClosed()) {
			conn.close();
			conn = null;
		}
	}
/**
	 * Close connection when object swept by GC
	 * @throws SQLException
	 */

	@Override
	protected void finalize() throws Throwable {
		disconnect();
		super.finalize();
	}

}

Ana programımıza gelirsek

 

SqliteMain.java

package com.github.kbayram;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Random;

public class SqliteMain {

	public static void main(String[] arg) {
		Random rnd = new Random();
		try {
			// oluşturduğumuz class'ı kullanarak sqlite nesnemizi tanımladık
			SqliteDatabase db = new SqliteDatabase("PhoneBook.sqlite"); // E:\\PhoneBook.sqlite gibi adresler gelebilir.

			System.out.println("Yeni Kayıt Ekleniyor");

			/// veritabanıne veri giriyoruz...
			db.execute("insert into people(firstname,lastname,phone) values(?,?,?)", "Person" + rnd.nextInt(100), "Lastname" + rnd.nextInt(100),
					"0 (123) " + rnd.nextInt(10000000));
			
			System.out.println("Yeni Kayıt Eklendi! Bilgiler Listeleniyor.");

			
			/// veritabanından olan verileri çekiyoruz.
			ResultSet rs = db.query("select * from people");
			while (rs.next()) {
				System.out.printf("%d \t %-15.15s \t %-10.10s \t %-10.10s %n", 
						rs.getInt("ID"), 
						rs.getString("Firstname"), 
						rs.getString("Lastname"),
						rs.getString("Phone"));
			}
			
			System.out.println("\nBilgiler Listelendi\n\nKayıtlar Düzenleniyor");
			
			// ilk veriyi güncelliyoruz.
			db.execute("update people set firstname=? where id = (select id from people limit 1)", "Updated Person" + rnd.nextInt(100));

			System.out.println("Kayıtlar Düzenlendi! Tekrar Bilgiler Listeleniyor\n");

			
			/// tekrar listeletiyoruz.
			ResultSet rsYeni = db.query("select * from people");
			while (rsYeni.next()) {
				System.out.printf("%d \t %-15.15s \t %-10.10s \t %-10.10s %n", rsYeni.getInt("ID"), rsYeni.getString("Firstname"),
						rsYeni.getString("Lastname"), rsYeni.getString("Phone"));

			}

			System.out.println("\nKayıtlar Siliniyor..");
			///verileri siliyoruz. 
			db.execute("delete from people where id = (select id from people limit 1)");
			System.out.println("Silindi!");

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

	}

}

Çalıştırıldığında ise böyle bir ekran bizi bekliyor:
3.png

 

Java'da veritabanları platform bağımsız olduğundan jdbc ile bağlantı neredeyse tüm dbms'ler ile aynıdır.

 

Bu şekilde Tek sayfa üzerinde listeleme, ekleme, silme ve güncelleme işlemlerini yaptık. Sorularınız olursa sorabilirsiniz.
Projeye Github üzerinden ulaşabilirsiniz.
 

Edited by Bitmap
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...