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

© 刘闯2 中级黑马   /  2017-12-28 21:53  /  1600 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

JDBC开发步骤
1.注册驱动.告知jvm使用的是哪一个数据库的驱动
2.获得连接.使用jdbc中的类完成对mysql的连接,tcp效率低下
3.获得语句执行平台.通过连接对象获得sql语句的执行者对象
4.执行sql语句.使用执行者对象,向数据库执行sql语句,获取到数据库执行后的结果
5.处理结果.
6.释放资源.一堆close();
1.2聚合
之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个单一的值;另外聚合函数会忽略空值。
今天我们学习如下五个聚合函数:
count:统计指定列不为NULL的记录行数;
sum:计算指定列的数值和,如果指定列;
max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串类型不是数值类型,那么计算结果为0排0序运算;
min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;

例如:
1. 统计账务表中共有多少条记录
SELECT COUNT(*) FROM zhangwu;
       
2. 统计账务表中金额大于3000的有多少条记录
SELECT COUNT(*) FROM zhangwu WHERE money>3000;
       
3. 统计有多少收入的账务信息
SELECT SUM(money) FROM zhangwu WHERE name like '%收入%';

4. 统计出记录中支出的平均值
SELECT AVG(money) FROM zhangwu where name like '%支出%';
       
5. 统计出商品表中收入的最大与最小值
SELECT MAX(money),MIN(money) FROM zhangwu;

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个位置的占位符? 替换成实际参数 "家用电器"

6 个回复

倒序浏览
闯哥棒棒哒~~~
回复 使用道具 举报

总结很不错哟~继续加油
回复 使用道具 举报
总结很不错哟~继续加油
回复 使用道具 举报
保持,继续努力哦~
回复 使用道具 举报
新年快乐~~~~·
回复 使用道具 举报
成功不是“一朝一夕”的事,需要的是“一如既往”的坚持,“一成不变”的乐观,“一门心思”的奋斗,“一鸣惊人”的能力,“一丝不苟”的态度,只有这样,2018你才能取得“一飞冲天”的骄人成绩。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马