最简单的插入数据库。
键值不能重复。具体代码省略
try {
mysqlpp::Query query = con.query();
.....
query.insert(row);
....
}
catch()
{
}
实际执行中,就算是同一条记录,重复执行插入几次,不报错,虽然没有写入数据库,但是我希望
捕获这个异常,
如何才能捕获重复插入记录的异常?
谢谢。
键值不能重复。具体代码省略
try {
mysqlpp::Query query = con.query();
.....
query.insert(row);
....
}
catch()
{
}
实际执行中,就算是同一条记录,重复执行插入几次,不报错,虽然没有写入数据库,但是我希望
捕获这个异常,
如何才能捕获重复插入记录的异常?
谢谢。
sql::Driver *driver;
sql::Connection *con;
sql::Statement *stmt;
sql::ResultSet *res; /* Create a connection */
driver = get_driver_instance();
con = driver->connect("tcp://127.0.0.1:3306", "root", "root");
/* Connect to the MySQL test database */
con->setSchema("test"); stmt = con->createStatement();
res = stmt->executeQuery("SELECT 'Hello World!' AS _message");
while (res->next()) {
cout << "\t... MySQL replies: ";
/* Access column data by alias or column name */
cout << res->getString("_message") << endl;
cout << "\t... MySQL says it again: ";
/* Access column fata by numeric offset, 1 is the first column */
cout << res->getString(1) << endl;
}
delete res;
delete stmt;
delete con;} catch (sql::SQLException &e) {
cout << "# ERR: SQLException in " << __FILE__;
cout << "(" << __FUNCTION__ << ") on line " »
<< __LINE__ << endl;
cout << "# ERR: " << e.what();
cout << " (MySQL error code: " << e.getErrorCode();
cout << ", SQLState: " << e.getSQLState() << " )" << endl;
}
std::string strSql;
string strTemp; try
{
mysqlpp::Connection con(true);
con.connect("tempfortest","localhost","root","admin",3306);
//AfxMessageBox(sUsrId);
strSql="select * from usrInfo where usrId='";
strTemp= m_UsrId.GetBuffer(0) ;
strSql=strSql+strTemp+" ' and usrPass='"+m_UsrPass.GetBuffer(0)+"'" ;
usrInfo row(m_UsrId.GetBuffer(0), m_UsrName.GetBuffer(0), "AU",m_UsrPass.GetBuffer(0)); // Form the query to insert the row into the stock table.
mysqlpp::Query query = con.query();
query.insert(row); // Show the query about to be executed.
cout << "Query: " << query << endl; // Execute the query. We use execute() because INSERT doesn't
// return a result set.
query.execute();
// strSql=strSql+strTemp;
//strSql=strSql+" where usrId='";
//strSql+=sUsrId.GetBuffer(0);
//strSql=strSql+"' ";
//mysqlpp::Query query = con.query(strSql);
/*
cout << "the it members as bellow :" << endl;
for (size_t i = 0; i < res.num_rows(); ++i)
{
cout << '\t' << res[i][0] << endl;
}
*/
//cout<<'\t'<< "show complete, press any key toexit."<<endl;
MessageBox("添加用户成功");
con.disconnect();
} catch(ConnectionFailed e){
MessageBox("数据库连接失败!");
}
catch (const mysqlpp::BadQuery& er) {
// Handle any query errors
cerr << "Query error: " << er.what() << endl;
return -1;
}
catch (const mysqlpp::BadConversion& er) {
// Handle bad conversions; e.g. type mismatch populating 'stock'
cerr << "Conversion error: " << er.what() << endl <<
"\tretrieved data size: " << er.retrieved <<
", actual size: " << er.actual_size << endl;
return -1;
}
catch (const mysqlpp::Exception& er) {
// Catch-all for any other MySQL++ exceptions
cerr << "Error: " << er.what() << endl;
return -1;
} return 0;
}
我的问题是,我先增加了一个用户usr001,成功,然后我再新增一个usr001(还是同一个用户),在数据库中。我设定了usrId是key,理论上是插入不成功的,而实际上也是插入不成功,但是并没有任何报错,也就是简单的执行了一遍插入语句,并且运行结束,我怎么提示用户,之前已经增加过同一个用户?使用逻辑控制插入前先检查一遍,这种方法不想采用。谢谢了
毕竟是重复插入,但我不知道为什么用mysql++所带的例子 insert没有报错,
mysqlpp::Exception& er 这个例外应该捕获了呀。搞不懂。
const mysqlpp::BadQuery& er
这一段捕获到了错误。