6.1 RowSet'e Giriş

Bildiğiniz gibi, JDBC standardı neredeyse 20 yaşında ve biraz eski. Buna yavaş yavaş yeni türler ve yeni sınıflar ekleniyor ama bu her yerde güzelce yapılamaz. Ve bu yerlerden biri ResultSet .

Veritabanı daha verimli hale getirilebilir, ancak ResultSet arabirimi uygun değildir. Ek olarak, nesnelerini herhangi bir yerde açıkça oluşturmuyoruz, bunlar bize executeQuery().

JDBC'nin yaratıcıları fazla düşünmediler ve daha önce olan her şeye tamamen paralel bir mekanizma yaptılar. Ve RowSet olarak tanındı .

Başlıca faydaları şunlardır:

  • RowSet, ResultSet arabirimini genişletir, böylece işlevleri ResultSet'inkilerden daha güçlüdür.
  • RowSet, tablo verileri arasında daha esnek bir şekilde gezinir ve ileri geri kaydırabilir.
  • RowSet, bağlantı kapatıldıktan sonra bile kullanılabilecek önbelleğe alınmış verileri korur.
  • RowSet yeni bağlantı yöntemini destekler, veritabanına bağlantı olmadan bağlanabilirsiniz. Ayrıca XML veri kaynağının okunmasını da destekler.
  • RowSet, veri filtresini destekler.
  • RowSet ayrıca tablo birleştirme işlemlerini de destekler.

Satır kümesi türleri:

  • Önbelleğe AlınmışSatır Kümesi
  • FilteredRowSet
  • JdbcRowSet
  • Satır Kümesine Katılın
  • WebSatır Kümesi

6.2 RowSet nesnesi oluşturma

Bir çalışma nesnesini almanın üç farklı yolu vardır.

İlk olarak, klasik yolla elde edilen bir ResultSet'ten alınan verilerle doldurulabilir .

Örneğin, ResultSet verilerini CachedRowSet kullanarak önbelleğe alabiliriz :


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

İkinci olarak, kendi veritabanı bağlantınızı oluşturarak tamamen bağımsız bir RowSet nesnesi oluşturabilirsiniz:


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

Üçüncüsü, RowSet'i zaten var olan bir bağlantıya bağlayabilirsiniz:

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 RowSet ile çalışma örnekleri

Birinci örnek: önbelleğe alma .

Tüm verileri önbelleğe almak ve zaten kapalı bir bağlantıdan okumak için CachedRowSet'i kullandığımız bir kod yazalım :

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

İkinci örnek: Satırları RowSet aracılığıyla değiştirme :

// 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

Nasıl çalıştığıyla ilgileniyorsanız, konuyu resmi belgelerde okuyabilirsiniz. Şu anki görevim sadece ne olduğunu söylemek.