Arkadaşlar artık database kısmına giriş yapıyoruz.
JDBC -> Java Database Connectivity'nin kısaltmasıdır.
Bir veritabanı verinin düzenlenmiş koleksiyonudur , bir ilişkisel veritabanı satırlar ve sütunlardan oluşan veritabanıdır.Bir ilişkisel veritabanına erişmek için javada iki yol vardır.
JDBC yada JPA(Java Persistence API).Biz JDBCi kullanacaz ve bir ilişkisel veritabanına erişmek için SQL(Structured Query Language'yi) dilini kullanacaz.
Temel sql ifadeleri yazmak için şunları bilmeniz gerekiyo.
-> INSERT = Tabloya yeni bir satır ekler.
-> SELECT = Tablodan veri alır
-> UPDATE = Tablodaki bir yada daha fazla satırı günceller.
-> DELETE = Tabloda bir veya daha fazla satırı siler.
Java'nın aksine , SQL kelimeleri case sensitive değildir.Yani Select ile SELECT yada seLeCt aynı şeydir.Javada public ile Public farklıdır.
Arkadaşlar , her veritabanı kendine ait jar dosyasına sahiptir.JDK (Java Development Kit) de interfaceslar vardır jdbc için.Driver,Connection,Statement,PreparedStatement,ResultSet interfaceleri bunları kullanacaz hangisi neye yarar hemen aşağıya bırakıyorum.
Driver = Veritabanıdan nasıl bir banğantı alacağını bilir.
Connection = Veritabanıyla nasıl iletişim kuracağını bilir.
Statement = SQL ifademizi nasıl çalıştıracağını bilir.
ResultSet = Select sorgusu ile veritabanından ne döndürüleceğini bilir.
Bütün veritabanı sınıfları java.sql sınıfı içerisindedir.
Öncelikle veritabanımızı oluşturmak için mysql'i yüklememiz gerekiyor , ki mysqli yükleme bu dersin konusu değil yüklediğinizi varsayıyorum ve devam ediyorum.
Veritabanında oluşturduğumuz kendi veritabanımızın ismi website ve içerisinde de bir tablo oluşturduk adı users içerisindeki satırlar şunlar;
create table users(id int(11) auto_increment primary key , username varchar(45), password varchar(45),age int(11));
Ve bu tablomuza bir veriyi eklemek için öncelikle ide'mizi açalım ben eclipse kullanıyorum ve eclipseye şunu indirmeniz gerekiyor mysql_connector.jar'ı hemen linki atıyorum.
Indirdikten sonra bunu projemizin içerisine atıp Sağ tıklayıp -> Build path -> add build path edip eklemeniz gerekiyor.
Ve olayımıza gelelim.Öncelikle veri tabanımıza bağlanmak için jdbc url'si oluşturmamız gerekiyor bunun formatı şöyle;
jdbc:mysql://localhost:3306/website burada jdbc kısmı protocoldür , mysql kısmı vendor name , diğer kalan kısımlar isme database specific connection details.bağlantı detayları diyebiliriz.Biz şuan için mysql kullanıyoruz eğer ki oracle veya postgresql kullanıyorsanız onların jdbc formatı da aşağıda.
jdbc:mysql://localhost:3306/website
jdbc:postgresql://localhost/website
jdbc:oracle:thin:@123.123.123.123:1521:website
Veritabanına bağlantı oluşturmak istersek aşağıda hemen bir bağlantımızı da oluşturalım.
bunun için de Connection interfacesini kullanacaz.
Connection connect = DriverManager.getConnection("jdbc:mysql://localhost:3306/website","username","password");
burada username ve password , mysqldeki userimizin kullanıcı adı ve şifresi.
Eğer ki bir ifade çalıştırmak istiyorsak bunun için de PreparedStatement interfacesini kullanırız.Statement ifadesini kullanmıyorum arkadaşlar bunda biraz sıkıntılar olduğu için PreparedStatement interfacesi daha sağlam burdan devam edelim.Örneğin bir kullanıcı ekleyelim.Bunun için veritabanımızda bulunan kullanıcıların bir örneğini java da yapalım.
package com.kerem; public class User { private int id; private String username; private String password; private int age; public User(int id, String username, String password, int age) { this.id = id; this.username = username; this.password = password; this.age = age; } public User() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; }}
Ekleyelim.
package com.kerem; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class JdbcExample { private static final String URL = "jdbc:mysql://localhost:3306/website"; private static final String USERNAME = "kerem"; private static final String PASSWORD = "sifre"; private static final String INSERT_USER = "INSERT INTO users(username,password,age) VALUES(?,?,?)"; public static void main(String[] args) { User myUser = new User(0, "Kerem", "Sifre123", 24); new JdbcExample().addUser(myUser); }<span style="color:#cc7832">private </span>Connection <span style="color:#ffc66d">getConnection</span>() { <span style="color:#cc7832">try </span>{ Class.<em>forName</em>(<span style="color:#6a8759">"com.mysql.cj.jdbc.Driver"</span>)<span style="color:#cc7832">;
Connection con = DriverManager.getConnection(URL, USERNAME, PASSWORD); return con; } catch (SQLException | ClassNotFoundException e) { e.printStackTrace(); } return null; }
<span style="color:#cc7832">private void </span><span style="color:#ffc66d">addUser</span>(User u) { <span style="color:#cc7832">try </span>{ Connection con = getConnection()<span style="color:#cc7832">;
PreparedStatement statement = con.prepareStatement(INSERT_USER); statement.setString(1, u.getUsername()); statement.setString(2, u.getPassword()); statement.setInt(3, u.getAge()); int result = statement.executeUpdate(); if (result > 0) { System.out.println("User added to database"); } else { System.out.println("User did not add to database"); } } catch (SQLException e) { e.printStackTrace(); } } }
Evet yukarıda gördüğünüz gibi ekleme operasyonunu gerçekleştirdik.
Şimdi veritabanından verilerimizi çekelim.
package com.kerem; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class JdbcExample { private static final String URL = "jdbc:mysql://localhost:3306/website"; private static final String USERNAME = "kerem"; private static final String PASSWORD = "sifre"; private static final String INSERT_USER = "INSERT INTO users(username,password,age) VALUES(?,?,?)"; private static final String GET_USERS = "SELECT * FROM users"; public static void main(String[] args) { JdbcExample example = new JdbcExample(); List<User> users = example.getUsers(); for(User u : users) { System.out.println(u.getUsername()+" "+u.getPassword()+" "+u.getAge()); } }<span style="color:#cc7832">private </span>Connection getConnection() { <span style="color:#cc7832">try </span>{ Class.forName(<span style="color:#6a8759">"com.mysql.cj.jdbc.Driver"</span>)<span style="color:#cc7832">;
Connection con = DriverManager.getConnection(URL, USERNAME, PASSWORD); return con; } catch (SQLException | ClassNotFoundException e) { e.printStackTrace(); } return null; }
<span style="color:#cc7832">private </span>List<User> <span style="color:#ffc66d">getUsers</span>() { User user = <span style="color:#cc7832">null;
List<User> users = null; try { Connection con = getConnection(); PreparedStatement statement = con.prepareStatement(GET_USERS); ResultSet set = statement.executeQuery(); user = new User(); users = new ArrayList<>(); while (set.next()) { user.setId(set.getInt("id")); user.setUsername(set.getString("username")); user.setPassword(set.getString("password")); user.setAge(set.getInt("age")); users.add(user); } } catch (SQLException e) { e.printStackTrace(); } return users; }
}
Evet yukarıdaki olayda her şeyi anlatıyor , kodları buraya yazacağım yazıyı değil kodu okumanızı öneririm.
Eğer ki tabloda bir satırı id'sine göre güncellemek istiyorsak ;
package com.kerem; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class JdbcExample { private static final String URL = "jdbc:mysql://localhost:3306/website"; private static final String USERNAME = "kerem"; private static final String PASSWORD = "sifre"; private static final String INSERT_USER = "INSERT INTO users(username,password,age) VALUES(?,?,?)"; private static final String GET_USERS = "SELECT * FROM users"; private static final String UPDATE_USER_BY_ID = "Update users set username = ? where id = ?"; public static void main(String[] args) { Connection con = new JdbcExample().getConnection(); try { PreparedStatement statement = con.prepareStatement(UPDATE_USER_BY_ID); statement.setInt(2, 1); statement.setString(1, "TestName"); statement.executeUpdate(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }} <span style="color:#cc7832">private </span>Connection <span style="color:#ffc66d">getConnection</span>() { <span style="color:#cc7832">try </span>{ Class.<em>forName</em>(<span style="color:#6a8759">"com.mysql.cj.jdbc.Driver"</span>)<span style="color:#cc7832">;
Connection con = DriverManager.getConnection(URL, USERNAME, PASSWORD); return con; } catch (SQLException | ClassNotFoundException e) { e.printStackTrace(); } return null; }
}
eğer ki silmek istersek
package com.kerem; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class JdbcExample { private static final String URL = "jdbc:mysql://localhost:3306/website"; private static final String USERNAME = "kerem"; private static final String PASSWORD = "sifre"; private static final String INSERT_USER = "INSERT INTO users(username,password,age) VALUES(?,?,?)"; private static final String GET_USERS = "SELECT * FROM users"; private static final String UPDATE_USER_BY_ID = "Update users set username = ? where id = ?"; private static final String DELETE_USER_BY_ID = "delete from users_2 where id = ?"; public static void main(String[] args) { Connection con = new JdbcExample().getConnection(); try { PreparedStatement statement = con.prepareStatement(DELETE_USER_BY_ID); statement.setInt(1, 1); statement.executeUpdate(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }} <span style="color:#cc7832">private </span>Connection <span style="color:#ffc66d">getConnection</span>() { <span style="color:#cc7832">try </span>{ Class.<em>forName</em>(<span style="color:#6a8759">"com.mysql.cj.jdbc.Driver"</span>)<span style="color:#cc7832">;
Connection con = DriverManager.getConnection(URL, USERNAME, PASSWORD); return con; } catch (SQLException | ClassNotFoundException e) { e.printStackTrace(); } return null; }
}
Done!