经常遇见的问题的总结
String转整型
parseInt ( cString )从字符串cString非空字符开始转换得到的整数,遇到小数点或其他0-9外的字符就停止,如“-1234a”,“-1234.0”都将返回 -1234;如果除第一个符号外一个0-9字符都不是,将返回NaN,如“-a”、“abc”等;
Number( cString )从字符串cString转换得到的数字,包括Int和Float类型,如:“-123”返回-123,“123”和“00123”都返回 123,“234。56”返回234。56等。cString必须是合法的数字串,否则返回NaN;如“.123”、“1.23.45”、 “–123”、“123a”都返回NaN.在js中转换变量为整型的时候最好用Number.- java中对于String的判空:
判断一个字符串是否为空首先就要确保他不是null然后再判断他的长度。
String str = xxx; if(str != null && str.length() != 0) { return true; }
//1. 直观,效率低 if(s == null || s.equals("")){ } //2. 比较字符串长度, 效率高。 if(s == null || s.length() <= 0); //3. Java SE 6.0才开始提供的方法,效率和方法二几乎相等 if(s == null || s.isEmpty()); }
- js中判断为空:
//1. 判断undefined: if (typeof(tmp) == "undefined"){ alert("undefined"); //说明:typeof 返回的是字符串,有六种可能:"number"、"string"、"boolean"、"object"、"function"、"undefined" //2. 判断null: if (!tmp && typeof(tmp)!="undefined" && tmp!=0){ alert("null"); //3. 判断NaN: var tmp = 0/0; if(isNaN(tmp)){ alert("NaN"); //说明:如果把 NaN 与任何值(包括其自身)相比得到的结果均是 false,所以要判断某个值是否是 NaN,不能使用 == 或 === 运算符。 //提示:isNaN() 函数通常用于检测 parseFloat() 和 parseInt() 的结果,以判断它们表示的是否是合法的数字。当然也可以用 isNaN() 函数来检测算数错误,比如用 0 作除数的情况。 //4. 判断undefined和null: var tmp = undefined; if (tmp== undefined) { alert("null or undefined"); 说明:null==undefined // 5. 判断undefined、null与NaN: var tmp = null; if (!tmp) { alert("null or undefined or NaN"); //提示:一般不那么区分就使用这个足够。
bug描述:页面上drop down list控制旁边图片的改变。(在一个div中),当这个div的height超出1000,angularjs的指令会把它收缩起来。但是判断高度的代码('#tab-height').height()要等图片加载好才能获得正确的高度。问题就来了。怎样确保图片加载好再执行呢?我使用timeout,可以指定等待加载的时间
但是这个图片的加载跟网速有关的。有时可能会比较慢。 timeout也不能确保。我使用image的onload方法。传入图片的url,但是其他页面也用了这个指令的,不能每次都要传入图片的url撒。用angularjs的 interval 时间设置100(ms),let images = $(‘#tab-height img’); 循环图片 直到img.complete 再加上if (typeof myimage.naturalWidth != “undefined” && img.naturalWidth == 0) 判断图片是否加载好!function waitImagesLoaded(callback){ let images = $('#tab-height img'); let timer = $interval(function(){ let isLoaded = true; for(let i=0; i<images.length; i++){ let img = images[i]; if (!img.complete) { isLoaded = false; break; } if (typeof img.naturalWidth != "undefined" && img.naturalWidth == 0) { isLoaded = false; break; } } if(isLoaded){ callback(); $interval.cancel(timer); } }, 100) }
(图片完全加载好了才能判断的)
双管齐下确保图片加载好。if(isLoaded){ callback();//调用闭包函数 就是获得图片高度的代码 还有验证逻辑啥的 $interval.cancel(timer);//关闭interval }//双击666
记一次提交代码出现的幺蛾子,到处都是坑啊!!!改好代码之后我熟练地add commit。再review的时候出现这个幺蛾子:
要先git fetch一下。取下远程的分支的改动。再review就可以了!(想不通这里,我在commit之后明明pull –rebase过,为啥还要再去git fetch一下。)
还有一次,页面的效果和QA的不一样,但是明明感觉我们的代码都应该是一样的啊,也是pull过master上的代码了。后面git fetch了一下后再pull,有没得问题了!
修改commit的message:
不需要有代码的改动,直接commit –amend,按Insert键进去编辑模式。改好后Esc键回到命令模式。:wq保存并退出。:q!只退出不保存!
JQuery实现动态的回滚到表单验证出错的地方。
假如我们需要去定位一个动态生成的div,我们需要为它指定一个动态的id,例如:
前台使用EL进行迭代LIST生成div,为其添加动态的id,生成之后变成下面样式
我们在使用Jquery获取某个div时需要这样写$("#" + 所定义的id变量名);而不能写成这样$(“#所定义的id变量名”);function invalidDOB(isInvalidDOB) { for(let i in isInvalidDOB){ //获取input前面label标签到页面顶部的距离 let topPos = $("#"+"DOBLabel_"+i).offset().top; if(isInvalidDOB[i]){ //屏幕滚动到label标签 window.scrollTo(0, topPos); return false; } } return true; }
在把maven工程导入idea的时候出现了问题,
红框内会出现项目的子项目 而且全都是红色,会有一些的错误的提示信息,
The following directories are registered as VCS roots
VCS root configuration problems 等等 搞了半天 各种谷歌百度都不行了。
后面把哪些红色的子项目 选中 点击右上角的减号按钮 然后点OK就可以了,当然还要把项目对应的CVS改成git。- java中对于String的判空:
项目环境是springmvc和mybatis,出现了这面这样的错误,
这是因为有mybitis 的xml文件
namespace=”cn.migu.music.dao.mybatis.MiguMusicianRankDao”>
命名空间重复了。可能在复制粘贴的时候忘记改了。
WriteNullStringAsEmpty 可以把返回的对象中的null change to “”
但是这里我看到网上很多都说WriteMapNullValue要和WriteNullStringAsEmpty连起来使用时能生效哦。
取数据库表里的相同字段的第一行数据,需求是做一个连表查询,查询出所有的歌曲,歌曲里要有专辑的信息,歌曲和专辑竟然是多对多的关系,我也是醉了,也就是说同一首歌曲还可能收藏在几张专辑里面。问题如下:
SELECT
(
SELECT
COUNT (ID)
FROM
VOTE_COMMON V
WHERE
A .MUSIC_ID = V.TARGET_ID
AND TARGET_TYPE = ‘40001’
AND V.ACTIVITY_ID = 47
) VOTECOUNT,
(
SELECT
WM_CONCAT (
T .ARTIST_ID || ‘:’ || T .ARTIST_NAME
)
FROM
MUSIC_R_ARTIST MR,
ARTIST T
WHERE
A .MUSIC_ID = MR.MUSIC_ID (+)
AND MR.ARTIST_ID = T .ARTIST_ID
AND MR.ARTIST_TYPE = 1
) ARTIST_ID,
A .*, b.album_name,
b.album_id,
CASE
WHEN b.small_pic LIKE ‘http%’ THEN
b.small_pic
ELSE
(
SELECT
T .small_pic
FROM
artist T,
music_r_artist ma
WHERE
ma.music_id = A .MUSIC_ID
AND T .artist_id = ma.artist_id
AND T .artist_type = 1
AND ROWNUM = 1
)
END SMALL_PIC,
CASE
WHEN b.medium_pic LIKE ‘http%’ THEN
b.medium_pic
ELSE
(
SELECT
T .medium_pic
FROM
artist T,
music_r_artist ma
WHERE
ma.music_id = A .MUSIC_ID
AND T .artist_id = ma.artist_id
AND T .artist_type = 1
AND ROWNUM = 1
)
END MEDIUM_PIC,
CASE
WHEN b.large_pic LIKE ‘http%’ THEN
b.large_pic
ELSE
(
SELECT
T .large_pic
FROM
artist T,
music_r_artist ma
WHERE
ma.music_id = A .MUSIC_ID
AND T .artist_id = ma.artist_id
AND T .artist_type = 1
AND ROWNUM = 1
)
END LARGE_PIC,
(
SELECT
mv_id
FROM
MV_R_MUSIC
WHERE
music_id = A .music_id
AND ROWNUM = 1
) mv_id,
CASE
WHEN (
SELECT
mv_id
FROM
MV_R_MUSIC
WHERE
music_id = A .music_id
AND ROWNUM = 1
) IS NOT NULL THEN
1
ELSE
0
END hasMv,
CASE
WHEN (
SELECT
mv_id
FROM
MV_R_MUSIC
WHERE
music_id = A .music_id
AND ROWNUM = 1
) IS NOT NULL THEN
(
SELECT
copyright_Id
FROM
MUSIC_R_COPYRIGHT T,
MV_R_MUSIC c
WHERE
T .music_id = A .music_id
AND c.music_id = A .music_id
AND ROWNUM = 1
)
ELSE
NULL
END mvCopyrightId
FROM
music A,
album b,
ALBUM_R_MUSIC c,
vote_common v
WHERE
A .MUSIC_ID = c.music_id (+)
AND A .MUSIC_ID IN (‘1000096675’, ‘4428971’)
AND c.album_id = b.ALBUM_ID
AND A .status (+) = 1
AND B.status (+) = 1
AND ROWNUM < 20
因为跟专辑表的多对多的关系 导致查歌曲 出现了重复的记录 当时想了很久解决这个问题,主要是连专辑表出现的问题,那么我想在专辑表里把所有的相同的music_id都只取第一条 单独成一个子查询,这样再和music表连表的话就不得出现重复的歌曲记录了。
SELECT
B.ALBUM_ID,B.ALBUM_NAME,
(
SELECT
COUNT (ID)
FROM
VOTE_COMMON V
WHERE
A .MUSIC_ID = V.TARGET_ID
AND TARGET_TYPE = ‘40001’
AND V.ACTIVITY_ID = #{activityId}
) VOTECOUNT,
(
SELECT
to_char(WM_CONCAT (
T .ARTIST_ID || ‘:’ || T .ARTIST_NAME
))
FROM
MUSIC_R_ARTIST MR,
ARTIST T
WHERE
A .MUSIC_ID = MR.MUSIC_ID (+)
AND MR.ARTIST_ID = T .ARTIST_ID
AND MR.ARTIST_TYPE = 1
) ARTIST_ID,
A .*, CASE
WHEN B.MEDIUM_PIC LIKE ‘http%’ THEN
B.MEDIUM_PIC
ELSE
(
SELECT
T .MEDIUM_PIC
FROM
ARTIST T,
MUSIC_R_ARTIST MA
WHERE
MA.MUSIC_ID = A .MUSIC_ID
AND T .ARTIST_ID = MA.ARTIST_ID
AND T .ARTIST_TYPE = 1
AND ROWNUM = 1
)
END MEDIUM_PIC,
CASE
WHEN B.SMALL_PIC LIKE ‘http%’ THEN
B.SMALL_PIC
ELSE
(
SELECT
T .SMALL_PIC
FROM
ARTIST T,
MUSIC_R_ARTIST MA
WHERE
MA.MUSIC_ID = A .MUSIC_ID
AND T .ARTIST_ID = MA.ARTIST_ID
AND T .ARTIST_TYPE = 1
AND ROWNUM = 1
)
END SMALL_PIC,
CASE
WHEN B.LARGE_PIC LIKE ‘http%’ THEN
B.LARGE_PIC
ELSE
(
SELECT
T .LARGE_PIC
FROM
ARTIST T,
MUSIC_R_ARTIST MA
WHERE
MA.MUSIC_ID = A .MUSIC_ID
AND T .ARTIST_ID = MA.ARTIST_ID
AND T .ARTIST_TYPE = 1
AND ROWNUM = 1
)
END LARGE_PIC,
(
SELECT
MV_ID
FROM
MV_R_MUSIC
WHERE
MUSIC_ID = A .MUSIC_ID
AND ROWNUM = 1
) MV_ID,
CASE
WHEN (
SELECT
MV_ID
FROM
MV_R_MUSIC
WHERE
MUSIC_ID = A .MUSIC_ID
AND ROWNUM = 1
) IS NOT NULL THEN
1
ELSE
0
END HASMV,
CASE
WHEN (
SELECT
MV_ID
FROM
MV_R_MUSIC
WHERE
MUSIC_ID = A .MUSIC_ID
AND ROWNUM = 1
) IS NOT NULL THEN
(
SELECT
COPYRIGHT_ID
FROM
MUSIC_R_COPYRIGHT T,
MV_R_MUSIC C
WHERE
T .MUSIC_ID = A .MUSIC_ID
AND C.MUSIC_ID = A .MUSIC_ID
AND ROWNUM = 1
)
ELSE
NULL
END MVCOPYRIGHTID
FROM
MUSIC A,
(
SELECT
TEMP.*
FROM
(
SELECT
C.MUSIC_ID,
B.MEDIUM_PIC,
B.ALBUM_ID,
B.ALBUM_NAME,
B.LARGE_PIC,
B.SMALL_PIC,
B.STATUS,
ROW_NUMBER () OVER (
PARTITION BY C.MUSIC_ID
ORDER BY
NVL (B.MEDIUM_PIC, 0) DESC
) AS ROW_FLG
FROM
ALBUM B,
ALBUM_R_MUSIC C
WHERE
C.ALBUM_ID = B.ALBUM_ID
) TEMP
WHERE
TEMP.ROW_FLG = ‘1’
AND TEMP.MUSIC_ID IN (‘1000096675’, ‘4428971’)
) B
WHERE
A .MUSIC_ID = B.MUSIC_ID
AND A .STATUS = 1
AND B.STATUS = 1
这样果然就没得重复的了。
在case when里面不能写ORDER BY
n.vote_date DESC
CASE
WHEN (
SELECT
n. ID
FROM
VOTE_COMMON n
WHERE
n.mobile = ‘004f6159-91bf’
AND n.activity_id = 47
AND n.target_id = a.music_id
and n.target_type = 40001
AND TO_CHAR (
n.vote_date,
‘yyyy-mm-dd HH24:MI:SS’
) > TO_CHAR (
SYSDATE - 1,
‘yyyy-mm-dd HH24:MI:SS’
)
ORDER BY
n.vote_date DESC
) IS NOT NULL THEN
1
ELSE
0
END canVote,
莫名其妙的错误 [Err] ORA-00936: missing expression
tomcat启动突然很慢的解决办法:
解决办法是: 1、去掉debug时的断点
2、将tomca下的项目移除
3、将tomcat目录下的work目录删除
4、将需要启动的项目重新添加到tomcat,启动时间恢复正常(二十多秒