发表于: 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
评论