2012-04-22 4 views
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を使用しています。C++ mysqlはpreocedure multiple outパラメータエラーを返しました

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: ) を返しますか?

答えて

0

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

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

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

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

あなたはvOut1vOut2としてそれらを参照してください。名前がvOut1の列はありません。その列にはvOutという名前が付けられているため、無効な列インデックスエラーです。

関連する問題