실제 복잡한 시나리오에서는 애플리케이션이 기본 키를 통해 검색하는 대신 특정 속성을 기반으로 데이터를 가져와야 하는 경우가 많습니다. SQL을 사용하여 데이터를 쿼리하면 런타임 시 사용자 지정 논리를 기반으로 데이터베이스에서 데이터를 더 쉽게 검색할 수 있습니다.
NCache 주어진 기준에 따라 캐시를 검색하고 필요한 결과 집합을 반환할 수 있는 SQL 쿼리 메커니즘을 지원합니다. NCache 네이티브 SQL 구조화 언어와 매우 유사한 쿼리 언어를 사용하므로 인덱싱된 캐시 데이터를 쉽게 쿼리할 수 있습니다.
NCache ADO.NET 인터페이스와 유사한 쿼리 인터페이스를 사용하여 캐시에서 데이터를 검색하거나 삭제하는 다양한 쿼리 방법을 지원합니다. 다음은 에서 지원되는 가장 중요한 쿼리 방법 중 일부입니다. 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 SQL 쿼리에 대해 투영할 열을 지정할 수 있습니다. 아래에는 에서 지원되는 가장 일반적으로 사용되는 기본 프로젝션이 언급되어 있습니다. NCache.
SELECT COUNT(*) FROM FQN.Product WHERE UnitsInStock > ?
인용하다 개체에 대한 SQL 검색
이러한 연산자는 데이터 처리 및 조작을 위해 SQL 데이터베이스 전체에서 사용되고 재사용됩니다. NCache 원하는 결과를 효율적으로 얻을 수 있는 다양한 SQL 연산자를 지원합니다. 이러한 기능은 다음과 같습니다.
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.");
}
SQL 연산자는 논리 및 비교 연산을 수행하기 위해 WHERE 절에 예약된 키워드입니다. NCache 사용자 정의 조건에 따라 데이터를 쿼리할 수 있도록 다음 SQL 연산자 지원을 제공합니다.
SELECT ProductName, UnitsAvailable From FQN.Product WHERE Category IN ('Beverages', 'Confections')