【问题标题】:Java- read data from voltdb with native procedureJava-使用本机过程从 voltdb 读取数据
【发布时间】:2014-09-22 10:32:39
【问题描述】:

我正在尝试使用 Java 从 VoltDB 数据库中读取数据。现在,它可以使用 SQL 语句中的结果集来完成,但应该(我被告知)有另一种方式,它是 VoltDB 原生的,类似于如何将数据写入 VoltDB 数据库(使用 client.callProcedure)。我不知道该怎么做;看起来这应该是一件非常简单的事情,但我在客户端中没有看到任何简单的方法。

【问题讨论】:

    标签: java voltdb


    【解决方案1】:

    是的,如果您使用 client.callProcedure 进行写入,您当然可以使用相同的 API 进行读取。这是一个简单的例子:

    ClientResponse cr = client.callProcedure(procname,parameters);
    VoltTable[] tables = cr.getResults();
    VoltTable table_a = tables[0];
    while (table_a.advanceRow()) {
        System.out.println("Column 0 is " + table_a.getString(0));
    }
    

    这是一个简短的例子:

    VoltTable table_a = client.callProcedure(procname,parameters).getResults()[0];
    while (table_a.advanceRow()) {
        System.out.println("Column 0 is " + table_a.getString(0));
    }
    

    您也可以像这样调用 AdHoc SQL,而不是 procname 和参数:

    VoltTable table_a = client.callProcedure("@AdHoc","SELECT * FROM helloworld;").getResults()[0];
    

    以上这些示例是同步或阻塞调用。如果您希望您的应用程序使用异步调用,您还可以在调用中使用 Callback 对象,这样客户端将继续执行后续代码。当处理回调的客户端线程收到响应时,可以将结果传递给我们应用程序中的另一个线程以读取结果。

    您可以在Java Client API Javadoc 中阅读有关 API 的更多信息。

    【讨论】:

    • 是的,我正在寻找“@AdHoc”。谢谢。但是,我实际上想要获得的类型是 VoltTable[],而不是 VoltTable——它应该能够处理多个 VoltTables 的输入。 (它还需要一个回调,但我认为这不会影响这一点。)无论哪种方式,它都会给我一个错误。 “无法解析方法 getResults。”有没有我缺少的导入?
    • 很抱歉没有早点看到这个。 getResults() 在 ClientResponse 类中。您需要“导入 org.voltdb.client.ClientResponse;”。上面的第一个示例显示了获取 VoltTable[],第二个和第三个示例只是跳过将数组作为对象获取,而是获取数组的第一个元素。这只是数组中只有一个 VoltTable 的常见情况的一种快捷方式。
    猜你喜欢
    • 2018-10-12
    • 2022-01-11
    • 2017-03-05
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多