2

Freebsd 8.0 amd64、mysql-client-5.1.61、mysql-connector-c++-1.1.0、mysql-server-5.1.61、および gcc 4.2.1 を使用しています。

stmt->execute("CREATE PROCEDURE p(OUT retval VARCHAR(50)) BEGIN SELECT \"Ulf joined MySQL more than 5 years ago\" INTO retval; END;");

 pstmt.reset(con->prepareStatement("CALL p(@output)"));
 pstmt->execute();

 pstmt.reset(con->prepareStatement("SELECT @output AS _answer"));
 res.reset(pstmt->executeQuery());
 while (res->next())
     cout << "\t... _answer: " << res->getString("_answer") << endl;

そして、これはそうではありません

stmt->execute("CREATE PROCEDURE p(OUT retval VARCHAR(50),OUT retval1 VARCHAR(50)) BEGIN SELECT \"Ulf joined MySQL more than 5 years ago\" INTO retval;SELECT \"Ulf joined MySQL more than 5 years ago\" INTO retval1;  END;");
pstmt.reset(con->prepareStatement("CALL p(@out1,@out2)"));
pstmt->execute();

pstmt.reset(con->prepareStatement("SELECT @out1 AS vOut,@out2 as vOut2"));
res.reset(pstmt->executeQuery());
while (res->next())
   cout << res->getString("vOut1") << res->getString("vOut2") << endl;

ERR: MySQLPreparedResultSet::getString: invalid 'columnIndex' (MySQL error code: 0, SQLState: ) が問題なのですか?

4

1 に答える 1

0

コードをそのままコピーしたと仮定すると、問題は単純なタイプミスが原因だと思います。この行で:

pstmt.reset(con->prepareStatement("SELECT @out1 AS vOut,@out2 as vOut2"));

パラメータの列名はvOutvOut2です。しかし、後者の行では:

cout << res->getString("vOut1") << res->getString("vOut2") << endl;

それらをvOut1および と呼びvOut2ます。vOut1という名前を付けたため、名前の列がありませんvOut。したがって、無効な列インデックス エラーが発生します。

于 2012-04-22T14:21:41.813 に答える