快半年沒更新部落格了,發表篇文章 不能荒廢了。 之前堅持了兩年寫部落格的 中斷了的話 有點可惜。
這個類不是執行緒安全版本請注意了 只是單例項
先看下目錄結構 源**打包放附件中
|-- makefile
|-- include
| |-- mysql_conn.h
| `-- sns_concern.h
|-- lib
| |-- db
| | |-- makefile
| | |-- mysql_conn.cpp
| | `-- mysql_conn.o
| |-- makefile
| |-- sns_concern.cpp
| `-- sns_concern.o
|-- ma2
|-- ma2.cpp
|-- ma2.o
`-- maketest
是乙個完整的demo,makefile寫的感覺有點挫。
現在貼出mysql_conn.cpp 和 實際使用它的檔案 sns_concern.cpp
mysql_conn.cpp
#include
#include
#include
#include "mysql_conn.h"
using namespace std;
using namespace mysqlpp;
mysql_conn * mysql_conn::instance = null;
mysql_conn * mysql_conn::get_instance()
char *user = "poker_wrt";
char *pwd = "poker_wrt";
char *host = "192.168.0.246";
char *db = "test";
char *charset = "gbk";
if (null == mysql_conn::instance)
instance = new mysql_conn(db, user, pwd, host, charset);
return instance;
mysql_conn::mysql_conn(char *db, char *username, char *password,char *host, char *charset)
if ( !con.connect(db, host, username, password))
cout << "connect mysql error"<< endl;
string str = "set names " ;
str = str + charset;
this->mysql_execute(str);
this->mysql_execute("set autocommit=0");
void mysql_conn::hello()
cout << "from hello" << endl;
storequeryresult mysql_conn::mysql_query(string query_str, sqlqueryparms params)
query query = con.query(query_str);
query.parse();
storequeryresult res = query.store(params) ;
return res;
int mysql_conn::mysql_execute(string query_str,sqlqueryparms params)
query query = con.query(query_str);
query.parse();
query.execute(params);
return query.affected_rows();
int mysql_conn::get_insert_id()
query query = con.query();
return query.insert_id();
int mysql_conn::commit()
transaction trans(con);
trans.commit();
return 1;
int mysql_conn::rollback()
transaction trans(con);
trans.rollback();
return 1;
sns_concern.cpp
#include
#include
#include
#include "sns_concern.h"
using namespace std;
using namespace mysqlpp;
int sns_concern::add(int uid, string username, int uid_by, string username_by)
string insert_str = "insert into t_user_concern \
(f_uid,f_username,f_concern_uid,f_concern_username) \
values(%0q,%1q,%2q,%3q)";
sqlqueryparms params2;
int nums;
params2 += uid;
params2 += username;
params2 += uid_by;
params2 += username_by;
mysql_conn *p1 = mysql_conn::get_instance();
nums = p1->mysql_execute(insert_str,params2);
p1->commit();
return nums;
int sns_concern::del(int uid, int uid_by)
string del_str = "delete from t_user_concern where f_uid = %0q and f_concern_uid = %1q";
sqlqueryparms params2;
int nums;
params2 += uid;
params2 += uid_by;
mysql_conn *p1 = mysql_conn::get_instance();
nums = p1->mysql_execute(del_str,params2);
p1->commit();
return nums;
storequeryresult sns_concern::get(int uid)
string select_str = "select f_uid uid,f_username username,f_concern_uid concern_uid,\
f_concern_username concern_username from t_user_concern\
where f_uid = %0q";
sqlqueryparms params2;
params2 += uid;
mysql_conn *p1 = mysql_conn::get_instance();
return p1->mysql_query(select_str,params2);
使用的表的sql語句在這裡:
create table `t_user_concern` (
`f_uid` int(10) unsigned not null comment '使用者id',
`f_username` varchar(255) not null comment '使用者名稱',
`f_concern_uid` int(10) unsigned not null comment '使用者id',
`f_concern_username` varchar(255) not null comment '使用者名稱',
`f_instime` datetime default null comment '插入時間',
`f_uptime` datetime default null comment '更新時間'
) engine=innodb default charset=utf8 comment='使用者關注表'
mysql常用運維 mysql 運維常見操作
mysql密碼的恢復方法之一 1 首先確認伺服器出於安全的狀態,也就是沒有人能夠任意地連線mysql資料庫。因為在重新設定mysql的root密碼的期間,mysql資料庫完全出於沒有密碼保護的 狀態下,其他的使用者也可以任意地登入和修改mysql的資訊。可以採用將mysql對外的埠封閉,並且停止ap...
mysql常用運維 (MYSQL常用運維指令)
1 mysql執行狀態 service mysqld status service mysqld start service mysqld stop 2 檢視sql程序,清理sql程序 show full processlist kill 2920578 3 賬號建立 資料庫授權 4 密碼修改 my...
MySQL 日常運維
正規化和反正規化 正規化和反正規化是庫表設計過程中的概念 目前關聯式資料庫有六種正規化,越高的正規化資料庫冗餘越小 正規化化可以較少冗餘,從而減少了在更新資料時一致性方面的開銷 反正規化化由於冗餘的資料,在複雜的查詢場景下,可以避免聯合查詢和子查詢,提高查詢的效率 根據業務場景,選擇合適的正規化等級...