发表于: 2017-03-21 22:37:00

2 1190



今天完成的事情:

1.用 IDEA 连接 MySQL,学习 JDBC。

2.学习 SQL 语句。

3.学习编写 DAO 层。


明天的计划是:

1.学习 Junit。

2.搭建 Spring 框架。

遇到的问题:

1.JDBC 技术的 API 及技巧已看书解决。

2.关于增删改查里面的改,问题如下:

/**
* 缺陷很严重,更新的是利用 ID 号进行更新
* 类似于重新插入,即没有插入的数据将会被重新置空
* <p>
* 解决方案,在更新前先通过指定 id 查看信息一遍,将信息记录下来
* 在更新时除了更改的数据以外,其他数据要一一赋值
*
* @param stu
* @see StudentDao getStudentById();
*/
@Override
public void updateStudent(Student stu) {
String sql = "UPDATE sign_up_table SET stu_id=?,stn=?,qq=?,school=?,study_type=?,hope=?,introducer=?,auditor=?,entrance_time=?,update_at=? WHERE ID LIKE ?";
   try {
conn = DBUtil.getConnection();
       pstmt = conn.prepareStatement(sql);
       pstmt.setString(1, stu.getStuId());//两个 ID,一个是主键,一个是学号,这里只更新学号例如 Java 1511
       pstmt.setString(2, stu.getName());
       pstmt.setString(3, stu.getQq());
       pstmt.setString(4, stu.getSchool());
       pstmt.setString(5, stu.getStudyType());
       pstmt.setString(6, stu.getHope());
       pstmt.setString(7, stu.getIntroducer());
       pstmt.setString(8, stu.getAuditor());
       pstmt.setLong(9, stu.getEntranceTime());
       pstmt.setLong(10, new Date().getTime());//更新时间以现在时间为准
       pstmt.setLong(11, stu.getId());
       pstmt.executeUpdate();
   } catch (SQLException e) {
e.printStackTrace();
   } finally {
DBUtil.closeAll(rs, pstmt, conn);
   }
}

如果按照我的解决方案即每次修改还得重新查找,这不就进行了冗余的工作了么?未解决...


3.在学习 Dao 层的编写,不明白为什么在 Service 中不能有对象,最多只有引用。我能明白这是为了解耦的目的,但不明白这该怎么实现。

假设正在编写 Service 层

public class Service {
   public static void main(String[] args) {
       StudentDao studentDao = new StudentDaoImpl();
       studentDao.deleteStudent(1);
   }

}

new 出了 Dao 层的对象才能进行 Dao 层的操作,这明显违背了编写 Dao 层的规则。该怎么解决呢?

4.稍微学习搭建 Spring 感觉很复杂,对于 面向切面编程 和 容器 的生命周期大概可以想象到是什么意思,但我始终无法理解 控制反转 到底有什么用途。刚发现一篇文章好像在介绍,估计待会就看懂了。


收获:

1.学习 SQL 语句。

2.在 IDEA 中对数据库可视化操作,感觉高大上。

3.学习 JDBC 的主要操作及优化技巧,比如说使用预备语句提高查询效率。


返回列表 返回列表
评论

    分享到