1. 程式人生 > >ITOO3.1開發問題彙總(一)

ITOO3.1開發問題彙總(一)

        第一次進入ITOO,第一次見識到整個架構,光搭建環境就出現了很多錯誤,5個人中3個為新手的我們,著實費了不少功夫,之後進入開發亦是如此。但總得有這個過程,我們在錯誤中長大,才更加茁壯。但過了一個階段必須對以前進行總結,顆粒歸倉。否則過一段時間就會忘掉,流失了。這次主要看一下跟資料庫相關的知識。

第1個問題:作為基礎系統的一員,給其他系統提供必要的資料是必不可少的。但是總不能一條一條的插入吧?即使用sql語句也是如此。經過一番努力,成功找到一個方法:     ① 先建立一個儲存過程(使用Navicat連結的MySql,建立了1000條) 
  1. DROP PROCEDURE
  2. IF EXISTS insert_courseInfo
    ;
  3. DELIMITER ;
  4. CREATE PROCEDURE insert_courseInfo ()
  5. BEGIN
  6. DECLARE
  7. i INT DEFAULT 0;
  8. WHILE i <1000 DO
  9. INSERT INTO `itoo_platform`.`tb_courseinfo`(
  10. `id`,
  11. `comment`,
  12. `operator`,
  13. `versionEndTime`,
  14. `versionStartTime`,
  15. `isDelete`,
  16. `remark`,
  17. `classHour`,
  18. `classPoint`,
  19. `courseCode`,
  20. `courseName`,
  21. `courseTypeId`,
  22. `institutionId`
  23. )
  24. VALUES
  25. (
  26. CONCAT('23', i),
  27. '吳利昌新增',
  28. '吳利昌',
  29. '2015-07-06 15:49:28',
  30. '2015-07-06 15:49:37',
  31. '0',
  32. '吳利昌新增',
  33. '18',
  34. '4',
  35. CONCAT('05', i),
  36. '材料化學',
  37. '1',
  38. '2'
  39. );
  40. SET i = i +1;
  41. END
  42. WHILE ;
  43. END
    ② 然後新建一個查詢,呼叫該儲存過程
  1. CALL insert_courseInfo();
③ 執行時間(1000條資料)
CALL insert_courseInfo();
Affected rows: 1
Time: 42.112s
④ 執行結果
    其實主要是對CONCAT函式的使用,它可以將字串與數字進行結合,非常方便。
    第2個問題:刪除一條資料之後進行有條件分頁模糊查詢的時候還能查出來,無條件查詢則不會查出來。底層方法應該沒問題,但仔細看了看我的有條件分頁模糊查詢也沒啥問題。通過把原始碼下載下來,逐步跟蹤,終於發現了問題所在:
    1. 我現在的程式碼
        1. pageEntity.setSelectContent("p.institutionId,p.id,p.institution.institutionName,p.remark,p.maxPeople,p.professionalCode,p.professionalName");
        2. pageEntity.setSelectWhere("p.professionalName like '%"+ conditions
        3. +"%' or p.institution.institutionName like '%"+ conditions
        4. +"%' or p.professionalCode like '%"+ conditions +"%' or p.remark like '%"+conditions+"%'");
    2. 生成的sql語句
        1. SELECT p.institutionId,p.id,p.institution.institutionName,p.remark,p.maxPeople,p.professionalCode,p.professionalName FromProfessional p where p.isDelete =0and p.professionalName like '%化學%'or p.institution.institutionName like '%化學%'or p.professionalCode like '%化學%'or p.remark like '%化學%'
    3. 問題:
      1. 注意生成的sql語句中where後面的條件,and與後面的or應該為一個查詢條件,而這條sql語句將會分為兩個條件:or和and,這樣查出來的資料肯定會查出來isDelete為1的情況。
    4. 解決方法
      1. 應該給and後面的條件加上括號:(),在程式碼中的setSelectWhere中字串用括號()括起來
        1. pageEntity.setSelectContent("p.institutionId,p.id,p.institution.institutionName,p.remark,p.maxPeople,p.professionalCode,p.professionalName");
        2. pageEntity.setSelectWhere("(p.professionalName like '%"+ conditions
        3. +"%' or p.institution.institutionName like '%"+ conditions
        4. +"%' or p.professionalCode like '%"+ conditions +"%' or p.remark like '%"+conditions+"%')");
    5. 另外一個問題
      1. 由於底層已經寫上了isDelete=0的查詢條件,而且跟著and關鍵字,如果 setSelectWhere中的內容不寫的話,sql語句會報錯的。。。寫上的話,生成的sql語句會有兩個isDelete=0...底層方法封裝還是有些不完美~不過已經相當不錯了,更多的時候我們直接即可,非常方便。
    遇到問題不怕,怕的是一直困在一個思路上,一旦鑽了牛角尖,不僅浪費大量的時間,也很影響專案的進展。所以,要給自己規定一定的時間,比如1個小時,如果做不出來就儘快找人。在時間如此緊張的情況下,學習需要放到次席。