您的位置:首页 > 其它

工作中遇到的小问题及总结

2009-02-26 12:54 281 查看
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;

这样也就不用这么痛苦了...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: