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 .