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

时间:2013-04-21 10:26:10

标签: c# apache exception cassandra cql

我已经开始使用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"
    }
}

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

我想要做的是检查表是否已存在。我知道我可以像这里(How to check if a Cassandra table exists)一样检查它,但仅限于CQL3。此链接中描述的方式也没有帮助,因为我得到了其他异常,为什么值为“unconfigured columnfamily schema_columnfamilies”。

我想知道如何阅读“为什么”的内容,因为我将来可能会在其他情况下需要它。并且它不会简单地返回我可以检查的某种CqlResult值,它只会引发异常。

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

问候!

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

1 个答案:

答案 0 :(得分:1)

错误告诉您,您要查找的表(也称为列族)不存在,但schema_columnfamilies表应该始终存在,因此问题很可能是您没有指定哪个架构(又名keypace)表位于。

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

SELECT columnfamily_name 
FROM schema_columnfamilies WHERE keyspace_name='keyspaceName';

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

SELECT columnfamily_name
FROM system.schema_columnfamilies WHERE keyspace_name='keyspaceName';