在现实生活中的复杂场景中,您的应用程序通常需要根据特定属性获取数据,而不是通过主键进行搜索。 使用 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')