工作中遇到的小問題及總結

 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;

這樣也就不用這麼痛苦了...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章