发表于: 2017-08-26 23:42:43
3 894
今天完成的事情
学习应用JDBC增删改查.
这是连接与结束,后面的增删改查只是SQL语句不一样.
明天的计划,继续补基础,做任务.还有一周的总结.
遇到的问题;
这是SSL的问题 , 不影响使用.
收获;
从师兄帮我解决的小问题开始,这个 id后面如果是+号需要跟上()而且需要两个以上数据组,后面为+号则是单个值.
try 、catch和finally语法
try{
}
try是对程序异常的处理
可以让程序即使有异常也可以运行下去
try{
}catch(Exception e){
}
catch是对异常信息的抓取
可以输出
try{
}catch(Exception e){
}finally{
}
finally无论try和catch是否执行,finally都执行.
数据库的连接是有限资源,相关操作结束后,如果不关闭连接,后面打开连接多的情况下,数据库会炸的,
先关闭Statement
后关闭Connection.
statement专门执行SQL语句,,executeQuery专门执行查询语句,并返回ResultSet.rs..
while(rs.next).next表明询问有没有数据有数据则调用出来.若调取结束则为false.
使用SQL语句判断账号密码正确时,正确方式是调取账号密码从数据库查.错误的方式,把账号密码放内存中比较.
使用Statement 需要进行字符串拼接,可读性和维护性比较差
PreparedStatement 使用参数设置,可读性好,不易犯错
String sql = "insert into hero values(null,?,?,?)
ps.setString(
1
,
"提莫"
);
ps.setFloat(
2
,
313
.0f);
ps.setInt(
3
,
50
);
ps.execute();
Statement执行10次,需要10次把SQL语句传输到数据库端
数据库要对每一次来的SQL语句进行编译处理
for
(
int
i =
0
; i <
10
; i++) {
String sql0 =
"insert into hero values(null,"
+
"'提莫'"
+
","
+
313
.0f +
","
+
50
+
")"
;
s.execute(sql0);
}
s.close();
P
reparedStatement 执行10次,只需要1次把SQL语句传输到数据库端
数据库对带?的SQL进行预编译
网络传输量比Statement更小
数据库不需要再进行编译,相应更快
for
(
int
i =
0
; i <
10
; i++) {
ps.setString(
1
,
"提莫"
);
ps.setFloat(
2
,
313
.0f);
ps.setInt(
3
,
50
);
ps.execute();
假设name是用户提交来的数据
使用Statement就需要进行字符串拼接
拼接出来的语句是:
因为有OR 1=1,这是恒成立的
那么就会把所有的英雄都查出来,而不只是盖伦
如果Hero表里的数据时海量的,比如几百万条,把这个表里的数据全部查出来
会让数据库负载变高,CPU100%,内存消耗光,响应变得极其缓慢
而PreparedStatement使用的是参数设置,就不会有这个问题
任务进度:任务1,步骤17
任务开始时间2017-8-23
任务结束时间2017-9-1
无延期风险
禅道:http://task.ptteng.com/zentao/task-view-9516.html
评论