CodeGym/Kursus Java/All lectures for MS purposes/Menyimpan objek ke pangkalan data

Menyimpan objek ke pangkalan data

Tersedia

Senarai lengkap jenis data JDBC

Selain jenis data yang anda ketahui, JDBC membenarkan anda bekerja dengan banyak jenis data asli untuk DBMS. Di bawah saya akan menyenaraikan jenis dan fungsi untuk mendapatkannya:

taip Kaedah
tatasusunan getArray()
AsciiStream getAsciiStream()
BigDecimal getBigDecimal()
BinaryStream getBinaryStream()
gumpalan getBlob()
Boolean getBoolean()
gumpalan getBlob()
Boolean getBoolean()
bait getByte()
bait getBytes()
CharacterStream getCharacterStream()
ketul getClob()
Tarikh getDate()
berganda getDouble()
terapung getFloat()
int getInt()
Panjang getLong()
NCCharacterStream getNCharacterStream()
Objek getObject()
Ruj getRef()
RowId getRowId()
pendek getShort()
SQLXML getSQLXML()
Tali getString()
Masa getTime()
Cap masa getTimestamp()
UnicodeStream getUnicodeStream()
URL getURL()

Kami telah mempertimbangkan jenis primitif. Sekarang mari kita cuba bekerja dengan objek.

Jenis data BLOB

Jika anda ingin menyimpan beberapa objek ke pangkalan data, maka cara paling mudah untuk melakukan ini ialah menggunakan jenis SQL BLOB. JDBC mempunyai rakan sejawatannya yang dipanggil Blob.

BLOB bermaksud Binary L arge Object . _ Ia digunakan untuk menyimpan pelbagai bait. Jenis Blob dalam JDBC ialah antara muka dan anda boleh meletakkan (dan menerima) data di dalamnya dalam dua cara:

  • Menggunakan InputStream
  • Menggunakan tatasusunan bait

Contoh: lajur nombor 3 mengandungi jenis BLOB:

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

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

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

Terdapat 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 bait:

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

Menyimpan Objek Java ke Pangkalan Data

Kami telah mempelajari cara menyimpan objek binari ke pangkalan data: tatasusunan bait, aliran bait dan sebagainya. Bagaimana dengan objek Java? Bagaimanakah kita menyimpan objek Java ke pangkalan data?

Katakan kita mempunyai kelas Java Pekerja yang menerangkan pekerja sebuah syarikat:

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

Bagaimanakah kita boleh menyimpan objek kelas ini ke pangkalan data menggunakan JDBC?

Malah, anda sudah tahu semua yang anda perlu tahu. Mula-mula anda perlu membuat jadual dalam pangkalan data yang sepadan dengan kelas ini. Sebagai contoh, 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 tulis kod yang akan menambah objek kelas Pekerja kami ke pangkalan:

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

Mudah dan jelas. Kaedah ini akan berfungsi dengan baik.

Membaca objek Java daripada pangkalan data

Kami belajar cara menulis objek ke pangkalan data, sekarang mari tulis kod untuk membaca objek dari pangkalan data. Mari kita mulakan dengan kod yang membaca objek daripada pangkalan data dengan IDnya:

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 tidak memerlukan satu objek, tetapi beberapa? Permintaan sedemikian juga mudah untuk ditulis. Jom dapatkan semua pekerja syarikat 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;
}

Dengan cara ini, jika terdapat banyak kaedah sedemikian, maka dalam setiap daripada mereka anda perlu menulis kod yang sama untuk menukar rentetan ResultSet menjadi objekpekerja. Jadi kod ini boleh dialihkan ke kaedah yang berasingan.

Ini boleh berguna terutamanya jika kelas Pekerja mengandungi medan kompleks seperti Enum, InputStream atau rujukan kepada objek lain yang juga ingin kami simpan dalam pangkalan data.

Komen
  • Popular
  • Baru
  • Tua
Anda mesti log masuk untuk meninggalkan ulasan
Halaman ini tidak mempunyai sebarang ulasan lagi