首页 > 解决方案 > 使用 microsoft azure documentdb api 连接到 cosmos db 导致错误请求错误

问题描述

我正在尝试使用 azure-documentdb api 连接到 cosmosDb。 在此处输入图像描述 我附上的代码片段是上面添加的屏幕截图。

公共类 CosmosDBConnection {

private static final String HOST = "my-key";
private static final String MASTER_KEY = "master-key";
private static final String DATABASE_ID = "TablesDB";
private static DocumentClient documentClient = new 
DocumentClient(HOST, MASTER_KEY,
        ConnectionPolicy.GetDefault(), ConsistencyLevel.Session);
public static void main(String[] args) {
    try {
        DocumentClient documentClient = getDocumentClient();
        String queryString = "SELECT * FROM root r r.id='" + DATABASE_ID+ "'";
        FeedResponse feedResponse = documentClient.queryDatabases(queryString, null);
        if(feedResponse != null){
            List<Database> databaseList = feedResponse.getQueryIterable().toList();
            System.out.println("At 19 line");
            Database databaseCache = new Database();
            if (databaseList.size() > 0) {
                databaseCache = databaseList.get(0);
            } else {

                Database databaseDefinition = new Database();
                databaseDefinition.setId(DATABASE_ID);
                databaseCache = documentClient.createDatabase(databaseDefinition, null).getResource();

            }
        }else{
            System.out.println("feedResponse is null");
        }

    } catch (DocumentClientException e) {
        e.printStackTrace();
    }

}

private static DocumentClient getDocumentClient() {
    return documentClient;
}

}

导致错误的行是 -> documentClient.queryDatabases(queryString, null);

标签: azure-cosmosdbazure-cosmosdb-sqlapi

解决方案


该屏幕截图来自 Table API 帐户。您正在使用 SQL API SDK。

如果要使用 Table API 帐户,则需要使用Microsoft.Azure.Cosmos.Table SDK(对于 .NET,有其他语言的 SDK )。在该 SDK 中,您可以像这样创建表:

CloudStorageAccount storageAccount = CreateStorageAccountFromConnectionString(storageConnectionString);

CloudTableClient tableClient = storageAccount.CreateCloudTableClient(new TableClientConfiguration());

CloudTable table = tableClient.GetTableReference("order_details");
if (await table.CreateIfNotExistsAsync())
{
  Console.WriteLine("Created Table named: order_details");
}
else
{
  Console.WriteLine("Table order_details already exists");
}

如果您不需要使用 Tables API,您可以创建一个 SQL API 帐户并使用您已有的代码。

提取 BadRequest 响应的正文可能会向您显示该请求失败的原因,这可能表明您将 SQL API SDK 与 Tables API 帐户混合使用。


推荐阅读