Menyimpan objek ke database

Tersedia

Daftar lengkap tipe data JDBC

Selain tipe data yang Anda ketahui, JDBC memungkinkan Anda bekerja dengan banyak tipe data asli untuk DBMS. Di bawah ini saya akan mencantumkan jenis dan fungsi untuk mendapatkannya:

Jenis metode
Himpunan getArray()
AsciiStream getAsciiStream()
BigDecimal getBigDecimal()
BinaryStream getBinaryStream()
gumpal getBlob()
Boolean getBoolean()
gumpal getBlob()
Boolean getBoolean()
byte getByte()
byte getBytes()
Aliran Karakter getCharacterStream()
Gumpalan getClob()
Tanggal getDate()
Dobel getDouble()
mengambang getFloat()
int getInt()
Panjang getLong()
NCharacterStream getNCharacterStream()
Obyek getObject()
referensi getRef()
RowId getRowId()
Pendek getShort()
SQLXML getSQLXML()
Rangkaian getString()
Waktu getTime()
Stempel waktu getTimestamp()
UnicodeStream getUnicodeStream()
URL getURL()

Kami telah mempertimbangkan tipe primitif. Sekarang mari kita coba bekerja dengan objek.

tipe data GLOB

Jika Anda ingin menyimpan beberapa objek ke database, maka cara termudah untuk melakukannya adalah dengan menggunakan tipe SQL BLOB. JDBC memiliki mitranya yang disebut Blob.

BLOB adalah singkatan dari Binary Large Object . Ini digunakan untuk menyimpan array byte. Jenis Blob di JDBC adalah antarmuka dan Anda dapat memasukkan (dan menerima) data di dalamnya dengan dua cara:

  • Menggunakan InputStream
  • Menggunakan array byte

Contoh: kolom nomor 3 berisi tipe BLOB:

Statement statement = connection.createStatement();
    ResultSet results = statement.executeQuery("SELECT * FROM user");
    results.first();

    Blob blob = results.getBlob(3);
    InputStream is = blob.getBinaryStream();

Untuk membuat objek Blob Anda sendiri, Anda perlu menggunakan fungsi createBlob() . Contoh:

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();

Ada dua cara untuk mengisi Blob dengan data. Yang pertama adalah melalui OutputSteam :

Path avatar = Paths.get("E:\\images\\cat.jpg");
OutputStream os = blob.setBinaryStream(1);
Files.copy(avatar, os);

Dan yang kedua - melalui pengisian dengan byte:

Path avatar = Paths.get("E:\\images\\cat.jpg");
byte[] content = Files.readAllBytes(avatar);
blob.setBytes(1, content);

Menyimpan Objek Java ke Database

Kami telah mempelajari cara menyimpan objek biner ke database: array byte, aliran byte, dan sebagainya. Bagaimana dengan objek Java? Bagaimana kita menyimpan objek Java ke database?

Katakanlah kita memiliki kelas Employee Java yang mendeskripsikan karyawan sebuah perusahaan:

public class Employee {
    public Integer id;
    public String name;
    public String occupation;
    public Integer salary;
    public Date joinDate;
}

Bagaimana kita bisa menyimpan objek kelas ini ke database menggunakan JDBC?

Faktanya, Anda sudah mengetahui semua yang perlu Anda ketahui. Pertama, Anda perlu membuat tabel di database yang sesuai dengan kelas ini. Misalnya, yang ini:

CREATE TABLE employee {
    id INT PRIMARY KEY NOT NULL,
    name VARCHAR(100),
    occupation VARCHAR(100),
    salary INT,
    join_date DATE
}

Dan sekarang mari kita tulis kode yang akan menambahkan objek kelas Karyawan kita ke basis:

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;
    }

Sederhana dan jelas. Metode ini akan bekerja dengan baik.

Membaca objek Java dari database

Kita belajar bagaimana menulis objek ke database, sekarang mari kita menulis kode untuk membaca objek dari database. Mari kita mulai dengan kode yang membaca objek dari database dengan ID-nya:

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;
}

Dan jika kita membutuhkan bukan hanya satu objek, tetapi beberapa? Permintaan seperti itu juga mudah ditulis. Mari kita semua karyawan perusahaan kami:

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;
}

Omong-omong, jika ada banyak metode seperti itu, maka di masing-masing metode Anda harus menulis kode yang sama untuk mengubah string ResultSet menjadi objekkaryawan. Jadi kode ini dapat dipindahkan ke metode terpisah.

Ini bisa sangat berguna jika kelas Karyawan berisi bidang kompleks seperti Enum, InputStream, atau referensi ke objek lain yang juga ingin kita simpan di database.

Komentar
  • Populer
  • Baru
  • Lama
Anda harus login untuk memberikan komentar
Halaman ini belum memiliki komentar