6.1 Pambuka kanggo RowSet

Kaya sing wis dingerteni, standar JDBC meh 20 taun lan rada ketinggalan jaman. Jinis anyar lan kelas anyar alon-alon ditambahake, nanging iki ora bisa ditindakake kanthi apik ing endi wae. Lan salah siji panggonan iku ResultSet .

Database bisa digawe luwih efisien, nanging antarmuka ResultSet kurang pas. Kajaba iku, kita ora nggawe obyek kasebut kanthi jelas ing ngendi wae, dheweke bali menyang kita dening executeQuery().

Pencipta JDBC ora mikir dawa lan nggawe mekanisme sing sejajar karo kabeh sing sadurunge. Lan dadi dikenal minangka RowSet .

Mangkene keuntungan utamane:

  • RowSet ngluwihi antarmuka ResultSet, saengga fungsine luwih kuat tinimbang ResultSet.
  • RowSet navigasi luwih fleksibel liwat data tabel lan bisa nggulung maju lan maju.
  • RowSet njaga data cache sing bisa digunakake sanajan sambungan ditutup.
  • RowSet ndhukung cara sambungan anyar, sampeyan bisa nyambung menyang database tanpa sambungan. Uga ndhukung maca sumber data XML.
  • RowSet ndhukung panyaring data.
  • RowSet uga ndhukung operasi gabungan tabel.

Tipe Rowset:

  • CachedRowSet
  • FilteredRowSet
  • JdbcRowSet
  • JoinRowSet
  • WebRowSet

6.2 Nggawe obyek RowSet

Ana telung cara kanggo entuk obyek kerja.

Kaping pisanan, bisa diisi data saka ResultSet sing dipikolehi kanthi cara klasik.

Contone, kita bisa cache data ResultSet nggunakake CachedRowSet :


Statement statement = connection.createStatement();
ResultSet results = statement.executeQuery("SELECT * FROM user");
 
RowSetFactory factory = RowSetProvider.newFactory();
CachedRowSet crs = factory.createCachedRowSet();
crs.populate(results);		// Use ResultSet to populate

Kapindho, sampeyan bisa nggawe obyek RowSet sing mandhiri kanthi nggawe sambungan database sampeyan dhewe:


JdbcRowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet();
rowSet.setUrl("jdbc:mysql://localhost:3306/test");
rowSet.setUsername("root");
rowSet.setPassword("secret");
 
rowSet.setCommand("SELECT * FROM user");
rowSet.execute();

Lan kaping telu, sampeyan bisa nyambungake RowSet menyang sambungan sing wis ana:

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
JdbcRowSet rowSet = new JdbcRowSetImpl(con);

rowSet.setCommand("SELECT * FROM user");
rowSet.execute();

6.3 Conto nggarap RowSet

Tuladha siji: caching .

Ayo nulis kode ing ngendi kita nggunakake CachedRowSet kanggo nyimpen kabeh data lan maca saka sambungan sing wis ditutup:

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

RowSetFactory factory = RowSetProvider.newFactory();
CachedRowSet crs = factory.createCachedRowSet();
crs.populate(results);	// Use ResultSet to populate

connection.close();		// Close the connection

// Cache data is still available
while(crs.next()) {
  	System.out.println(crs.getString(1)+"\t"+ crs.getString(2)+"\t"+ crs.getString(3));
}

Conto loro: ngganti baris liwat RowSet :

// Connect to the database
 CachedRowSet crs = rsf.createCachedRowSet();
 crs.setUrl("jdbc:mysql://localhost/test");
 crs.setUsername("root");
 crs.setPassword("root");
 crs.setCommand("SELECT * FROM user");
 crs.execute();

// This type of operation can only change standalone RowSet
// First, move the pointer to an empty (new) string, the current position is remembered
 crs.moveToInsertRow();
 crs.updateString(1, Random.nextInt());
 crs.updateString(2, "Clone" + System.currentTimeMillis());
 crs.updateString(3, "Female");
 crs.insertRow();  // Add the current (new) line to the rest of the lines
 crs.moveToCurrentRow(); // Return a pointer to the line where it was before insertion

 crs.beforeFirst();
 while(crs.next()) {
 	System.out.println(crs.getString(1) + "," + crs.getString(2) + "," + crs.getString(3));
}

// And now we can upload all our changes to the database
Connection con = DriverManager.getConnection("jdbc:mysql://localhost/dbtest", "root", "root");
con.setAutoCommit(false); // Needed for synchronization
crs.acceptChanges(con);// Synchronize data to database

Yen sampeyan kasengsem ing cara kerjane, sampeyan bisa maca topik kasebut ing dokumentasi resmi. Tugasku saiki mung nyritakake apa iku.