java第14次作业
1. 本周学习总结
1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容。
2. 使用数据库技术改造你的系统
2.1 简述如何使用数据库技术改造你的系统。要建立什么表?截图你的表设计。
答:
两个dao接口:
- 管理用户模块,建立一个用户表users 用于存放用户,每个用户要拥有一个借阅表,表名以用户ID前加一个字母a (表名不能全为数字)命名。
- 管理图书模块,建立一个图书表books用于存放书籍
books表:
users表:
借阅表:
2.2 系统中使用到了JDBC中什么关键类?
答:
- DriverManager类:用于管理数据库中的所有驱动程序
- Connection接口:用于与特定数据库进行连接
- PreparedStatement接口:用于动态执行SQL语句
- ResultSet接口:用于暂时存放数据库查询操作所获得的结果集
2.3 截图数据库相关模块的关键代码。关键行需要加注释。
图书dao接口:
public interface BookDao {
public void add(Book book,int num); //添加书籍
public void remove(Book book); //移除书籍
public void lendOrBack(Book book,LendOrBack action); //更改书籍变动
public Book peekBook(long ID); //查询书籍
}
用户dao接口:
public interface UserDao {
public void add( User user ); //添加用户
public void remove( User user ); //删除用户
public User peekUser( long ID ); //查找用户
public void updateUser(User user,String name,String password); //修改用户信息
}
判断数据库中是否存在指定表:
public static boolean HasTable(String name){
//用于判断数据库中是否存在指定表
Connection con = null;
DatabaseMetaData meta;
ResultSet rs = null;
try{
con = getConnection();
meta = con.getMetaData();
rs = meta.getTables(null, null, name, null);
while(rs.next()){
realeaseAll(rs,null,con);
return true;
}
}catch(Exception e){
}
realeaseAll(rs,null,con);
return false;
}
创建book表并写入数据:
private static void initializeBookStore() throws IOException, ClassNotFoundException{
Map<Book,Integer> books=new TreeMap<Book,Integer>();
try {if(JdbcUtil.HasTable("books")==false){
con = JdbcUtil.getConnection();
strSql = "create table books(bookname char(20) not null,id long not null,category char(10),num int);";
pStatement = con.prepareStatement(strSql);
//当数据库中不存在book表时创建该表并写入数据
books.put(new Book("红",111,"文学类"), 30);
books.put(new Book("蓝",112,"文学类"), 50);
books.put(new Book("绿",113,"文学类"), 40);
books.put(new Book("黄",114,"经济类"), 10);
pStatement.executeUpdate(strSql); //预编译
strSql = "insert into books(bookname,id,category,num) values(?,?,?,?)";
pStatement = con.prepareStatement(strSql);
con.setAutoCommit(false);
Iterator<Map.Entry<Book, Integer>> m = books.entrySet().iterator(); //将books中的数据写入数据库
while(m.hasNext()){
Map.Entry<Book, Integer> e = m.next();
if(e.getValue()>0)
pStatement.setString(1,e.getKey().getName());
pStatement.setLong(2,e.getKey().getID());
pStatement.setString(3,e.getKey().getCategory());
pStatement.setInt(4,e.getValue());
pStatement.addBatch();}
pStatement.executeBatch();
con.commit();
}
}catch(SQLException e){
}finally{
}
}
添加书籍:
public void add(Book book,int num){ //添加书籍
strSql = "select * from books";
try {
pStatement = con.prepareStatement(strSql);
rs = pStatement.executeQuery(strSql);
while (rs.next()) {
//当数据库中存在所要添加的书籍时,在原有书籍数量上加上要添加的数量
if(rs.getString("bookname").equals(book.getName())){
strSql = " update books set num=num+"+num+" where name="+book.getName()+";";
rs = pStatement.executeQuery(strSql);
return;
}
}
//当数据库中不存在书籍时,插入一条新的书籍信息到数据库
strSql = "insert into books(bookname,id,category,num) values(?,?,?,?)";
pStatement = con.prepareStatement(strSql);
pStatement.setString(1,book.getName());
pStatement.setLong(2,book.getID());
pStatement.setString(3,book.getCategory());
pStatement.setInt(4,num);
pStatement.addBatch();
pStatement.executeUpdate();
}catch(SQLException e){
}
}
移除书籍:
public void remove(Book book){
//移除书籍
strSql = "select * from books";
try {
pStatement = con.prepareStatement(strSql);
rs = pStatement.executeQuery(strSql);
while (rs.next()) {
if(rs.getString("bookname").equals(book.getName())){
strSql = "delete from books where bookname='"+book.getName()+"';";
rs = pStatement.executeQuery(strSql);
return;
}
}
return;
}catch(SQLException e){
}
}
根据ID查询书籍:
public Book peekBook(long ID) {
//根据ID查询书籍
try {
con = JdbcUtil.getConnection();
} catch (SQLException e1) {
e1.printStackTrace();
}
try {
strSql = "select * from books";
pStatement = con.prepareStatement(strSql);
rs = pStatement.executeQuery(strSql);
while (rs.next()) {
if(rs.getLong("id")==ID){
return new Book(rs.getString("bookname"),rs.getLong("id"),rs.getString("category"));
}
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
}
return null;
}
3. 代码量统计
3.1 统计本周完成的代码量
需要将每周的代码统计情况融合到一张表中。
周次 | 总行数 | 新增行数 | 总文件数 | 新增文件数 |
---|---|---|---|---|
1 | 115 | 115 | 17 | 17 |
2 | 421 | 306 | 24 | 7 |
3 | 698 | 277 | 30 | 6 |
5 | 1085 | 387 | 38 | 8 |
6 | 1497 | 412 | 48 | 10 |
7 | 2033 | 536 | 57 | 9 |
8 | 2265 | 232 | 60 | 3 |
9 | 2728 | 522 | 65 | 5 |
10 | 3360 | 632 | 73 | 8 |
11 | 3958 | 598 | 83 | 10 |
12 | 4435 | 477 | 90 | 7 |
13 | 4802 | 367 | 96 | 6 |
14 | 5244 | 442 | 101 | 5 |
15 | 5876 | 632 | 108 | 7 |