Caching ResultSet

Eher wie die subjektive Frage, Die wichtigste Ziel der Frage ist, den Cache von java.sql.ResultSet. Aber ich weiß, es ist nicht die bevorzugte Mechanismus, wie es ist eng gekoppelt mit der Verbindung, und die Daten möglicherweise geleert, wenn die Verbindung geschlossen wird. Um dieses Problem zu beheben, ich bin mit CachedRowSet. Die Instanz von CachedRowSet gecached werden, mithilfe von Drittanbieter-caching-tool, das mir helfen wird, zu reduzieren, db-Aufrufe.

Code-snippet von meiner Implementierung wird unten gegeben. Die Methode executeQuery(String) umgesetzt wird in eine abstrakte Klasse, die alle sub-Klassen zum ausführen der Abfrage. Es könnte sein, Kunden Unterklassen, wie gut Sie diese Methode zum abrufen von Daten aus unserem system.

public final ResultSet executeQuery(String query){
        try {
        //return data if it is available in cache, else execute and store in cache
            CachedRowSet cachedRowSet=getDataFromCache(query);
            if(cachedRowSet!=null) {
                return cachedRowSet;   
            }
            PreparedStatement statement=getStatment();
            ResultSet rs= statement.executeQuery(query);
            CachedRowSet cachedRowSet=new CachedRowSetImpl();
            cachedRowSet.populate(rs);
                    cachedData(cachedRowSet);
            return cachedRowSet;
        } catch (Exception e) {
            return null;
        }
    }

Nun, ich bin etwas verwirrt mit unten Punkte

  1. Statt der ResultSet-Schnittstelle, ich werde zurückkehren Instanz CachedResultSet. Wäre das korrekt, Ersatz für resultSet. Treiber-JAR -, DB-Klassen kann über unterschiedliche Kunden-Umgebung. Kunden schreiben würde, benutzerdefinierte Klassen und in Erwartung einer Ergebnismenge, die von der Abstrakten Klasse. Wäre das keine Problem verursachen? Einige Sache wie unten

    public class CustomerXX extends BaseClass {

    public void process(String query){
    
        ResultSet rs = executeQuery(query);
    
        //process rs to fetch data
    
    }

    }

  2. Risiko für diese Art von Betrieb( Caching CachedRowSet -, Daten-Korrektheit)

  3. Leistung zu erstellen CachedRowSet

  4. Kompatibilität mit allen ResultSet Operationen ( ResultSet.getString(), ResultSet.get..()). Wenn alle Fahrer erwartet/produziert verschiedene Unterklasse von ResultSet ( Sagen jdbcResultSet, BaseResultSet etc)

Habe ich in ähnlicher Art auch von vielen anderen Frage, ist meine Meinung, ich bin nur zu schreiben, paar von Ihnen, ich fühle mich gültig und hat höhere Priorität.

Nicht sicher, ob meine Frage so vage ist, hat genug Klarheit der meine Anforderungen.

Alle Ideen, Gedanken, Vorschläge sind sehr willkommen, und vielen Dank im Voraus

  • Wenn der Kunde erwartet, dass ResultSet, und CachedRowSet erweitert/implementiert ResultSet, die Kunden gerne annehmen CachedRowSet
Schreibe einen Kommentar