Java第八次作业
(一)学习总结
1、用思维导图对本周的学习内容进行总结。
2、通过实验内容中的具体实例说明在执行executeUpdate()方法和executeQuery()方法中使用动态参数时,为什么要使用PreparedStatement接口而不使用Statement,比较使用两种接口的不同之处。
- 方法executeQuery:
用于产生单个结果集的语句,例如 SELECT 语句。 被使用最多的执行 SQL 语句的方法是 executeQuery。这个方法被用来执行 SELECT 语句,它几乎是使用最多的 SQL 语句。 - 方法executeUpdate:
用于执行 INSERT、UPDATE 或 DELETE 语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。 - Statement写executeUpdate:
String sqlStr = "insert into student(Sno,Sname) values('"+no+"','"+name+"')";
executeUpdate(sqlstr);
- 使用Statement:
程序的可读性差;
性能低;
安全性差;
一般使用Statement的子接口PreparedStatement:
String sqlStr = "insert into student(Sno,Sname) values(?,?)";
PreparedStatement pstmt = conn.prepareStatement(sqlStr);
pstmt.setString(1,no);
pstmt.setString(2,name);
?是一个占位符,在指定?的值。
3、其他需要总结的内容。
Java和数据库的连接。
(二)实验总结
- 程序设计思路:
(1)定义两个基本信息类,一个宠物信息Petmessage类,有宠物的编号、姓名、种类、年龄、价格、数量属性和get、set方法。另一个是登录用户信息User类,有用户名和登录密码属性和检验登录信息是否正确的一个方法。
(2)定义一个管理员访问信息Administrator类,当访问宠物商店时展示商店里有那些宠物,并且定义添加宠物和删除宠物的方法,方便管理员管理商店时调用。
(3)定义一个管理员管理宠物AdministratorSever类,定义方法展示所有的宠物,定义添加方法添加宠物,添加宠物时,输入宠物信息,迭代取出宠物商店原有的宠物编号和新添加的宠物编号比较一样添加失败,不一样,调用Administrator 的添加方法添加新的宠物,并且刷新宠物商店展示所欲有的宠物,定义删除方法,输入要删除宠物的编号,宠物商店里没有宠物的编号,删除失败,如果宠物商店里有输入的编号。则调用Administrator的删除方法删除,定义修改方法,输入要修改的编号,宠物商店中有这个编号,先调用删除方法,在调用添加方法,没有这个编号则不能修改。
(4)定义一个JDBCUtils的类,类中有连接Java和SQL的方法和关闭连接对象的方法。信息有SQL存储,如果要访问信息需要把数据库和Java连接。
(5)在视图中定义三个类:一个是进入系统的界面,一个是登录界面,另一个是宠物展示的界面。在进入系统的界面点击进入系统,会跳转到登录界面;在登录界面的类中,声明登录、密码等按钮、标签和输入信息的文本域。使用监听接口的监听按钮的单击事件判断是否是触发源,输入相应的用户名和密码比较是一样的进入宠物展示界面,错误提示相应的错误信息。在宠物展示的界面中。同时设置向里面添加文本域、标签和按钮并且使用绝对定位确定位置。在宠物展示的类中添加宠物信息和添加、修改、删除的按钮,并且提供添加、修改和删除的监听器;确定按钮、文本等绝对位置。
(6)定义一个Tool类,确定视图中登录界面和展示界面的窗口位置。
- 问题1:对象名petshop无效:
- 原因:查询数据时应该是在表明中查询,petshop是数据库的名
- 解决方案:
ArrayList<PetMessage> list = new ArrayList<PetMessage>();
try {
conn = JDBCUtils.getConnectionSQL();
stmt = conn.createStatement();
String sql = "select no,name,kind,age,number,price from pet";
rs = stmt.executeQuery(sql);
while(rs.next())
{
PetMessage thisPet = new PetMessage();
thisPet.setNo(rs.getString("no"));
thisPet.setName(rs.getString("name"));
thisPet.setKind(rs.getString("kind"));
thisPet.setAge(rs.getInt("age"));
thisPet.setNumber(rs.getInt("number"));
thisPet.setPrice(rs.getDouble("price"));
list.add(thisPet);
}
return list;
- 问题2:数据中存储了3个宠物信息,然而只能查询出1个宠物的信息,也添加不进去其他的宠物
- 原因:当查询出一个宠物信息的时候就返回了集合,就只有一个宠物了,添加不进去宠物是因为使用宠物的属性时出错。
- 解决方案:
while(rs.next())
{
PetMessage thisPet = new PetMessage();
thisPet.setNo(rs.getString("no"));
thisPet.setName(rs.getString("name"));
thisPet.setKind(rs.getString("kind"));
thisPet.setAge(rs.getInt("age"));
thisPet.setNumber(rs.getInt("number"));
thisPet.setPrice(rs.getDouble("price"));
list.add(thisPet);
}
return list;
}
返回值已改在while循环的外面。
- 类图:
(三)代码托管
https://git.oschina.net/hebau_cs15/Java-CS01yxr.git
(四)学习进度条
代码行数(新增/累积) | 学习时间(新增/累积) | 本周学习内容 | |
---|---|---|---|
目标 | 5000行 | 300小时 | |
第2-4周 | 150/300 | 30/30 | 学习了.... |
第5周 | 220/300 | 30/50 | 学习了关于double类型存在精度问题,取指定位置和截取字符串;数组的应用 |
第6周 | 550/600 | 60/80 | |
第8周 | 700/800 | 60/80 | 面向对象的继承和多态 |
第9周 | 800/800 | 80/100 | 工厂设计和Java常用的类 |
第10周 | 800/800 | 80/100 | 异常处理和集合类 |
第11周 | 1000/1000 | 90/100 | 图形界面管理 |
第12周 | 1100/1100 | 100/100 | JBDC |