码迷,mamicode.com
首页 > 编程语言 > 详细

c++心得

时间:2015-09-10 23:48:16      阅读:361      评论:0      收藏:0      [点我收藏+]

标签:

   c++学习了之后,让我对c++产生了很多的疑问,首先c++当中的虚函数,知道了虚函数表在内存中存在的地址位于类实例首地址中。在学习了java 连接数据库之后,悠然我产生了一个想法就是能不能通过c++来连接数据库呢,于是我就在网上查找了相关的代码并接了数据库。    (1)安装MySql  Server在本机上,安装过程就不细说了。    (2)解压Mysql++后,一般通常使用的是VS2008工程来uppdate。    (3)接下来就是编写我们的代码来操作数据库了,当然了,在这之前,你的mysql服务要安装好,并且建立一个要使用的数据库和表来操作。

 

(代码参考)  #include <winsock2.h> // 因为要使用socket,所以需要包含socket2.1头文件  #include "mysql++.h" // Mysql++头文件  #include <string>  #include <iostream>  using namespace mysqlpp;  using namespace std;

const DWORD SpaceTime = 20 * 60 * 1000; // 20分钟  const int LEN_NAME = 8;  const char CCH[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; // 随机字串字典

 char* rand_password( char* str, int len )  {  int i = 0, n = 0;  int nLength = strlen( CCH );  for ( i = 0, n = 0; i < LEN_NAME && n < nLength; ++i, ++n )  {  int x = rand() % ( nLength – 1 );  str[i] = CCH[x];  }

 str[ i + 1 ] = ‘\0’;  return str;  }

int _tmain(int argc, _TCHAR* argv[])  {  std::cout << "VPN_Modify_MySql_User_Password Tool" << std::endl;  std::cout << "Copyright (C) eliteYang" << std::endl;  std::cout << "http://www.cppfans.org" << std::endl;

 mysqlpp::Connection _vpnConn;  // 设置数据库编码  _vpnConn.set_option( new mysqlpp::SetCharsetNameOption( "utf8" ) );

 string dbIp, dbUserName, dbPwd, dbName;  cout << "\n\n\nMySql DataBase Info Input" << endl;  cout << "请输入MySQL服务器IP地址 : ";  cin >> dbIp;

 cout << "请输入MySql管理员账号 : ";  cin >> dbUserName;

 cout << "请输入MySql管理员账号密码 : ";  cin >> dbPwd;

 cout << "请输入MySql数据库名 : ";  cin >> dbName;

 cout << " 默认端口号为 3306 " << endl;

 bool bConnect = _vpnConn.connect( dbName.c_str(), dbIp.c_str(), dbUserName.c_str(), dbPwd.c_str(), 3306 );  if ( !bConnect )  {  cout << "VPN Connect mysql failed! Error: " << _vpnConn.error() << endl;  system( "Pause" );  return -1;  }  else  {  cout << "VPN Connect mysql success!" << endl;  }

 DWORD timeSlot = timeGetTime();  char szChar[ 256 ] = { 0 };  string strName = "123";  cout << "请输入需要定时修改密码的用户名 :";  cin >> strName;

 sprintf_s( szChar, "select * from vpn_user_info where UserName=%s", strName.c_str() );  while ( true )  {  if ( timeGetTime() – timeSlot < SpaceTime )  { continue; }  try  {  mysqlpp::Query _query = _vpnConn.query( szChar );  mysqlpp::StoreQueryResult _result = _query.store();  if ( _result.num_rows() != 1 )  {  cout << "UserName[123] repeat, please check" << endl;  timeSlot = timeGetTime();  continue;  }

 string strUserName = _result[0][0].c_str();  string strUserPassword = _result[0][1].c_str();  cout << "CurentInfo UserName[ " << strUserName.c_str() << " ] Password[ " << strUserPassword.c_str() << " ]" << endl;

 char strTemp[ LEN_NAME + 1 ] = { 0 };  strUserPassword = rand_password( strTemp, LEN_NAME );

 char szTemp[ 256 ] = { 0 };  sprintf_s( szTemp, "UPDATE vpn_user_info SET Password = ‘%s’ WHERE UserName = ‘%s’;", strUserPassword.c_str(), strUserName.c_str() );  _query << szTemp << endl;  _query.execute();  cout << "ModifyUserInfo UserName[ " << strUserName.c_str() << " ] Password[ " << strUserPassword.c_str() << " ]" << endl;  }  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  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;  }  }

 _vpnConn.disconnect();  system( "Pause" );

 return 0;  }

前面用到了简单的随机字串生成函数,以及设置数据库编码来实现MySQL服务器IP地址;管理员账号;管理员账号密码;数据库名;端口号 3306。

最后用了比较多的catch,为了捕捉更多的异常,

c++心得

标签:

原文地址:http://www.cnblogs.com/zj233/p/4799381.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!