#include <string>
#include <occi.h>
#include <iostream>
using namespace std;
using namespace oracle::occi;
struct Student_struct
{
int no;
int age;
string name;
};
std::string getSQL(void)
{
std::string str_sql = "SELECT * FROM emp WHERE mgr=(:1)";
return str_sql;
}
/* 连接 Oracle 操作步骤 */
void connectOracle()
{
const string userName = "scott";
const string password = "tiger";
const string connString = "localhost:1521/orcl";
try
{
Environment *env = Environment::createEnvironment(Environment::DEFAULT);
Connection *con = env->createConnection(userName, password, connString);
cout << "Success to connect!" << endl;
Statement *stmt = con->createStatement();
//动态 SQL
stmt->setSQL("SELECT * FROM emp WHERE mgr=(:1) AND sal=(:2)");
stmt->setInt(1, 7902);
stmt->setInt(2, 800);
ResultSet *rs = stmt->executeQuery();
while (rs->next())
{
int no = rs->getInt(1);
string name = rs->getString(2);
cout << "no is:" << no << endl;
cout << "name :" << name << endl;
cout << "MGR : "<<rs->getInt(4)<<endl;
cout << "SAL :"<<rs->getInt(6)<<endl;
}
con->terminateStatement(stmt);
env->terminateConnection(con);
Environment::terminateEnvironment(env);
}
catch (SQLException &ex)
{
cout << ex.what() << endl;
}
system("pause");
}
/* 增加 数据 */
void insertData(Connection *p_conn)
{
Statement *p_stmt = NULL;
int m_no;
string m_name;
//string m_name;
int m_age;
int Flag = 0;
//执行sql,返回结果并显示
cout << "PLEASE INPUT THE no! " << endl;
for(;;)
{
fflush(stdin);
if((!scanf_s("%d", &m_no)) || (m_no) < 0)
{
cout << "The no that you just input is invalid,please input it again !" << endl;
continue;
}
else
break;
}
string Verify_strsql( "select * from student where no =(:1)" );
p_stmt = p_conn->createStatement( Verify_strsql );
p_stmt->setInt(1, m_no);
ResultSet *rset = p_stmt-> executeQuery();
/*while( rset->next() )
{
Flag = rset->getInt(1);
}*/
rset->next();
Flag = rset->getInt(1);
if((m_no != 0) && (Flag != m_no)) /*判断是否为0或已经存在*/
{
try
{
cout << "PLEASE INPUT THE name! " << endl;
cin >> m_name;
cout << "PLEASE INPUT THE age! " << endl;
for(;;)
{
fflush(stdin);
if((!scanf_s("%d", &m_age)) || (m_age) < 0)
{
cout << "The age that you just input is invalid,please input it again !!" << endl;
continue;
}
else
break;
}
string strsql = "insert into student (no,name,age) values (:1,:2,:3)";
p_stmt = p_conn->createStatement( strsql );
//p_stmt->setSQL(strsql);
p_stmt->setInt(1, m_no);
p_stmt->setString(2, m_name);
p_stmt->setInt(3, m_age);
cout << "The Statement that you input is " << strsql << endl;
p_stmt-> executeUpdate();
p_conn->commit();
cout << "Successfully inserted a new record ! " << endl;
}
catch(SQLException *e)
{
cout << "exception: " << e->what() << endl;
}
p_conn->terminateStatement(p_stmt);
}
else
{
cout << "The user_no is invalid or has been exist!,please input it again!" << endl;
}
}
/* 删除 数据 */
void deleteData(Connection *p_conn)
{
int m_no;
int Flag = 0;
Statement *p_stmt = NULL;
//执行sql,返回结果并显示
//delete_data:
cout << "Please input the number that you want to delete :" << endl;
for(;;)
{
fflush(stdin);
if(!scanf_s("%d", &m_no))
{
cout << "输入字符出错!请重新输入!" << endl;
continue;
}
else
break;
}
string Verify_strsql( "select * from student where no =(:1)" );
p_stmt = p_conn->createStatement( Verify_strsql );
p_stmt->setInt(1, m_no);
ResultSet *rset = p_stmt-> executeQuery();
/*while( rset->next() )
{
Flag = rset->getInt(1);
}*/
rset->next();
Flag = rset->getInt(1);
if(Flag)
{
string strsql( "delete from student where no = (:1)");
p_stmt = p_conn->createStatement( strsql );
p_stmt->setInt(1, m_no);
try
{
p_stmt-> executeUpdate();
p_conn->commit();
cout << "Successfully deleted an old record !" << endl;
}
catch(SQLException *e)
{
cout << "exception: " << e->what() << endl;
}
}
else
{
cout << "The number that you just input didn't exist! please input a new number!" << endl;
cout << "_____________________________________________________________________" << endl;
//goto delete_data;
}
p_conn->terminateStatement(p_stmt);
}
/* 修改 数据 */
void setData(Connection *p_conn)
{
Statement *p_stmt = NULL;
try
{
int m_no;
int Flag = 0;
string m_name;
int m_age;
cout << "Please input the number that you want to updata :" << endl;
//cin>>m_no;
for(;;)
{
fflush(stdin);
if(!scanf_s("%d", &m_no))
{
cout << "输入字符出错!请重新输入!" << endl;
continue;
}
else
break;
}
string Verify_strsql( "select * from student where no =(:1)" );
p_stmt = p_conn->createStatement( Verify_strsql );
p_stmt->setInt(1, m_no);
ResultSet *rset = p_stmt-> executeQuery();
/*while( rset->next() )
{
Flag = rset->getInt(1);
}*/
rset->next();
Flag = rset->getInt(1);
if(Flag)
{
cout << "PLEASE INPUT THE NEW name! " << endl;
cin >> m_name;
cout << "PLEASE INPUT THE NEW age! " << endl;
//cin>>m_age;
for(;;)
{
fflush(stdin);
if((!scanf_s("%d", &m_age)) || (m_age) < 0)
{
cout << "The age that you just input is invalid,please input it again !!" << endl;
continue;
}
else
break;
}
string strsql = "update student set name=(:1),age=(:2) where no=(:3)";
p_stmt = p_conn->createStatement( strsql );
//p_stmt -> setSQL(strsql);
int number = m_no;
string name = m_name;
int age = m_age;
p_stmt->setInt(2, age);
p_stmt->setString(1, name);
p_stmt->setInt(3, number);
p_stmt-> executeUpdate();
//cout <<"The Statement that you input is "<<strsql<< endl;
cout << p_stmt->getSQL() << endl;
p_conn->commit();
cout << " SUCCESSFULLY UPDATA A NEW RECORD !" << endl;
}
else
{
cout << "The number that you just input didn't exist!please input a new number!" << endl;
cout << "_____________________________________________________________________" << endl;
}
}
catch(SQLException *e)
{
cout << "exception: " << e->what() << endl;
}
p_conn->terminateStatement(p_stmt);
}
/* 查找 数据 */
void displayData(Connection *p_conn)
{
Statement *p_stmt = NULL;
int row = 1;
string strsql( "select * from student order by no" );
p_stmt = p_conn->createStatement( strsql );
ResultSet *rset = p_stmt-> executeQuery(); //查询语句
try
{
cout << setiosflags(ios::left) << setw(5) << "行号" << setiosflags(ios::left) << setw(5) << " 编号" << setiosflags(ios::left) << setw(8) << " 姓名" << setiosflags(ios::left) << setw(8) << " 年龄" << endl;
while( rset->next() )
{
int no = rset->getInt(1);
int age = rset->getInt(3);
string name = rset->getString(2);
cout << "row." << setiosflags(ios::left) << setw(5) << row << " no=" << setiosflags(ios::left) << setw(5) << no << " name=" << setiosflags(ios::left) << setw(8) << name << " age=" << setiosflags(ios::left) << setw(10) << age << endl;
row++;
}
}
catch (SQLException *e)
{
cout << "exception: " << e->what() << endl;
}
p_stmt->closeResultSet(rset);
p_conn->terminateStatement(p_stmt);
}
void findData(Connection *p_conn)
{
Statement *p_stmt = NULL;
int no;
int Flag = 0;
cout << "Please input the number that you want to search :" << endl;
//cin>> no;
for(;;)
{
fflush(stdin);
if(!scanf_s("%d", &no))
{
cout << "输入字符出错!请重新输入!" << endl;
continue;
}
else
break;
}
string Verify_strsql( "select * from student where no =(:1)" );
p_stmt = p_conn->createStatement( Verify_strsql );
p_stmt->setInt(1, no);
ResultSet *rset = p_stmt-> executeQuery();
/*while( rset->next() )
{
Flag = rset->getInt(1);
}*/
rset->next();
Flag = rset->getInt(1);
if(Flag)
{
string strsql( "select * from student where no =(:1)" );
p_stmt = p_conn->createStatement( strsql );
p_stmt->setInt(1, no);
ResultSet *rset = p_stmt-> executeQuery(); //查询语句
try
{
while( rset->next() )
{
int no = rset->getInt(1);
int age = rset->getInt(3);
string name = rset->getString(2);
cout << "no==" << no << " name==" << name << " age==" << age << endl;
}
}
catch (SQLException *e)
{
cout << "exception: " << e->what() << endl;
}
}
else
{
cout << "The data that you just input didn't exist! please input a new number!" << endl;
cout << "___________________________________________________________________" << endl;
}
p_stmt->closeResultSet(rset);
p_conn->terminateStatement(p_stmt);
}
void Export_data(Connection *p_conn)
{
unsigned int i = 0;
Statement *p_stmt = NULL;
Student_struct m_struct_student;
vector<Student_struct> stu_strc;
stu_strc.reserve(100);
string strsql( "select * from student order by no" );
p_stmt = p_conn->createStatement( strsql );
ResultSet *rset = p_stmt-> executeQuery(); //查询语句
try
{
while( rset->next() )
{
m_struct_student.no = rset->getInt(1);
m_struct_student.age = rset->getInt(3);
m_struct_student.name = rset->getString(2);
stu_strc.push_back(m_struct_student);
}
/*vector<Student_struct>::iterator iter;
iter = stu_strc.begin();
while(iter != stu_strc.end())
{
cout<<*(iter++)<<endl;
}*/
ofstream Vector_to_file("d:\\Database_file.txt");
if(!Vector_to_file)
{
cout << "error" << endl;
return;
}
else
{
for(i = 0; i < stu_strc.size(); i++)
{
Vector_to_file << setiosflags(ios::left) << setw(8) << stu_strc[i].no << setiosflags(ios::left) << setw(8) << stu_strc[i].name << " " << setiosflags(ios::left) << setw(8) << stu_strc[i].age << endl;
}
Vector_to_file.close();
cout << "您已成功将以下数据写入d:\\Database_file.txt文件中 !" << endl;
cout << endl;
cout << setiosflags(ios::left) << setw(8) << "编号" << " " << setiosflags(ios::left) << setw(8) << "姓名" << " " << setiosflags(ios::left) << setw(8) << "年龄" << endl;
for(i = 0; i < stu_strc.size(); i++)
{
cout << setiosflags(ios::left) << setw(8) << stu_strc[i].no << " " << setiosflags(ios::left) << setw(8) << stu_strc[i].name << " " << setiosflags(ios::left) << setw(8) << stu_strc[i].age << endl;
}
}
//return EXIT_SUCCESS;
}
catch (SQLException *e)
{
cout << "exception: " << e->what() << endl;
}
p_stmt->closeResultSet(rset);
p_conn->terminateStatement(p_stmt);
}
void Vector_save(Connection *p_conn)
{
Statement *p_stmt = NULL;
Student_struct m_struct_student;//结构体变量
vector<Student_struct> stu_strc;//声明一个向量
stu_strc.reserve(100);
string strsql( "select * from student order by no" );
p_stmt = p_conn->createStatement( strsql );
ResultSet *rset = p_stmt-> executeQuery(); //查询语句
try
{
while( rset->next() )
{
m_struct_student.no = rset->getInt(1);
m_struct_student.age = rset->getInt(3);
m_struct_student.name = rset->getString(2);
stu_strc.push_back(m_struct_student);
}
/*vector<Student_struct>::iterator iter;
iter = stu_strc.begin();
while(iter != stu_strc.end())
{
cout<<*(iter++)<<endl;
}*/
cout << "您已成功将以下数据装入vector容器中 !" << endl;
cout << endl;
cout << setiosflags(ios::left) << setw(5) << "编号" << " " << setiosflags(ios::left) << setw(5) << "姓名" << " " << setiosflags(ios::left) << setw(5) << "年龄" << endl;
for(unsigned int i = 0; i < stu_strc.size(); i++)
{
cout << setiosflags(ios::left) << setw(5) << stu_strc[i].no << " " << setiosflags(ios::left) << setw(5) << stu_strc[i].name << " " << setiosflags(ios::left) << setw(5) << stu_strc[i].age << endl;
}
}
catch (SQLException *e)
{
cout << "exception: " << e->what() << endl;
}
p_stmt->closeResultSet(rset);
p_conn->terminateStatement(p_stmt);
}
int main()
{
connectOracle();
return 0;
}
C++ 操作 Oracle
最新推荐文章于 2024-04-30 23:37:55 发布