Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Languages / C++

Oracle C++ API non-sense

2.00/5 (1 vote)
29 Oct 2012CPOL 8.8K  
A solution to the problem.

I spent two hours trying to figure out this nonsense. Here is the problem:

Environment *env = Environment::createEnvironment();
Connection *conn = env->createConnection("username", "password",
connectionString);
string sqlQueryText = "UPDATE myTable SET field4 =:p4, field3 =:p3
WHERE field2 :=p2 AND field1 :=p1";
Statement* updateStatement = conn->createStatement(sqlQueryText);

updateStatement.setInt(1, field1Var);
updateStatement.setString(2, field2Var);
updateStatement.setInt(3, field3Var);
updateStatement.setString(4, field4Var);

updateStatement.executeUpdate(conn);

What’s wrong with the code above? Not a thing in my opinion. Yet, if you run it, you’ll get a pretty cryptic invalid number exception.

Turns out that the way the query is put together is order specific and when the values are converted at run time, an exception is thrown.

The following is how I made it work:

Environment* env = Environment::createEnvironment();
Connection* conn = env->createConnection("username", "password",
connectionString);
string sqlQueryText = "UPDATE myTable SET field4 =:p1, field3 =:p2
WHERE field2 :=p3 AND field1 :=p4";
Statement* updateStatement = conn->createStatement(sqlQueryText);

updateStatement.setString(1, field4Var);
updateStatement.setInt(2, field3Var);
updateStatement.setString(3, field2Var);
updateStatement.setInt(4, field1Var);

updateStatement.executeUpdate(conn);

Why they implemented it like that is beyond me.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)