我是楼主,我说的不太清楚,请原谅 重复下问题: 1: 一数据表中,name为字段,如何求出所有重复的name数据 我想的答案:select * from table where ? (如何求出重复的name所有数据) 2:动态编译和预编译各自的优劣势 从书上看来的,也许大家叫的都不一样 动态编译:sql="update user set username='"+username+"',password='"+password+"'"; 预编译:sql="update user set username=?,password=?"; 请说说他们用法的优劣势,谢谢
1.要求重复的啥数据 分组出来了 具体再细分 select * from table group by name2.前者组串比较麻烦 尤其是在变量比较多的情形
1.select * from table group by name having count(*)>1 2.动态编译(使用Statement)的缺点是速度和安全性不如预编译(使用PreparedStatement)好 一般来说建议使用预编译的
动态容易被黑sql语句黑。是吧。。
jf1.select * from table where name=?2.动态编译和预编译不太懂
一数据表中,如何求出所有重复的name数据 select t1.* from student t1 , student t2 where t1.name=t2.name
一数据表中,如何求出所有重复的name数据 (补充一下)select t1.* from student t1 , student t2 where t1.name=t2.name and t1.id <> t2.id
select * from table group by name having count(*)> 1 是name>1吧?
SELECT username, password FROM user WHERE username = '" + usernaem + "' AND password = '" + password + "'";当username为任何字符,password为' OR '1=1时,变为SELECT username, password FROM user WHERE username = 'aaa' AND password = '' OR '1=1';
而使用 SELECT username, password FROM user WHERE username = ? AND password = ? 时就不会产生这种情况。PreparedStatement属于预编译语句,由数据库管理系统完全语法解释和编译后再填充参数的,数据库管理系统会把一些预编译过的SQL语句缓存起来,以便于下次使用。而Statement属于填充参数后交与数据库系统编译的,每次的SQL就有可能不一样,这样不能达到缓存的需要,也没有办法进行重用。还有,使用“+”拼接字符串时的运行效率是极其低下的,如果参数少的话没有什么大碍,但是参数越多,运行效率是个问题,还有就是无数的单引号双引号会增加调试错误的难度,而且也很容易出错。PreparedStatement就没有这种问题,采用参数编号的方式进行填充,SQL中基本上看不到单引号,在调试和书写时都是很方便的。建议,放弃使用Statment,使用它子类PreparedStatement。
类似的,.Net平台有API可以控制编译本身的SDK。
我是楼主,我说的不太清楚,请原谅
重复下问题:
1: 一数据表中,name为字段,如何求出所有重复的name数据
我想的答案:select * from table where ? (如何求出重复的name所有数据)
2:动态编译和预编译各自的优劣势
从书上看来的,也许大家叫的都不一样
动态编译:sql="update user set username='"+username+"',password='"+password+"'";
预编译:sql="update user set username=?,password=?";
请说说他们用法的优劣势,谢谢
select * from table group by name2.前者组串比较麻烦 尤其是在变量比较多的情形
2.动态编译(使用Statement)的缺点是速度和安全性不如预编译(使用PreparedStatement)好
一般来说建议使用预编译的
from student t1 , student t2
where t1.name=t2.name
from student t1 , student t2
where t1.name=t2.name and t1.id <> t2.id
是name>1吧?
SELECT username, password FROM user WHERE username = ? AND password = ?
时就不会产生这种情况。PreparedStatement属于预编译语句,由数据库管理系统完全语法解释和编译后再填充参数的,数据库管理系统会把一些预编译过的SQL语句缓存起来,以便于下次使用。而Statement属于填充参数后交与数据库系统编译的,每次的SQL就有可能不一样,这样不能达到缓存的需要,也没有办法进行重用。还有,使用“+”拼接字符串时的运行效率是极其低下的,如果参数少的话没有什么大碍,但是参数越多,运行效率是个问题,还有就是无数的单引号双引号会增加调试错误的难度,而且也很容易出错。PreparedStatement就没有这种问题,采用参数编号的方式进行填充,SQL中基本上看不到单引号,在调试和书写时都是很方便的。建议,放弃使用Statment,使用它子类PreparedStatement。
类似的,.Net平台有API可以控制编译本身的SDK。
select * from table where num in
(
select max(num) from table
group by name
)第二个问题我就不知道了