2008-05-14

XXXX

关键字: 应届生!
XXXX
评论
zhangsheng79 2008-05-14
yefeng 写道
zhangsheng79 写道
抛出异常的爱 写道
还有种东西叫

PreparedStatement

PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
SET SALARY = ? WHERE ID = ?");
pstmt.setBigDecimal(1, 153833.00)
pstmt.setInt(2, 110592)

搂主说的是"a"+"b"拼string,不断产生string对象的问题,和sql怎么执行没关系吧


string 拼SQL ,本来就产生了2种问题
1.string对象问题,如果"+",不多的话,跟stringbuffer是差不多的,没有明显的性能问题的
2.SQL注入问题

拜托你仔细看lz的帖子了吗?人家已经说了连续20多行,还不多吗?其次,这样连续加也可以是ps的方式
kjhot 2008-05-14
王贵伟 写道
String s="XXX"+id

编译器自动优化成StringBuffer,不要老拿这个说事啦,真正有问题的是:
String s += "123";
if(e) {s += "456";}

这样分成多条语句append,可能有逻辑判断的情况。
Readonly 2008-05-14
StringBuffer??
您真的不知道PreparedStatment么?

偶看不能原谅的是楼主你自己吧...
javaxy 2008-05-14
求标准答案SQL到底怎么写?哈哈!
7thbyte 2008-05-14
一般情况下的简单"XX"+"XX"+"XX"在JDK5以后已经优化过了

但是跨循环的连加往往不能被编译器识别并优化。所有时候都用StringBuffer也无可厚非。

另外连加的致命问题是注入
colin4k 2008-05-14
刑天战士 写道
我貌似反编译过,然后发现就是那种StringBuilder的形式,我手头没有jdk 5.0,谁试一下

嗯,是这样的
yefeng 2008-05-14
zhangsheng79 写道
抛出异常的爱 写道
还有种东西叫

PreparedStatement

PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
SET SALARY = ? WHERE ID = ?");
pstmt.setBigDecimal(1, 153833.00)
pstmt.setInt(2, 110592)

搂主说的是"a"+"b"拼string,不断产生string对象的问题,和sql怎么执行没关系吧


string 拼SQL ,本来就产生了2种问题
1.string对象问题,如果"+",不多的话,跟stringbuffer是差不多的,没有明显的性能问题的
2.SQL注入问题
zhangsheng79 2008-05-14
抛出异常的爱 写道
还有种东西叫

PreparedStatement

PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
SET SALARY = ? WHERE ID = ?");
pstmt.setBigDecimal(1, 153833.00)
pstmt.setInt(2, 110592)

搂主说的是"a"+"b"拼string,不断产生string对象的问题,和sql怎么执行没关系吧
Feiing 2008-05-14
投了精华 以示后人 恩恩
刑天战士 2008-05-14
我貌似反编译过,然后发现就是那种StringBuilder的形式,我手头没有jdk 5.0,谁试一下
colin4k 2008-05-14
刑天战士 写道
我记得5.0里面好像能自动完成String+String的优化,用StringBuilder,可能我记错了,我1年多没用java了……

自动完成String+String的优化和StringBuilder是两回事
upheart 2008-05-14
有些“高手”总是喜欢拿性能说事儿……new StringBuffer("select * from user where user_id=").append("'").append(userId).append("'")……呵呵
刑天战士 2008-05-14
我记得5.0里面好像能自动完成String+String的优化,用StringBuilder,可能我记错了,我1年多没用java了……
Feiing 2008-05-14
我们能否原谅做企业应用的人居然不知道不能拼 sql 是因为  sql injection, 而不是所谓 String + String 的性能问题 ?

引用

我很理解 lz 这些人 ,尤其那些小公司,没有入职培训,没有比较系统的接受指导,直接进入开发,他们的代码思维还是在书本和老师那里学的,所以会出现这么弱的失误。这也是为什么象华为,东软这些大公司出来的人一般的公司比较喜欢,因为他们正式工作多会有3个月左右的系统培训,会改掉他们很多书本毛病。
gigix 2008-05-14
抛出异常的爱 写道
还有种东西叫

PreparedStatement

PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
SET SALARY = ? WHERE ID = ?");
pstmt.setBigDecimal(1, 153833.00)
pstmt.setInt(2, 110592)

或者这个
PreparedStatement pstmt = con.prepareStatement("SELECT * FROM Users WHERE name = ?");
pstmt.setString(1, "bad_user'; UPDATE EMPLOYEES SET SALARY = 1000000;");
抛出异常的爱 2008-05-14
还有种东西叫

PreparedStatement

PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
SET SALARY = ? WHERE ID = ?");
pstmt.setBigDecimal(1, 153833.00)
pstmt.setInt(2, 110592)
gigix 2008-05-14
王贵伟 写道
我在刚开发的时候所有的SQL都是用的String拼写,因为书上就那么教的,老师也是这么教的,后来看到同事的代码才知道StringBuffer,其实在很多小公司还在用String写SQL。

那个…有种东西叫prepared statement,是可以防御SQL注入的…拼String的问题并不是性能问题…
王贵伟
搜索本博客
最近加入圈子
存档
最新评论