Kumpletong listahan ng mga uri ng data ng JDBC

Bilang karagdagan sa mga uri ng data na alam mo, pinapayagan ka ng JDBC na magtrabaho kasama ang maraming katutubong uri ng data para sa DBMS. Sa ibaba ay ililista ko ang mga uri at ang mga function upang makuha ang mga ito:

Uri Pamamaraan
array getArray()
AsciiStream getAsciiStream()
BigDecimal getBigDecimal()
BinaryStream getBinaryStream()
patak getBlob()
Boolean getBoolean()
patak getBlob()
Boolean getBoolean()
byte getByte()
byte getBytes()
CharacterStream getCharacterStream()
clob getClob()
Petsa getDate()
Doble getDouble()
lumutang getFloat()
int getInt()
Mahaba getLong()
NCCharacterStream getNCharacterStream()
Bagay getObject()
Ref getRef()
RowId getRowId()
maikli getShort()
SQLXML getSQLXML()
String getString()
Oras getTime()
Timestamp getTimestamp()
UnicodeStream getUnicodeStream()
URL getURL()

Isinaalang-alang na namin ang mga primitive na uri. Subukan natin ngayon na magtrabaho sa mga bagay.

Uri ng data ng BLOB

Kung nais mong i-save ang ilang bagay sa database, kung gayon ang pinakamadaling paraan upang gawin ito ay ang paggamit ng uri ng SQL BLOB. Ang JDBC ay may katapat na tinatawag na Blob.

Ang BLOB ay nangangahulugang Binary L arge Object . Ito ay ginagamit upang mag-imbak ng isang hanay ng mga byte. Ang uri ng Blob sa JDBC ay isang interface at maaari kang maglagay (at tumanggap) ng data dito sa dalawang paraan:

  • Gamit ang InputStream
  • Paggamit ng isang hanay ng mga byte

Halimbawa: ang column number 3 ay naglalaman ng uri ng BLOB:

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

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

Upang lumikha ng iyong sariling Blob object, kailangan mong gamitin ang createBlob() function . Halimbawa:

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

Mayroong dalawang paraan upang punan ang isang Blob ng data. Ang una ay sa pamamagitan ng OutputSteam :

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

At ang pangalawa - sa pamamagitan ng pagpuno ng mga byte:

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

Pag-save ng Java Object sa isang Database

Natutunan namin kung paano i-save ang mga binary na bagay sa database: mga byte array, byte stream, at iba pa. Paano ang tungkol sa mga bagay sa Java? Paano namin i-save ang isang Java object sa isang database?

Sabihin nating mayroon kaming Employee Java class na naglalarawan sa isang empleyado ng isang kumpanya:

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

Paano natin mai-save ang isang bagay ng klase na ito sa database gamit ang JDBC?

Sa katunayan, alam mo na ang lahat ng kailangan mong malaman. Una kailangan mong lumikha ng isang talahanayan sa database na tumutugma sa klase na ito. Halimbawa, ang isang ito:

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

At ngayon isulat natin ang code na magdaragdag ng isang bagay ng aming Employee class sa base:

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

Simple at malinaw. Ang pamamaraan ay gagana nang mahusay.

Pagbabasa ng Java object mula sa isang database

Natutunan namin kung paano magsulat ng isang bagay sa database, ngayon ay isulat natin ang code upang mabasa ang bagay mula sa database. Magsimula tayo sa code na nagbabasa ng isang bagay mula sa database sa pamamagitan ng ID nito:

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

At kung kailangan natin ng hindi isang bagay, ngunit marami? Madali ding isulat ang naturang kahilingan. Kunin natin ang lahat ng empleyado ng ating kumpanya:

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

Sa pamamagitan ng paraan, kung maraming mga ganoong pamamaraan, pagkatapos ay sa bawat isa sa kanila kailangan mong isulat ang parehong code para sa pag-convert ng ResultSet string sa isang bagayempleado. Kaya ang code na ito ay maaaring ilipat sa isang hiwalay na paraan.

Ito ay maaaring maging kapaki-pakinabang lalo na kung ang Employee class ay naglalaman ng mga kumplikadong field tulad ng Enum, InputStream, o mga reference sa iba pang mga object na gusto rin naming iimbak sa database.