2007-05-13

补: autoboxing

网上搜NPE,发现了别人跟我碰到同样的问题.这些人还建议不要用autoboxing. 有句倒说的很到位:The root cause of the NPE-related weirdness is that Java doesn't distinguish between pointers and "pointers that can be null". 这也应该是autoboxing问题的根源。

P.S. NPE=NullPointerException(看来这个异常很常见呢)

2007-03-25

java.sql.SQLException: java.lang.NegativeArraySizeException

有段java程序, 通过jdbc调用mysql的
在执行分页查询的时候, 如果是这么写:
select * from orders limit 1, 30;//第一页的30条
没有任何问题.但是把它放到存储过程里(参见前一篇文章), 就会出那个exception,只要是页不满的情况都会报exception.但是有个特别的现象, 如果你把orders表清空, 然后执行java, 不会报错, 只有当行数大于某个值并且页不满才会报Exception.

非常不明白....
相对详细的代码在这:link

2007-03-24

myeclipse差劲

除了它集成的那几个Eclipse Foundation的项目外, 基本上都很差.
特别是UML, 当初看着感觉还不错, 用着问题就出来了: 不能识别泛型, 不能导入类, 删除类/关系删不干净, 生成的代码错误百出.最要命的是它还搞罢工, 本来就是serialize的object, 出点问题就死翘翘了.慎用....非常不稳定

mysql的分页存储过程

一般的分页面可以这样直接写在sql里面:

select * from test limit 3, 20;

表示每页显示20个, 第3页.这种写法不能通过PreparedStatement执行, 因为它是编译过的, 存储过程同理.所以这样写不会成功:

create procedure pager (in pno int, in psize int)
begin
declare pp int default 0;
set pp = (pno - 1) * psize;
select * from pager limit pp, psize;
end

应该算是mysql的bug.

有个折衷的办法:

create procedure pager (in _pno int, in _psize int)
begin
prepare stmt from "select * from test limit ?,?";
set @pno = (_pno - 1) * _psize;
set @psize = _psize;
execute stmt using @pno, @psize;
end

link, link

2007-03-22

autoboxing的bug么?

碰到这么个问题:

Double d = null;
double e = d;
System.out.println(e);

这会出问题, d不能自动autounboxing为double.会报nullPointer异常.
所以在做ibatis映射的时候, bean的属性需要是Double类型的.否则会有不必要的问题.
失望....

2007-03-15

dbdesigner不能连mysql的问题.

dbdesigner连mysql老报错:
cannot connect to mysql : invalid username/password

把password在mysql中更新一下就好了:
mysql> set password for 'root'@'localhost' =OLD_PASSWORD('newpassword');
一个与老版本兼容的问题, link

2007-03-13

目前Ajax主要存在的问题

  • Accessibility问题。
  • 主要开源框架(prototype和dojo)文档不足。
  • 缺乏好的跨域机制。XMLHttpRequest不行,Doug Crockford的JSONRequest不错,但是很难被微软采纳。
  • 跨浏览器编程仍然非常麻烦。
  • 对Comet (HTTP Streaming) 的重要性仍然认识不足。