发表于: 2017-11-21 23:12:00

1 700


今天完成的事情:

对创建的数据库进行了改造。并通过spring配置文件连接数据库,进行了CRUD。

完成了深度思考中的内容。添加数据后返回数据的ID,根据学号或者姓名查询链接。通过maven构建项目。

所有的代码块都使用了try catch 增强了代码的健壮性。

先贴一下目录结构:

//使用了lombok jar包 在主程序这块 简化了代码。

@Data

@AllArgsConstructor
@NoArgsConstructor
public class Student {
Long id;
   String name;
   Long qqNumber;
   String studyType;
   Long admissionTime;
   String graduationSchool;
   String studentID;
   String post;
   String desire;
   String elder;
   String channel;
}

//使用JdbcTemplate中的预编译 使用KeyHolder 方法。返回了新加入数据的ID值。

KeyHolder keyHolder = new GeneratedKeyHolder();
try{
getJdbcTemplate().update(new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(
Connection connection) throws SQLException {
String sql = "INSERT INTO student(name,admissionTime) VALUES (?,?)";
           PreparedStatement ps = connection.prepareStatement(sql,
                   Statement.RETURN_GENERATED_KEYS);
           ps.setString(1,"name");
           Timestamp d = new Timestamp(System.currentTimeMillis());
           Long time = d.getTime();
           ps.setLong(2,time/1000);
           return ps;
       }
},keyHolder);
   Long generatedId = keyHolder.getKey().longValue();
   System.out.println("保存成功,保存数据的ID"+generatedId);

}catch (Exception e){
throw new RuntimeException("保存失败");
}

执行效果:

//使用了jdbc的query 返回一个区间(A-B)的数据,当然也可以返回单个。也可以用list集合封装,返回一个List。

 try {
//            final List students = new ArrayList();
           System.out.println("获取的数据为:");
           getJdbcTemplate().query("SELECT * FROM student WHERE id BETWEEN ? AND ?",
                   new Object[]{id1, id2}, new RowCallbackHandler() {
public void processRow(ResultSet resultSet) throws SQLException {
Student stu = new Student();
                           stu.setName(resultSet.getString("name"));
//                            students.add(stu);
                           System.out.println(stu);
                       }
});
           }catch (Exception e){
throw new RuntimeException("获取数据失败");
       }

执行效果:(为null 是因为有的数据未添加)

//通过学号或者或者id 去查询报名贴  不过这里使用了 or 有一个条件符合即可。这段代码还需要优化。

try{
getJdbcTemplate().query("SELECT post FROM student WHERE id= ? or name =?",
           new Object[]{id, name}, new RowCallbackHandler() {
public void processRow(ResultSet resultSet) throws SQLException {
Student stu = new Student();
                   String  post = resultSet.getString("post");
                   System.out.println("报名贴连接为:");
                   System.out.println(post);
               }
});
}catch (Exception e){
throw new RuntimeException("获取链接失败");
}


执行效果:

//更新操作:

try{

getJdbcTemplate().update("UPDATE student SET name=?," +
"admissionTime=? WHERE id=?",stu.getName(),stu.getAdmissionTime(),stu.getId());
   System.out.println("更新成功");
}catch(Exception e){
throw new RuntimeException("更新失败");

}

@Test
public void update() throws Exception {
Student stu = new Student();
   stu.setId(2L);
   stu.setName("李师师");
   Timestamp d = new Timestamp(System.currentTimeMillis());
   Long time = d.getTime();
   stu.setAdmissionTime(time/1000);
   studentDAO.update(stu);
}

这里会设计到更新时间的一个问题。通过Timestamp函数转换。

方法都是一样,通过sql语句去查询数据库的数据,有的有返回值,有的没有。


//通过循环方法,在数据库中插入了约莫80W条数据后停止运行。

try

{
Connection c = DruidJdbcUtil.getConn();
   for (int i = 0; i <1000000; i++) {
String sql = "insert into hero values(?,?,?,?)";
       PreparedStatement ps = c.prepareStatement(sql);
       ps.setLong(1, 1+i);
       ps.setString(2, "李白"+i);
       ps.setLong(3, 600+i);
       ps.setLong(4, 900+i);
       ps.executeUpdate();
   }
} catch (SQLException e) {
// TODO Auto-generated catch block
   e.printStackTrace();

}

//通过建立索引与不建立索引查询数据库,对比查询速度。

建立索引:

不建立索引:

这个对比是很明显的。

建立索引比不建立索引快速太多。

在远程服务器运行maven命令生成的jar

 

这里有一个问题:

maven打包生成的项目不包含依赖包,直接运行会报空指针异常。

然而我按照网上教程完成依赖包一起打包过后,还是不能执行成功。

师兄在这方面有什么经验呢?


明天计划的事情:

总结任务一。到目前为止。任务一已经大体完成。
遇到的问题:

maven打包项目的问题。

这块主要还是编程思维的不足,很多时候被一个小问题折磨。

java基础的缺乏,导致有时候碰到一个小问题,不停的找资料,找解决方案。

不过总体来说进度和预期的时间差不多。
收获:

对Spring有了更加深入的认知。对Mysql的一些比较特殊的查询语句有了认知。

把代码上传至SVN.

禅道连接:http://task.ptteng.com/zentao/my-task.html


返回列表 返回列表
评论

    分享到