JDBC veri türlerinin tam listesi
Bildiğiniz veri türlerinin yanı sıra JDBC, DBMS için birçok yerel veri türüyle çalışmanıza olanak tanır. Aşağıda, bunları elde etmek için türleri ve işlevleri listeleyeceğim:
Tip | Yöntem |
---|---|
sıralamak | getArray() |
AsciiStream | getAsciiStream() |
BüyükOndalık | getBigDecimal() |
İkili Akış | GetBinaryStream() |
damla | getBlob() |
boole | getBoolean() |
damla | getBlob() |
boole | getBoolean() |
bayt | getByte() |
bayt | getBytes() |
Karakter Akışı | getCharacterStream() |
leke | getClob() |
Tarih | getDate() |
Çift | getDouble() |
batmadan yüzmek | getFloat() |
int | getInt() |
Uzun | uzun olsun() |
Karakter Akışı | getNCharacterStream() |
Nesne | getObject() |
referans | getRef() |
Satır Kimliği | getRowId() |
kısa | kısa olsun() |
SQLXML | getSQLXML() |
Sicim | getString() |
Zaman | getTime() |
Zaman Damgası | getTimestamp() |
UnicodeStream | getUnicodeStream() |
URL | getURL() |
İlkel türleri zaten düşündük. Şimdi nesnelerle çalışmayı deneyelim.
BLOB veri türü
Veritabanına bir nesne kaydetmek istiyorsanız, bunu yapmanın en kolay yolu SQL BLOB türünü kullanmaktır. JDBC'nin Blob adlı muadili vardır.
BLOB , İkili Büyük Nesne anlamına gelir . Bir bayt dizisini depolamak için kullanılır. JDBC'deki Blob türü bir arabirimdir ve içine iki şekilde veri koyabilir (ve alabilirsiniz):
- InputStream'i Kullanma
- Bir bayt dizisi kullanma
Örnek: 3 numaralı sütun BLOB türünü içerir:
Statement statement = connection.createStatement();
ResultSet results = statement.executeQuery("SELECT * FROM user");
results.first();
Blob blob = results.getBlob(3);
InputStream is = blob.getBinaryStream();
Kendi Blob nesnenizi oluşturmak için, createBlob() işlevini kullanmanız gerekir . Örnek:
String insertQuery = “INSERT INTO images(name, image) VALUES (?, ?)”;
PreparedStatement statement = connection.prepareStatement(insertQuery);
// Create a Blob object and get an OtputStream from it to write data to it
Blob blob = connection.createBlob();
// Populate the Blob with data...
OutputStream os = blob.setBinaryStream(1);
// Passing Blob as query parameter
statement.setBlob(2, blob);
statement.execute();
Bir Blob'u verilerle doldurmanın iki yolu vardır. İlki, OutputSteam aracılığıyla :
Path avatar = Paths.get("E:\\images\\cat.jpg");
OutputStream os = blob.setBinaryStream(1);
Files.copy(avatar, os);
Ve ikincisi - baytlarla doldurarak:
Path avatar = Paths.get("E:\\images\\cat.jpg");
byte[] content = Files.readAllBytes(avatar);
blob.setBytes(1, content);
Java Nesnesini Veritabanına Kaydetme
İkili nesneleri veritabanına nasıl kaydedeceğimizi öğrendik: bayt dizileri, bayt akışları vb. Peki ya Java nesneleri? Bir Java nesnesini bir veritabanına nasıl kaydederiz?
Diyelim ki bir şirketin çalışanını tanımlayan bir Çalışan Java sınıfımız var:
public class Employee {
public Integer id;
public String name;
public String occupation;
public Integer salary;
public Date joinDate;
}
JDBC kullanarak bu sınıftaki bir nesneyi veritabanına nasıl kaydedebiliriz?
Aslında, bilmeniz gereken her şeyi zaten biliyorsunuz. Öncelikle veritabanında bu sınıfa karşılık gelen bir tablo oluşturmanız gerekir. Örneğin, bu:
CREATE TABLE employee {
id INT PRIMARY KEY NOT NULL,
name VARCHAR(100),
occupation VARCHAR(100),
salary INT,
join_date DATE
}
Şimdi de Staff sınıfımıza ait bir objeyi base'e ekleyecek kodu yazalım :
public static boolean addEmployee(Connection connection, Employee employee) throws Exception {
// Create and prepare a query to insert data into the table
String insertQuery = "INSERT INTO employee(name, occupation, salary, join_date ) VALUES (?, ?, ?, ?)";
PreparedStatement statement = connection.prepareStatement(insertQuery);
// Populate the query with data from the Employee object
statement.setString(1, employee.name);
statement.setString(2, employee.occupation);
statement.setInt(3, employee.salary);
statement.setDate(4, employee.joinDate);
// Execute our query and it returns true if a new row has been added
int count = statement.executeUpdate();
return count > 0;
}
Basit ve net. Yöntem harika çalışacak.
Bir veritabanından bir Java nesnesini okuma
Veritabanına nasıl nesne yazılacağını öğrendik, şimdi nesneyi veritabanından okuyacak kodu yazalım. Veritabanından bir nesneyi kimliğine göre okuyan kodla başlayalım:
public static Employee getEployeeById(Connection connection, int id) throws Exception {
// Create and prepare a query to get an employee from the table
PreparedStatement statement = connection.prepareStatement("SELECT * FROM employee WHERE id = ?");
statement.setInt(1, id);
// Execute our query and it returns null if there are no rows in the query result
ResultSet results = statement.executeQuery();
if (!results.first())
return null;
// Populate the Employee object with the data from the ResultSet
Employee employee = new Employee();
employee.id = results.getInt(1);
employee.name = results.getString(2);
employee.occupation = results.getString(3);
employee.salary = results.getInt(4);
employee.joinDate = results.getDate(5);
return employee;
}
Ve bir nesneye değil, birkaç nesneye ihtiyacımız olursa? Böyle bir istek yazmak da kolaydır. Şirketimizin tüm çalışanlarını toplayalım:
public static List<Employee> getAllEployees(Connection connection) throws Exception {
// Create and execute a query to get employees from the table
Statement statement = connection.createStatement();
ResultSet results = statement.executeQuery("SELECT * FROM employee");
ArrayList<Employee> list = new ArrayList<Employee>();
while (results.next()) {
// Populate the Employee object with the data from the current row of the ResultSet
Employee employee = new Employee();
employee.id = results.getInt(1);
employee.name = results.getString(2);
employee.occupation = results.getString(3);
employee.salary = results.getInt(4);
employee.joinDate = results.getDate(5);
list.add(employee);
}
return list;
}
Bu arada, bu tür birçok yöntem varsa, ResultSet dizesini bir nesneye dönüştürmek için her birinde aynı kodu yazmanız gerekir.çalışan. Böylece bu kod ayrı bir metoda taşınabilir.
Bu, özellikle Çalışan sınıfı Enum, InputStream gibi karmaşık alanlar veya veritabanında depolamak istediğimiz diğer nesnelere referanslar içeriyorsa yararlı olabilir .