《Java技术》第八次作业
(一)学习总结
1.用思维导图对本周的学习内容进行总结。
2.通过实验内容中的具体实例说明在执行executeUpdate()方法和executeQuery()方法中使用动态参数时,为什么要使用PreparedStatement接口而不使用Statement,比较使用两种接口的不同之处。
- 使用PreparedStatement执行executeUpdate()方法和executeQuery()时,数据库系统会对sql语句进行预编译处理,预处理语句将被预先编译好,这条预编译的sql查询语句能在将来的查询中用,它比Statement对象生成的查询速度更快,可以用“?”作为所有动态参数的占位符。例如:
String sqlStr = "insert into student(Sno,Sname) values(?,?)"; //预编译sql语句
PreparedStatement pstmt = conn.prepareStatement(sqlStr);
pstmt.setString(1,no); //给占位符所在的变量赋值
pstmt.setString(2,name);
int len = pstmt.executeUpdate(); //执行语句更新
- PreparedStatement比 Statement 更快,使用 PreparedStatement 最重要的一点好处是它拥有更佳的性能优势,SQL语句会预编译在数据库系统中。执行计划同样会被缓存起来,它允许数据库做参数化查询。使用预处理语句比普通的查询更快,因为它做的工作更少(数据库对SQL语句的分析,编译,优化已经在第一次查询前完成了)。
3.其他需要总结的内容。
- DAO设计模式
客户层(Client):现在采用B/S开发架构,一般使用浏览器进行访问。
显示层(JSP/Servlet):使用JSP/Servlet进行页面效果的显示
业务层(BO,Business Object,业务对象):会将多个原子性的DAO操作进行组合,组合成一个完整的业务逻辑。
数据层(DAO):提供多个原子性的DAO操作,例如:增加、修改、删除等,都属于原子性的操作。
资源层(DataBase):主要是数据库的操作层,可以进行各种的数据存储。
(二)实验总结
实验内容:
使用JDBC实现实验七的宠物商店
完成实验内容,代码上传到码云,注意,务必将创建数据库的脚本文件随项目文件一起上传,在随笔中分析程序设计思路,用PowerDesigner画出类图结构,并对完成实验内容过程中遇到的问题、解决方案和思考等进行归纳总结,注意代码中必须有必要的注释。
- 将原有的database库删除,创建新的db包,用来连接数据库,修改service方法,把sql作为查询修改添加的条件。
- 实验问题分析:
问题1:输入年龄和数量后,显示错误
原因:text框的位置放置错误
解决方案:改正text的位置
问题2:出现数据库与当前文件中数据库不一致的问题,导致插入数据混乱
解决方案:查阅百度后发现,刷新可以解决。。。。
问题3:出现空指针异常
原因:在使用用户购买功能的时候,无论如何是否有这个编号,都会购买成功,从而创建了一个空的宠物对象,存到用户的宠物中,所以展示价格的时候出现错误
解决方案:先查找编号再执行购买方法(找不到则提示)
boolean su = false;
String addno = addnotext.getText();
ArrayList<Pets> data = adminService.queryPets();
for(int i = 0; i < data.size();i++){
Pets pet = data.get(i);
if(pet.getNo().equals(addno)){
userService.buypet(addno);
JOptionPane.showMessageDialog(this, "添加成功");
su=true;
}
queryPet();
}
if(su==false){
JOptionPane.showMessageDialog(this, "没有此编号或者宠物数量不足");
}
(三)代码托管
- 码云commit历史截图