1

我已经开始使用 cassandraemon(带有 C# 的 Apache Cassandra NoSQL),我只是想知道是否有任何方法可以读取从执行 CQL 查询中捕获的异常中的“为什么”值?

当我执行以下操作时:

try
{
    CqlResult createResult = context.ExecuteCqlQuery(createTableCql);
}
catch (Exception exc)
{
    if (exc.Why.Contains("already existing"))
    { // Why = org.apache.cassandra.exceptions.AlreadyExistsException: Cannot add already existing column family "nameOfColumn" to keyspace "nameOfKeyspace"
    }
}

我无法以任何方式访问为什么在 exc 中。

我想要做的是检查表是否已经存在。我知道我可以像这里一样检查它(如何检查 Cassandra 表是否存在),但仅限于 CQL3。此链接中描述的方式也无济于事,因为我得到了为什么值“未配置的 columnfamily schema_columnfamilies”的其他异常。

我想知道如何阅读“为什么”的一般内容,因为将来我可能在其他情况下需要它。它不只是返回某种我可以检查的 CqlResult 值,它只是抛出一个异常。

如何在执行 CQL 查询时检查捕获的异常中“为什么”的值?

问候!

PS为了避免隐藏的交叉发布:https ://cassandraemon.codeplex.com/discussions/441028

4

1 回答 1

1

该错误告诉您您要查找的表(又名列族)不存在,但该schema_columnfamilies表应该始终存在,因此问题很可能是您没有指定表所在的模式(又名键空间)。

此语句假定您已指定您正在使用system键空间:

SELECT columnfamily_name 
FROM schema_columnfamilies WHERE keyspace_name='keyspaceName';

我认为您没有指定您应该使用系统密钥空间,因此请尝试将此作为您的 CQL 语句来验证表是否存在。

SELECT columnfamily_name
FROM system.schema_columnfamilies WHERE keyspace_name='keyspaceName';
于 2013-04-21T12:47:59.820 回答