Bir yanıt için Stackoverflow'u arıyorum ancak Hazırda Bekletme veya başka bir veritabanı sarıcı içermeyen bir ürün bulunamıyor.Java MYSQL/JDBC sorgusu önbelleğe alınmış verilerden eski veriyi döndürüyor Bağlantı
Tomcat 6 Java EE uygulamasında JDBC'yi doğrudan MYSQL 5.18 JDBC sürücüsü aracılığıyla kullanıyorum. Bağlantı nesnelerini önbelleğe alıyorum, ancak Bildirim nesnelerini önbelleğe almıyorum. Sorgu için Sonuç Tabloları, ilk çalıştırmada güncel verileri doğru bir şekilde döndürüyor. PHPMyAdmin veya başka bir harici araç aracılığıyla birkaç satırı değiştirdiğimde, sorguyu yeniden çalıştırın, eski verileri eski durumuna getiriyorum.
Normal Tablolar kullanıyorum, PreparedStatements. ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE denedim. Ayrıca sonuç kümesini de kapatıyorum. Bunlar sorunu çözmez. Ayrıca, ResultSet.refreshRows() yöntemini denedim, ancak sorgunun JOIN yan tümcesi bulunduğundan bir hatayla sonuçlanır.
Sorunu açık bir şekilde çözen tek şey Bağlantıyı kapatmak ve veritabanına yeniden bağlanmaktır; bu da her bir sorgu girişimi için ağır bir maliyet oluşturur.
Eski veriler dönmeden Bağlantıları yeniden kullanmanın bir yolu var mı?
DÜZENLEME: Şu anda sorgu için işlem kullanmıyorum.
İşte genel kod. Önceden yardım için
Connection conn; //created elsewhere and reused
...
String query = "SELECT p.ID as oid,rid,handle,summary,city,state,zip,t.name AS category
FROM profiles AS p
JOIN (terms AS t) ON (p.tid = t.ID)
WHERE p.ID = 1";
ResultSet resultSet;
Statement s;
synchronized (conn)
{
s = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
resultSet = s.executeQuery(query);
}
//Iterate over the results using .next() and copy data to another data structure
List retval = getResults(resultSet);
s.close();
teşekkürler!
İşlemler kullanıyor musunuz? Eğer öyleyse izolasyon seviyesi nedir? REPEATABLE READ davranışı gibi görünüyor. –
İyi soru. Bu sorgular için işlem yok.Genel olarak güncellemeler/ekler için işlemleri kullanıyorum, ancak bu durumda, şu anda uygulamanın kendisinde hiçbirini yürütmüyorum. UPDATE'leri bir şeyler fırlatabilecek harici bir araçla yapıyorum. Kirli okumaları önlemek için işlemleri bir çözüm olarak önerirseniz, lütfen bir yanıtı paylaşın. Ayrıca, bağlantıda herhangi bir yalıtım seviyesi belirlemedim. Sorun bu muydu? – ricosrealm