1. snprintf 函数 格式化的问题
char buf[256]={0};
std::string name("wangxu");
snprintf(buf,255,"My name is %s",name.c_str());//红色部分如果该为直接用name再运行时刻会抛出异常
2.Mysql语句对关键字作为字段的问题
比如 lock ,password是Mysql中的关键字,如果用lock,password作为表table1的字段名
而sql语句写成这样: select lock,password from table1;是错的
可以隐藏关键字,比如改为: select table1.lock,table1.password from table1;
或者: select T.lock,T.password from table1 T; --T做未table表的别名
3.试用Mysql中的时间函数问题,比如 select hour("2009-02-12 02:00:00"); 返回的64位的整数,如果使用32位去接收就会发现错位的情况:比如
select hour(start_time),hour(end_time) from table2;
假设本来应该接收的应该是2,3
而你用两个32位的整数去接收的话,而你可能接收到的就是2,0,3为什么是三个呢,呵呵.....
sql中此类函数很多,像count(),需要自己运用当中注意
4.写这一条sql语句,如果表中有某人(以id作为唯一标识)的信息则什么都不做,如果没有此人的信息则添加此人的信息到表中
insert into table1(id,name) values(1,'zhangsan') on duplicate key update id=values(id);--id为主键
跟新插入多条时:
insert into table1(id,name) values(1,'zhangsan'),(2,'lisi') on duplicate key update id=values(id);
5.同时插入多条不同的记录数据
insert into table1(id,name) values(1,'zhangsan'),(2,'lisi');
6.同时查询多条满足不同条件的记录数据(如果是双或者多主键可以 and or 结合起来)
select id,name from table1 where id=1 or id =2;
或者(下面table1和table2可以相同也可以不相同,但是必须在一个数据库中)
select id,name from table1 where id=1 union select id,name from table2 where id=2;
7.同时更新满足不同条件的记录数据(table1和table2可以相同也可以不相同,但是必须在一个数据库中)
update table1 t1,table2 t2 set t1.name='lisi',t2.name='zhangsan' where t1.id=1 and t2.id=2;
8.一个二级指针作为默认参数的问题
template<typename T>
void fun(T a, T b ,T **p=NULL)
{
......
if((*p) != NULL) //此处判断的是一级指针是否为空,而默认参数确实二级指针指向的为空,并没有指定一级指针
//应该改为
if(p != NULL)
{
....
}
.......
}
9.关于typedef
最近提了个需求,要求把原来32个字节的角色名长度改为64个字节,这下是好了,没办法得一个一个找:
char playerName[32];
如果当时做成
typedef char PLAYERNAME[32];
PLAYERNAME playerName;
这样也就不用这么痛苦了...