增加oracle 11g x86版 instantclient
diff --git a/sdk/demo/occidml.cpp b/sdk/demo/occidml.cpp
new file mode 100755
index 0000000..ec5381c
--- /dev/null
+++ b/sdk/demo/occidml.cpp
@@ -0,0 +1,292 @@
+/* Copyright (c) 2001, 2008, Oracle. All rights reserved. */
+/*
+ NAME
+ occidml.cpp - Basic DML Operations demo
+
+ DESCRIPTION
+ To exhibit the insertion, selection, updating and deletion of
+ a row using OCCI interface
+
+ MODIFIED (MM/DD/YY)
+ mvasudev 05/22/08 - Add try/catch blocks
+ sudsrini 10/22/06 - Username/Password lower case
+ lburgess 04/14/06 - lowercase passwords
+ sudsrini 07/23/04 - Copyright Info
+ idcqe 03/05/01 - Creation
+
+*/
+
+#include <iostream>
+#include <occi.h>
+using namespace oracle::occi;
+using namespace std;
+
+class occidml
+{
+ private:
+
+ Environment *env;
+ Connection *conn;
+ Statement *stmt;
+ public:
+
+ occidml (string user, string passwd, string db)
+ {
+ env = Environment::createEnvironment (Environment::DEFAULT);
+ conn = env->createConnection (user, passwd, db);
+ }
+
+ ~occidml ()
+ {
+ env->terminateConnection (conn);
+ Environment::terminateEnvironment (env);
+ }
+
+ /**
+ * Insertion of a row with dynamic binding, PreparedStatement functionality.
+ */
+ void insertBind (int c1, string c2)
+ {
+ string sqlStmt = "INSERT INTO author_tab VALUES (:x, :y)";
+ stmt=conn->createStatement (sqlStmt);
+ try{
+ stmt->setInt (1, c1);
+ stmt->setString (2, c2);
+ stmt->executeUpdate ();
+ cout << "insert - Success" << endl;
+ }catch(SQLException ex)
+ {
+ cout<<"Exception thrown for insertBind"<<endl;
+ cout<<"Error number: "<< ex.getErrorCode() << endl;
+ cout<<ex.getMessage() << endl;
+ }
+
+ conn->terminateStatement (stmt);
+ }
+
+ /**
+ * Inserting a row into the table.
+ */
+ void insertRow ()
+ {
+ string sqlStmt = "INSERT INTO author_tab VALUES (111, 'ASHOK')";
+ stmt = conn->createStatement (sqlStmt);
+ try{
+ stmt->executeUpdate ();
+ cout << "insert - Success" << endl;
+ }catch(SQLException ex)
+ {
+ cout<<"Exception thrown for insertRow"<<endl;
+ cout<<"Error number: "<< ex.getErrorCode() << endl;
+ cout<<ex.getMessage() << endl;
+ }
+
+ conn->terminateStatement (stmt);
+ }
+
+ /**
+ * updating a row
+ */
+ void updateRow (int c1, string c2)
+ {
+ string sqlStmt =
+ "UPDATE author_tab SET author_name = :x WHERE author_id = :y";
+ stmt = conn->createStatement (sqlStmt);
+ try{
+ stmt->setString (1, c2);
+ stmt->setInt (2, c1);
+ stmt->executeUpdate ();
+ cout << "update - Success" << endl;
+ }catch(SQLException ex)
+ {
+ cout<<"Exception thrown for updateRow"<<endl;
+ cout<<"Error number: "<< ex.getErrorCode() << endl;
+ cout<<ex.getMessage() << endl;
+ }
+
+ conn->terminateStatement (stmt);
+ }
+
+
+ /**
+ * deletion of a row
+ */
+ void deleteRow (int c1, string c2)
+ {
+ string sqlStmt =
+ "DELETE FROM author_tab WHERE author_id= :x AND author_name = :y";
+ stmt = conn->createStatement (sqlStmt);
+ try{
+ stmt->setInt (1, c1);
+ stmt->setString (2, c2);
+ stmt->executeUpdate ();
+ cout << "delete - Success" << endl;
+ }catch(SQLException ex)
+ {
+ cout<<"Exception thrown for deleteRow"<<endl;
+ cout<<"Error number: "<< ex.getErrorCode() << endl;
+ cout<<ex.getMessage() << endl;
+ }
+
+ conn->terminateStatement (stmt);
+ }
+
+ /**
+ * displaying all the rows in the table
+ */
+ void displayAllRows ()
+ {
+ string sqlStmt = "SELECT author_id, author_name FROM author_tab \
+ order by author_id";
+ stmt = conn->createStatement (sqlStmt);
+ ResultSet *rset = stmt->executeQuery ();
+ try{
+ while (rset->next ())
+ {
+ cout << "author_id: " << rset->getInt (1) << " author_name: "
+ << rset->getString (2) << endl;
+ }
+ }catch(SQLException ex)
+ {
+ cout<<"Exception thrown for displayAllRows"<<endl;
+ cout<<"Error number: "<< ex.getErrorCode() << endl;
+ cout<<ex.getMessage() << endl;
+ }
+
+ stmt->closeResultSet (rset);
+ conn->terminateStatement (stmt);
+ }
+
+ /**
+ * Inserting a row into elements table.
+ * Demonstrating the usage of BFloat and BDouble datatypes
+ */
+ void insertElement (string elm_name, float mvol=0.0, double awt=0.0)
+ {
+ BFloat mol_vol;
+ BDouble at_wt;
+
+ if (!(mvol))
+ mol_vol.isNull = TRUE;
+ else
+ mol_vol.value = mvol;
+
+ if (!(awt))
+ at_wt.isNull = TRUE;
+ else
+ at_wt.value = awt;
+
+ string sqlStmt = "INSERT INTO elements VALUES (:v1, :v2, :v3)";
+ stmt = conn->createStatement (sqlStmt);
+
+ try{
+ stmt->setString(1, elm_name);
+ stmt->setBFloat(2, mol_vol);
+ stmt->setBDouble(3, at_wt);
+ stmt->executeUpdate ();
+ cout << "insertElement - Success" << endl;
+ }catch(SQLException ex)
+ {
+ cout<<"Exception thrown for insertElement"<<endl;
+ cout<<"Error number: "<< ex.getErrorCode() << endl;
+ cout<<ex.getMessage() << endl;
+ }
+ conn->terminateStatement (stmt);
+ }
+
+ /**
+ * displaying rows from element table
+ */
+ void displayElements ()
+ {
+ string sqlStmt =
+ "SELECT element_name, molar_volume, atomic_weight FROM elements \
+ order by element_name";
+ stmt = conn->createStatement (sqlStmt);
+ ResultSet *rset = stmt->executeQuery ();
+ try{
+ cout.precision(7);
+ while (rset->next ())
+ {
+ string elem_name = rset->getString(1);
+ BFloat mol_vol = rset->getBFloat(2);
+ BDouble at_wt = rset->getBDouble(3);
+
+ cout << "Element Name: " << elem_name << endl;
+
+ if ( mol_vol.isNull )
+ cout << "Molar Volume is NULL" << endl;
+ else
+ cout << "Molar Volume: " << mol_vol.value << " cm3 mol-1" << endl;
+
+ if ( at_wt.isNull )
+ cout << "Atomic Weight is NULL" << endl;
+ else
+ cout << "Atomic Weight: " << at_wt.value << " g/mole" << endl;
+ }
+ }catch(SQLException ex)
+ {
+ cout<<"Exception thrown for displayElements"<<endl;
+ cout<<"Error number: "<< ex.getErrorCode() << endl;
+ cout<<ex.getMessage() << endl;
+ }
+
+ stmt->closeResultSet (rset);
+ conn->terminateStatement (stmt);
+ }
+
+}; // end of class occidml
+
+
+int main (void)
+{
+ string user = "hr";
+ string passwd = "hr";
+ string db = "";
+ try{
+ cout << "occidml - Exhibiting simple insert, delete & update operations"
+ << endl;
+ occidml *demo = new occidml (user, passwd, db);
+ cout << "Displaying all records before any operation" << endl;
+ demo->displayAllRows ();
+
+ cout << "Inserting a record into the table author_tab "
+ << endl;
+ demo->insertRow ();
+
+ cout << "Displaying the records after insert " << endl;
+ demo->displayAllRows ();
+
+ cout << "Inserting a records into the table author_tab using dynamic bind"
+ << endl;
+ demo->insertBind (222, "ANAND");
+
+ cout << "Displaying the records after insert using dynamic bind" << endl;
+ demo->displayAllRows ();
+
+ cout << "deleting a row with author_id as 222 from author_tab table" << endl;
+ demo->deleteRow (222, "ANAND");
+
+ cout << "updating a row with author_id as 444 from author_tab table" << endl;
+ demo->updateRow (444, "ADAM");
+
+ cout << "displaying all rows after all the operations" << endl;
+ demo->displayAllRows ();
+
+ cout << "inserting radio active element properties" << endl;
+ demo->insertElement ("Uranium", 12.572, 238.0289 );
+ demo->insertElement ("Plutonium", 12.12, 244.0642 );
+ demo->insertElement ("Curium", 18.17, 247.0703 );
+ demo->insertElement ("Thorium");
+ demo->insertElement ("Radium", 41.337, 226.0254);
+
+ cout << "displaying all radio active element properties" << endl;
+ demo->displayElements ();
+
+ delete (demo);
+ }
+ catch (SQLException ex){
+ cout << ex.getMessage() << endl;
+ }
+ cout << "occidml - done" << endl;
+}