Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 每次运行SQL语句时更改模拟结果集值_Java_Sql_Unit Testing_Mockrunner - Fatal编程技术网

Java 每次运行SQL语句时更改模拟结果集值

Java 每次运行SQL语句时更改模拟结果集值,java,sql,unit-testing,mockrunner,Java,Sql,Unit Testing,Mockrunner,我正在使用Mockrunner为select语句创建模拟结果集。我有一个执行select语句(返回单个值)的循环。我希望结果集每次都返回不同的值,但是我找不到任何关于如何根据调用语句的次数指定结果集返回值的信息。下面是代码的伪代码片段: 在测试代码中: String selectSQL = "someselectStmt"; StatementResultSetHandler stmtHandler = conn.GetStatementResultSetHandler(); MockResul

我正在使用Mockrunner为select语句创建模拟结果集。我有一个执行select语句(返回单个值)的循环。我希望结果集每次都返回不同的值,但是我找不到任何关于如何根据调用语句的次数指定结果集返回值的信息。下面是代码的伪代码片段:

在测试代码中:

String selectSQL = "someselectStmt";
StatementResultSetHandler stmtHandler = conn.GetStatementResultSetHandler();
MockResultSet result = stmtHandler.createResultSet();
result.addRow(new Integer[]{new Integer(1)});
stmtHandler.prepareResultSet(selectSQL, result);
在实际目标类中:

Integer[] Results = getResults(selectSQL);

while(Results.length != 0){
    //do some stuff that change what gets returned in the select stmt
    Results = getResults(selectSQL)
}
基本上,我想在第一次通过时返回1,在第二次返回2,在第三次返回0。到目前为止,我还没有找到任何可以利用的东西来实现这一目标。mocked select语句将始终返回与之关联的最后一个结果集(例如,如果我创建了两个mockresultset,并且两者都与同一个select stmt关联)。这个想法可能吗?

在Java和SQL中循环控制流 如果您是用Java编写这一代码,那么可以通过循环控制流语句(如。本Wikipedia参考资料通过对比Java和不同编程语言中的实现之间的do-while循环进行了很好的讨论

通过观察产生的一些额外影响:

使用
Mockrunner
工具的工作提示:

mocked select语句将始终返回与之关联的最后一个结果集(例如,如果我创建了两个mockresultset,并且两者都与同一个select stmt关联)

这种情况是因为
SELECT
语句实际上也必须更改,否则重复查询也会重复结果输出。一个线索是,在整个代码执行过程中,SQL作为文本字符串值存在。字符串可以通过代码和简单的字符串操作进行更改

String selectSQL = "someselectStmt";
StatementResultSetHandler stmtHandler = conn.GetStatementResultSetHandler();
MockResultSet result = stmtHandler.createResultSet();
result.addRow(new Integer[]{new Integer(1)});
stmtHandler.prepareResultSet(selectSQL, result);
除了
selectSQL
变量外,还为数值变量添加一行,以跟踪SQL语句的执行次数:

Int queryLoopCount = 0;
在以下目标类中:

Integer[] Results = getResults(selectSQL);

while(Results.length != 0){
//do some stuff that change what gets returned in the select stmt
Results = getResults(selectSQL)
}
尝试重写此
,同时
按照此示例循环控制。在伪代码中,您将继续从对
getResults(selectSQL)的调用中提取相同的数据
设置测试模式和示例SQL语句
下面是一个使用单个MySQL表的小改进,该表包含要输入到某个结果集中的“testdata”输出。
ID
列可以是唯一标识每个不同记录或“测试用例”的方法

MySQL 5.5.32架构设置

CREATE TABLE testCaseData 
    (
     id int primary key,
     testdata_col1 int,
     testdata_col2 varchar(20),
     details varchar(30)
    );

INSERT INTO testCaseData
(id, testdata_col1, testdata_col2, details)
VALUES
(1, 2021, 'alkaline gab', 'First Test'),
(2, 322, 'rebuked girdle', '2nd Test'),
(3, 123, 'municipal shunning', '3rd Test'),
(4, 4040, 'regal limerick', 'Skip Test'),
(5, 5550, 'admonished hundredth', '5th Test'),
(6, 98, 'docile pushover', '6th Test'),
(7, 21, 'mousiest festivity', 'Last Test');

commit;
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
| ID | TESTDATA_COL1 |        TESTDATA_COL2 |    DETAILS |
|----|---------------|----------------------|------------|
|  1 |          2021 |         alkaline gab | First Test |
|  2 |           322 |       rebuked girdle |   2nd Test |
|  3 |           123 |   municipal shunning |   3rd Test |
|  4 |          4040 |       regal limerick |  Skip Test |
|  5 |          5550 | admonished hundredth |   5th Test |
|  6 |            98 |      docile pushover |   6th Test |
|  7 |            21 |   mousiest festivity |  Last Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id = 1
| ID | TESTDATA_COL1 | TESTDATA_COL2 |    DETAILS |
|----|---------------|---------------|------------|
|  1 |          2021 |  alkaline gab | First Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id = 2
| ID | TESTDATA_COL1 |  TESTDATA_COL2 |  DETAILS |
|----|---------------|----------------|----------|
|  2 |           322 | rebuked girdle | 2nd Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id < 5
| ID | TESTDATA_COL1 |      TESTDATA_COL2 |    DETAILS |
|----|---------------|--------------------|------------|
|  1 |          2021 |       alkaline gab | First Test |
|  2 |           322 |     rebuked girdle |   2nd Test |
|  3 |           123 | municipal shunning |   3rd Test |
|  4 |          4040 |     regal limerick |  Skip Test |
查询1查看所有测试数据

CREATE TABLE testCaseData 
    (
     id int primary key,
     testdata_col1 int,
     testdata_col2 varchar(20),
     details varchar(30)
    );

INSERT INTO testCaseData
(id, testdata_col1, testdata_col2, details)
VALUES
(1, 2021, 'alkaline gab', 'First Test'),
(2, 322, 'rebuked girdle', '2nd Test'),
(3, 123, 'municipal shunning', '3rd Test'),
(4, 4040, 'regal limerick', 'Skip Test'),
(5, 5550, 'admonished hundredth', '5th Test'),
(6, 98, 'docile pushover', '6th Test'),
(7, 21, 'mousiest festivity', 'Last Test');

commit;
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
| ID | TESTDATA_COL1 |        TESTDATA_COL2 |    DETAILS |
|----|---------------|----------------------|------------|
|  1 |          2021 |         alkaline gab | First Test |
|  2 |           322 |       rebuked girdle |   2nd Test |
|  3 |           123 |   municipal shunning |   3rd Test |
|  4 |          4040 |       regal limerick |  Skip Test |
|  5 |          5550 | admonished hundredth |   5th Test |
|  6 |            98 |      docile pushover |   6th Test |
|  7 |            21 |   mousiest festivity |  Last Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id = 1
| ID | TESTDATA_COL1 | TESTDATA_COL2 |    DETAILS |
|----|---------------|---------------|------------|
|  1 |          2021 |  alkaline gab | First Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id = 2
| ID | TESTDATA_COL1 |  TESTDATA_COL2 |  DETAILS |
|----|---------------|----------------|----------|
|  2 |           322 | rebuked girdle | 2nd Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id < 5
| ID | TESTDATA_COL1 |      TESTDATA_COL2 |    DETAILS |
|----|---------------|--------------------|------------|
|  1 |          2021 |       alkaline gab | First Test |
|  2 |           322 |     rebuked girdle |   2nd Test |
|  3 |           123 | municipal shunning |   3rd Test |
|  4 |          4040 |     regal limerick |  Skip Test |

CREATE TABLE testCaseData 
    (
     id int primary key,
     testdata_col1 int,
     testdata_col2 varchar(20),
     details varchar(30)
    );

INSERT INTO testCaseData
(id, testdata_col1, testdata_col2, details)
VALUES
(1, 2021, 'alkaline gab', 'First Test'),
(2, 322, 'rebuked girdle', '2nd Test'),
(3, 123, 'municipal shunning', '3rd Test'),
(4, 4040, 'regal limerick', 'Skip Test'),
(5, 5550, 'admonished hundredth', '5th Test'),
(6, 98, 'docile pushover', '6th Test'),
(7, 21, 'mousiest festivity', 'Last Test');

commit;
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
| ID | TESTDATA_COL1 |        TESTDATA_COL2 |    DETAILS |
|----|---------------|----------------------|------------|
|  1 |          2021 |         alkaline gab | First Test |
|  2 |           322 |       rebuked girdle |   2nd Test |
|  3 |           123 |   municipal shunning |   3rd Test |
|  4 |          4040 |       regal limerick |  Skip Test |
|  5 |          5550 | admonished hundredth |   5th Test |
|  6 |            98 |      docile pushover |   6th Test |
|  7 |            21 |   mousiest festivity |  Last Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id = 1
| ID | TESTDATA_COL1 | TESTDATA_COL2 |    DETAILS |
|----|---------------|---------------|------------|
|  1 |          2021 |  alkaline gab | First Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id = 2
| ID | TESTDATA_COL1 |  TESTDATA_COL2 |  DETAILS |
|----|---------------|----------------|----------|
|  2 |           322 | rebuked girdle | 2nd Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id < 5
| ID | TESTDATA_COL1 |      TESTDATA_COL2 |    DETAILS |
|----|---------------|--------------------|------------|
|  1 |          2021 |       alkaline gab | First Test |
|  2 |           322 |     rebuked girdle |   2nd Test |
|  3 |           123 | municipal shunning |   3rd Test |
|  4 |          4040 |     regal limerick |  Skip Test |
查询2仅查询表中的第一条记录

CREATE TABLE testCaseData 
    (
     id int primary key,
     testdata_col1 int,
     testdata_col2 varchar(20),
     details varchar(30)
    );

INSERT INTO testCaseData
(id, testdata_col1, testdata_col2, details)
VALUES
(1, 2021, 'alkaline gab', 'First Test'),
(2, 322, 'rebuked girdle', '2nd Test'),
(3, 123, 'municipal shunning', '3rd Test'),
(4, 4040, 'regal limerick', 'Skip Test'),
(5, 5550, 'admonished hundredth', '5th Test'),
(6, 98, 'docile pushover', '6th Test'),
(7, 21, 'mousiest festivity', 'Last Test');

commit;
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
| ID | TESTDATA_COL1 |        TESTDATA_COL2 |    DETAILS |
|----|---------------|----------------------|------------|
|  1 |          2021 |         alkaline gab | First Test |
|  2 |           322 |       rebuked girdle |   2nd Test |
|  3 |           123 |   municipal shunning |   3rd Test |
|  4 |          4040 |       regal limerick |  Skip Test |
|  5 |          5550 | admonished hundredth |   5th Test |
|  6 |            98 |      docile pushover |   6th Test |
|  7 |            21 |   mousiest festivity |  Last Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id = 1
| ID | TESTDATA_COL1 | TESTDATA_COL2 |    DETAILS |
|----|---------------|---------------|------------|
|  1 |          2021 |  alkaline gab | First Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id = 2
| ID | TESTDATA_COL1 |  TESTDATA_COL2 |  DETAILS |
|----|---------------|----------------|----------|
|  2 |           322 | rebuked girdle | 2nd Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id < 5
| ID | TESTDATA_COL1 |      TESTDATA_COL2 |    DETAILS |
|----|---------------|--------------------|------------|
|  1 |          2021 |       alkaline gab | First Test |
|  2 |           322 |     rebuked girdle |   2nd Test |
|  3 |           123 | municipal shunning |   3rd Test |
|  4 |          4040 |     regal limerick |  Skip Test |

CREATE TABLE testCaseData 
    (
     id int primary key,
     testdata_col1 int,
     testdata_col2 varchar(20),
     details varchar(30)
    );

INSERT INTO testCaseData
(id, testdata_col1, testdata_col2, details)
VALUES
(1, 2021, 'alkaline gab', 'First Test'),
(2, 322, 'rebuked girdle', '2nd Test'),
(3, 123, 'municipal shunning', '3rd Test'),
(4, 4040, 'regal limerick', 'Skip Test'),
(5, 5550, 'admonished hundredth', '5th Test'),
(6, 98, 'docile pushover', '6th Test'),
(7, 21, 'mousiest festivity', 'Last Test');

commit;
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
| ID | TESTDATA_COL1 |        TESTDATA_COL2 |    DETAILS |
|----|---------------|----------------------|------------|
|  1 |          2021 |         alkaline gab | First Test |
|  2 |           322 |       rebuked girdle |   2nd Test |
|  3 |           123 |   municipal shunning |   3rd Test |
|  4 |          4040 |       regal limerick |  Skip Test |
|  5 |          5550 | admonished hundredth |   5th Test |
|  6 |            98 |      docile pushover |   6th Test |
|  7 |            21 |   mousiest festivity |  Last Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id = 1
| ID | TESTDATA_COL1 | TESTDATA_COL2 |    DETAILS |
|----|---------------|---------------|------------|
|  1 |          2021 |  alkaline gab | First Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id = 2
| ID | TESTDATA_COL1 |  TESTDATA_COL2 |  DETAILS |
|----|---------------|----------------|----------|
|  2 |           322 | rebuked girdle | 2nd Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id < 5
| ID | TESTDATA_COL1 |      TESTDATA_COL2 |    DETAILS |
|----|---------------|--------------------|------------|
|  1 |          2021 |       alkaline gab | First Test |
|  2 |           322 |     rebuked girdle |   2nd Test |
|  3 |           123 | municipal shunning |   3rd Test |
|  4 |          4040 |     regal limerick |  Skip Test |
查询3查询表中的特定测试记录

CREATE TABLE testCaseData 
    (
     id int primary key,
     testdata_col1 int,
     testdata_col2 varchar(20),
     details varchar(30)
    );

INSERT INTO testCaseData
(id, testdata_col1, testdata_col2, details)
VALUES
(1, 2021, 'alkaline gab', 'First Test'),
(2, 322, 'rebuked girdle', '2nd Test'),
(3, 123, 'municipal shunning', '3rd Test'),
(4, 4040, 'regal limerick', 'Skip Test'),
(5, 5550, 'admonished hundredth', '5th Test'),
(6, 98, 'docile pushover', '6th Test'),
(7, 21, 'mousiest festivity', 'Last Test');

commit;
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
| ID | TESTDATA_COL1 |        TESTDATA_COL2 |    DETAILS |
|----|---------------|----------------------|------------|
|  1 |          2021 |         alkaline gab | First Test |
|  2 |           322 |       rebuked girdle |   2nd Test |
|  3 |           123 |   municipal shunning |   3rd Test |
|  4 |          4040 |       regal limerick |  Skip Test |
|  5 |          5550 | admonished hundredth |   5th Test |
|  6 |            98 |      docile pushover |   6th Test |
|  7 |            21 |   mousiest festivity |  Last Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id = 1
| ID | TESTDATA_COL1 | TESTDATA_COL2 |    DETAILS |
|----|---------------|---------------|------------|
|  1 |          2021 |  alkaline gab | First Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id = 2
| ID | TESTDATA_COL1 |  TESTDATA_COL2 |  DETAILS |
|----|---------------|----------------|----------|
|  2 |           322 | rebuked girdle | 2nd Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id < 5
| ID | TESTDATA_COL1 |      TESTDATA_COL2 |    DETAILS |
|----|---------------|--------------------|------------|
|  1 |          2021 |       alkaline gab | First Test |
|  2 |           322 |     rebuked girdle |   2nd Test |
|  3 |           123 | municipal shunning |   3rd Test |
|  4 |          4040 |     regal limerick |  Skip Test |

CREATE TABLE testCaseData 
    (
     id int primary key,
     testdata_col1 int,
     testdata_col2 varchar(20),
     details varchar(30)
    );

INSERT INTO testCaseData
(id, testdata_col1, testdata_col2, details)
VALUES
(1, 2021, 'alkaline gab', 'First Test'),
(2, 322, 'rebuked girdle', '2nd Test'),
(3, 123, 'municipal shunning', '3rd Test'),
(4, 4040, 'regal limerick', 'Skip Test'),
(5, 5550, 'admonished hundredth', '5th Test'),
(6, 98, 'docile pushover', '6th Test'),
(7, 21, 'mousiest festivity', 'Last Test');

commit;
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
| ID | TESTDATA_COL1 |        TESTDATA_COL2 |    DETAILS |
|----|---------------|----------------------|------------|
|  1 |          2021 |         alkaline gab | First Test |
|  2 |           322 |       rebuked girdle |   2nd Test |
|  3 |           123 |   municipal shunning |   3rd Test |
|  4 |          4040 |       regal limerick |  Skip Test |
|  5 |          5550 | admonished hundredth |   5th Test |
|  6 |            98 |      docile pushover |   6th Test |
|  7 |            21 |   mousiest festivity |  Last Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id = 1
| ID | TESTDATA_COL1 | TESTDATA_COL2 |    DETAILS |
|----|---------------|---------------|------------|
|  1 |          2021 |  alkaline gab | First Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id = 2
| ID | TESTDATA_COL1 |  TESTDATA_COL2 |  DETAILS |
|----|---------------|----------------|----------|
|  2 |           322 | rebuked girdle | 2nd Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id < 5
| ID | TESTDATA_COL1 |      TESTDATA_COL2 |    DETAILS |
|----|---------------|--------------------|------------|
|  1 |          2021 |       alkaline gab | First Test |
|  2 |           322 |     rebuked girdle |   2nd Test |
|  3 |           123 | municipal shunning |   3rd Test |
|  4 |          4040 |     regal limerick |  Skip Test |
查询4返回并限制输出集大小

CREATE TABLE testCaseData 
    (
     id int primary key,
     testdata_col1 int,
     testdata_col2 varchar(20),
     details varchar(30)
    );

INSERT INTO testCaseData
(id, testdata_col1, testdata_col2, details)
VALUES
(1, 2021, 'alkaline gab', 'First Test'),
(2, 322, 'rebuked girdle', '2nd Test'),
(3, 123, 'municipal shunning', '3rd Test'),
(4, 4040, 'regal limerick', 'Skip Test'),
(5, 5550, 'admonished hundredth', '5th Test'),
(6, 98, 'docile pushover', '6th Test'),
(7, 21, 'mousiest festivity', 'Last Test');

commit;
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
| ID | TESTDATA_COL1 |        TESTDATA_COL2 |    DETAILS |
|----|---------------|----------------------|------------|
|  1 |          2021 |         alkaline gab | First Test |
|  2 |           322 |       rebuked girdle |   2nd Test |
|  3 |           123 |   municipal shunning |   3rd Test |
|  4 |          4040 |       regal limerick |  Skip Test |
|  5 |          5550 | admonished hundredth |   5th Test |
|  6 |            98 |      docile pushover |   6th Test |
|  7 |            21 |   mousiest festivity |  Last Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id = 1
| ID | TESTDATA_COL1 | TESTDATA_COL2 |    DETAILS |
|----|---------------|---------------|------------|
|  1 |          2021 |  alkaline gab | First Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id = 2
| ID | TESTDATA_COL1 |  TESTDATA_COL2 |  DETAILS |
|----|---------------|----------------|----------|
|  2 |           322 | rebuked girdle | 2nd Test |
SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id < 5
| ID | TESTDATA_COL1 |      TESTDATA_COL2 |    DETAILS |
|----|---------------|--------------------|------------|
|  1 |          2021 |       alkaline gab | First Test |
|  2 |           322 |     rebuked girdle |   2nd Test |
|  3 |           123 | municipal shunning |   3rd Test |
|  4 |          4040 |     regal limerick |  Skip Test |
编写参数化SQL语句 我不知道这种语法上的差异是否会产生与伪代码完全相同的结果,但我建议您参考我知道已经有效的代码结构

set condition value before loop
do{
    // do some work
    // update condition value
}while(condition);
WHILE
条件改为位于语句末尾,并且应基于对循环块内的值所做的更改。现在我们将引入第二个变量,一个int,它跟踪循环的迭代次数:

String selectSQL = "someselectStmt";
String[] Results; = getResults(selectSQL);

// set condition value before loop 
queryLoopCount = 0

do{
    // do some work
    Results = getResults(selectSQL);

    // update condition value
    queryLoopCount = queryLoopcount + 1;

}while(queryLoopCount < 6);
并使用内置参数进行调整,以:

selectSQL = 'SELECT id, testdata_col1, testdata_col2, details
  FROM testCaseData
 WHERE id = ' + queryLoopCount;
混合字符串和整数值可能不是问题,因为在“on concatenated(+)”中,值表明:任何连接到字符串的内容都将转换为字符串(例如,“weight=“+kg”)

关于专门案例需求的想法
  • 您可以引入自己的编号顺序,以使每个案例的记录在参考表中循环。通过引入
    orderby
    语句并更改键
    orderby
    值,有很多可能性

  • “跳过”一案。在Do While循环中,添加IF-THEN语句以有条件地跳过特定记录

    set condition value before loop
    do{
    
        if ( queryLoopCount <> 4 ) {
        // do some work}
    
        // update condition value
        queryLoopCount = queryLoopCount + 1;
    
    }while(condition);
    
    循环前设置条件值
    做{
    如果(查询操作计数4){
    //做些工作}
    //更新条件值
    QueryLopCount=QueryLopCount+1;
    }while(条件);
    
    使用if-then循环,此代码示例将处理所有测试记录,但将跳过
    ID
    =4的记录并继续执行,直到满足while循环条件


你好,Richard,感谢您的回复。不幸的是,这个特定代码的设置方式实际上无法更改select语句本身。此select语句不知道任何特定限定符(例如主ID)。因此,它将返回一组行(比如10行)。然后,我们将此返回设置限制为第一个,然后处理该项目。对这一项的处理将防止它在重新运行时从同一个select语句返回(给我们9个结果并获取第一个结果)。我想知道是否有办法模拟这种类型的stmt。请告诉我有关输出行的更多信息。是否有可能确定哪怕是一个错误?如果不是,确保在使用同一SQL语句时不会再次拾取记录的一种蛮力方法是在处理完记录后将其删除(不建议这样做,但也有可能)。您的主要问题是,持久性的东西必须存在于您的驱动进程的范围之外。本质上,代码是以这样的方式编写的:它连接两个表并返回一组值,但一次只处理一行。该行的处理将从其中一个