Bitmap Posted June 21, 2015 Share Posted June 21, 2015 (edited) 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: 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ı: Ö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: 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 June 21, 2015 by Bitmap Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.