Negli scenari complessi della vita reale, l'applicazione spesso deve recuperare i dati in base a particolari attributi anziché cercare nella chiave primaria. L'esecuzione di query sui dati utilizzando SQL semplifica il recupero dei dati dal database in base alla logica personalizzata in fase di runtime.
NCache supporta un meccanismo di interrogazione SQL per consentirti di cercare nella cache in base a un determinato criterio e restituire il set di risultati richiesto. NCache utilizza un linguaggio di query molto simile al linguaggio strutturato SQL nativo, che semplifica l'interrogazione dei dati memorizzati nella cache indicizzati.
NCache utilizza un'interfaccia di query simile all'interfaccia ADO.NET per supportare vari metodi di query per cercare o eliminare dati dalla cache. Di seguito sono riportati alcuni dei più importanti metodi di query supportati in NCache.
string query = "SELECT * FROM FQN.Product WHERE ProductID > ?";
var queryCommand = new QueryCommand(query);
queryCommand.Parameters.Add("ProductID",50000);
ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand, false, 0);
if (reader.FieldCount > 0)
{
while (reader.Read())
{
string result = reader.GetValue<string>(0);
}
}
String query = "SELECT * FROM FQN.Product WHERE ProductID > ?";
QueryCommand queryCommand = new QueryCommand(query);
HashMap<String, Object> parameters = new HashMap<>();
parameters.put("ProductID", 50000);
queryCommand.getParameters().putAll(parameters);
CacheReader cacheReader = cache.getSearchService().executeReader(queryCommand);
if (cacheReader.getFieldCount() > 0) {
while (cacheReader.read()) {
cacheReader.getString(0);
}
NCache consente di specificare le colonne da proiettare rispetto alla query SQL. Di seguito sono indicate le proiezioni di base più comunemente utilizzate supportate NCache.
SELECT COUNT(*) FROM FQN.Product WHERE UnitsInStock > ?
Fare riferimento a Ricerca SQL per oggetto per maggiori informazioni.
Questi operatori vengono utilizzati e riutilizzati in tutto il database SQL per l'elaborazione e la manipolazione dei dati. NCache supporta vari operatori SQL che consentono di ottenere il risultato desiderato in modo efficiente. Queste funzioni sono:
string query = "SELECT OrderID FROM FQN.Order WHERE OrderDate = ?";
var queryCommand = new QueryCommand(query);
DateTime orderDate = new DateTime(2022, 01, 01);
queryCommand.Parameters.Add("OrderDate", orderDate);
ICacheReader reader = cache.SearchService.ExecuteReader(queryCommand);
if (reader.FieldCount > 0)
{
while (reader.Read())
{
int orderID = reader.GetValue<int>("OrderID");
Console.WriteLine($"Order: {orderID} was placed on 1st January, 2022.");
}
}
else
{
Console.WriteLine($"No orders were placed on 1st January 2022.");
}
String query = "SELECT OrderID FROM FQN.Order WHERE OrderDate = ?";
QueryCommand queryCommand = new QueryCommand(query);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date orderDate;
orderDate = sdf.parse("2022-01-01");
HashMap<String, Object> parameters = new HashMap<>();
parameters.put("OrderDate", orderDate);
queryCommand.getParameters().putAll(parameters);
CacheReader cacheReader = cache.getSearchService().executeReader(queryCommand);
if (cacheReader.getFieldCount() > 0) {
while (cacheReader.read()) {
int orderID = cacheReader.getInt(cacheReader.getOrdinal("OrderID"));
System.out.println("Order: " + orderID + " was placed on 1st January, 2022.");
}
} else {
System.out.println("No orders were placed on 1st January 2022.");
}
Gli operatori SQL sono parole chiave riservate nella clausola WHERE per eseguire operazioni logiche e di confronto. NCache ti fornisce il supporto dei seguenti operatori SQL per interrogare i tuoi dati in base a condizioni personalizzate.
SELECT ProductName, UnitsAvailable From FQN.Product WHERE Category IN ('Beverages', 'Confections')