java - 在 voltdb 的存储过程中运行选择查询后出现错误

标签 java stored-procedures runtime-error voltdb

当我在 Volt DB 存储过程中运行选择查询时,出现运行时错误。当我在 volt DB Web Studio 中运行选择查询时,一切都很好。错误如下:

错误:VOLTDB 错误:意外失败:java.lang.RuntimeException:VoltTableRow 处于无效状态。考虑调用 advanceRow()。在 org.voltdb.VoltTableRow.validateColumnType(VoltTableRow.java:752) 在 org.voltdb.VoltTableRow.getDouble(VoltTableRow.java:384) 在 procedure.testPrcUpdateConstraint.run(testPrcUpdateConstraint.java:93) 在 sun.reflect.NativeMethodAccessorImpl。在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)处调用0( native 方法)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)处在java.lang.reflect.Method.invoke(Method.java: 606) 在 org.voltdb.ProcedureRunner.call(ProcedureRunner.java:316) 在 org.voltdb.iv2.ProcedureTask.processInitiateTask(ProcedureTask.java:111) 在 org.voltdb.iv2.MpProcedureTask.run(MpProcedureTask.java:157) )在org.voltdb.iv2.MpRoSite.run(MpRoSite.java:278)在org.voltcore.utils.CoreUtils$6$1.run(CoreUtils.java:644)在java.lang.Thread.run(Thread.java:第744章)

任何有关可能出现问题的指示都会非常有帮助。

最佳答案

从这里看来,存储过程中的 SQL 没有问题,但您试图从 VoltTable 的特定行访问某些值,而不先将其前进到第一行。 VoltTable 有一个指向“当前行”的内部指针,该指针最初根本不指向任何行。

例如,如果您知道 VoltTable 只有一行,您可以执行以下任一操作:

// most efficient, moves the pointer to the next row
table.advanceRow();
String col1 = table.getString(0);

// moves the pointer to an arbitrary row, less efficient for iterating
table.advanceToRow(0);
String col1 = table.getString(0);

// least efficient - makes a new copy of the row
VoltTableRow row = table.fetchRow(0);
String col1 = row.getString(0);

Javadoc 页面上有一个关于 VoltTable 的示例。这是迭代 VoltTable 行的最常见习惯用法:

while (table.advanceRow()) {
    System.out.println(table.getLong(7));
}

advanceRow() 和 advanceToRow(int rownumber) 方法来自 VoltTableRow ,VoltTable 扩展。 VoltTable 的 fetchRow(int rownumber) 方法返回该行的副本作为新的 VoltTableRow 对象,该对象仅包含它已指向的一行数据。

关于java - 在 voltdb 的存储过程中运行选择查询后出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27927836/

相关文章:

java - 如何在 Java 中执行多条 sql 行?

java - 方法引用语法如何在 Java 8 中工作

MySql 嵌套存储过程调用

mysql - 在存储过程中拆分字符串

java - 在 JTextPane 中为文本着色的有效方法

java - 如何限制Android应用程序不显示在设备的主菜单中?

oracle - 从 PLSQL 中的表派生函数

C++ Map/Set 迭代器不可递增错误

java - 忘记处理异常是逻辑/运行时错误还是不是错误

第二次迭代时出现 VBA 运行时错误 91