A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘闯2 中级黑马   /  2017-12-31 17:11  /  1845 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.3分组
分组查询是指使用group by字句对查询信息进行分组,例如:我们要统计出zhanguw表中所有分类账务的总数量,这时就需要使用group by 来对zhangwu表中的账务信息根据parent进行分组操作。
格式:
SELECT 字段1,字段2… FROM 表名 GROUP BY 字段 HAVING 条件;
分组操作中的having子语句,是用于在分组后对数据进行过滤的,作用类似于where条件。
       
having与where的区别:
having是在分组后对数据进行过滤.
where是在分组前对数据进行过滤
having后面可以使用分组函数(统计函数)
where后面不可以使用分组函数。
        例如:
1. 对账务分种类统计,求出每个种类的账务总金额
SELECT parent,SUM(money) FROM zhangwu GROUP BY parent;

2. 对账务分种类统计,求出每个种类的账务总金额,金额要大于500才显示
SELECT parent,SUM(money)  FROM zhangwu GROUP BY parent HAVING SUM(money)>500;


2.5SQL注入问题
假设有登录案例SQL语句如下:
SELECT * FROM 用户表 WHERE NAME = 用户输入的用户名 AND PASSWORD = 用户输的密码;
此时,当用户输入正确的账号与密码后,查询到了信息则让用户登录。但是当用户输入的账号为XXX 密码为:XXX’  OR ‘a’=’a时,则真正执行的代码变为:
SELECT * FROM 用户表 WHERE NAME = ‘XXX’ AND PASSWORD =’ XXX’  OR ’a’=’a’;
此时,上述查询语句时永远可以查询出结果的。那么用户就直接登录成功了,显然我们不希望看到这样的结果,这便是SQL注入问题。
为此,我们使用PreparedStatement来解决对应的问题。
2.6API详解:预处理对象
使用PreparedStatement预处理对象时,建议每条sql语句所有的实际参数,都使用逗号分隔。
String sql = "insert into sort(sid,sname) values(?,?)";;
PreparedStatement预处理对象代码:
PreparedStatement psmt = conn.prepareStatement(sql)
        常用方法:
2.执行SQL语句:
int executeUpdate(); --执行insert update delete语句.
ResultSet executeQuery(); --执行select语句.
boolean execute(); --执行select返回true 执行其他的语句返回false.
3.设置实际参数
void setXxx(int index, Xxx xx) 将指定参数设置为给定Java的xx值。在将此值发送到数据库时,驱动程序将它转换成一个 SQL Xxx类型值。
例如:
setString(2, "家用电器") 把SQL语句中第2个位置的占位符? 替换成实际参数 "家用电器"

7 个回复

倒序浏览
回复 使用道具 举报
回复 使用道具 举报
闯哥赞赞赞!加油
回复 使用道具 举报
继续努力哦~
回复 使用道具 举报


新年快乐~~~~·
回复 使用道具 举报
温故而知新   加油哦   多多总结
回复 使用道具 举报
新年快乐    继续努力加油哦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马