发表于: 2018-04-05 21:51:52

2 632


编辑日报内容...

day5

今日完成

根据how2j教程用JDBC编写了DAO。

编写Student类作为存储。

public class Student {
//增加id属性
   public int id;
   public String name;
   public long update_at;
   public long create_at;
   public long qq;
   public int major;
   public int student_id;
   public int entrytime;
   public String graduate_from;
   public String oath;

}

DAO的接口

import java.util.List;


public interface DAO{
//增加
   public void add(Student student);
   //修改
   public void update(Student student);
   //删除
   public void delete(int id);
   //获取
   public Student get(int id);
   //查询
   public List<Student> list();
   //分页查询
   public List<Student> list(int start, int count);
}

StudentDAODemo实现DAO接口

package com.task1.dao;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class StudentDAODemo implements DAO{


//驱动加载写在构造方法中,只用加载一次。

   public StudentDAODemo(){
try {
           Class.forName("com.mysql.jdbc.Driver");
       }catch (ClassNotFoundException e) {
           e.printStackTrace();
       }

   }


//connection封装在方法中,减少代码重复

public Connection getConnection() throws SQLException {
return DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mysql?characterEncoding=gbk", "root",
               "123");
   }

public  Student get(int id){
       Student stu=new Student();
       try {
           Connection c = DriverManager
                   .getConnection(
"jdbc:mysql://127.0.0.1:3306/mysql?characterEncoding=gbk",
                           "root", "123");
           String sql = "select *from student where id = "+id;
           PreparedStatement ps = c.prepareStatement(sql);
           ResultSet rs=ps.executeQuery();
           if (rs.next()) {
               id = rs.getInt("id");
               String name = rs.getString(4);
               stu.id=id;
               stu.name=name;
           }
           ps.execute();
           ps.close();
           c.close();
       } catch (SQLException e) {
           e.printStackTrace();
       }
return stu;
   }

public void add(Student stu){
try {
           Connection c = DriverManager
                   .getConnection(
"jdbc:mysql://127.0.0.1:3306/mysql?characterEncoding=gbk",
                           "root", "123");
           String sql = "insert into  student (name,qq,student_id) values(?,?,?)"  ;
           PreparedStatement ps = c.prepareStatement(sql);
           ps.setString(1, stu.name);
           ps.setLong(2, stu.qq);
           ps.setInt(3, stu.student_id);

           ps.execute();

           ResultSet rs = ps.getGeneratedKeys();
           if (rs.next()) {
int id = rs.getInt(1);
               stu.id = id;
           }
           ps.execute();
           ps.close();
           c.close();
       } catch (SQLException e) {
           e.printStackTrace();
       }
   }

public void delete(int id) {
try (Connection c = getConnection(); Statement s = c.createStatement();) {
           String sql = "delete from student where id = " + id;
           s.execute(sql);
       } catch (SQLException e) {
           e.printStackTrace();

       }

   }



public void update(Student stu) {
       String sql = "update student set name= ?, student_id = ? , qq = ? where id = ?";
       try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {
           ps.setString(1, stu.name);
           ps.setFloat(2, stu.student_id);
           ps.setLong(3, stu.qq);
           ps.setInt(4,stu.id);
           ps.execute();
       } catch (SQLException e) {
           e.printStackTrace();
       }

   }



public List<Student> list() {
return list(0, Short.MAX_VALUE);
   }



public List<Student> list(int start, int count) {
       List<Student> students = new ArrayList<Student>();
       String sql = "select * from student order by id desc limit ?,? ";
       try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {
ps.setInt(1, start);
           ps.setInt(2, count);
           ResultSet rs = ps.executeQuery();
           while (rs.next()) {
               Student stu = new Student();
               int id = rs.getInt(1);
               int student_id = rs.getInt("student_id");
               long qq = rs.getLong("qq");
               String name = rs.getString("name");
               stu.id = id;
               stu.name = name;
               stu.student_id =student_id;
               stu.qq=qq;
               students.add(stu);
           }
       } catch (SQLException e) {
           e.printStackTrace();
       }
return students;

   }

}

实现了DAO接口的六种方法。


编写测试代码,测试增add,删delete,改update,查get四种方法是否有效。

public class Test {
public static void main(String[] args) {
StudentDAODemo DAO=new StudentDAODemo();

       Student s1=new Student();
       s1.student_id=333;
       s1.name="白天";
       s1.qq=333;
       DAO.add(s1);//add测试

       System.out.println(DAO.get(48).name);//get测试

       DAO.delete(46);//delete测试

       s1.name="晚上";
       s1.qq=11111;
       DAO.update(s1);//update测试

   }
}


student表格的部分内容初始状态如下。


代码运行后,会出现id为48的新记录,表明add方法有效。

之后打印get(43).name,控制台成功打印出“白天”,表明get方法有效。

delete(46),id46陈超的记录消失,表明delete方法有效。

最后48的记录显示name为“晚上”,表明update方法有效。       结果如下图。

明日计划

学习git。

spring和mybatis连接数据库。

遇到问题

1.对泛型和集合不熟,不太理解下面两个方法的实现。明天看一下。

public List<Student> list() {
return list(0Short.MAX_VALUE);
   }



public List<Student> list(int start, int count) {
List<Student> students = new ArrayList<Student>();
       String sql = "select * from student order by id desc limit ?,? ";
       try (Connection c = getConnection()PreparedStatement ps = c.prepareStatement(sql);) {
ps.setInt(1start);
           ps.setInt(2count);
           ResultSet rs = ps.executeQuery();
           while (rs.next()) {
Student stu = new Student();
               int id = rs.getInt(1);
               int student_id = rs.getInt("student_id");
               long qq = rs.getLong("qq");
               String name = rs.getString("name");
               stu.id = id;
               stu.name = name;
               stu.student_id =student_id;
               stu.qq=qq;
               students.add(stu);
           }
catch (SQLException e) {
e.printStackTrace();
       }
return students;

   }

2.本来想把代码丢到github链接放在下面,git的学习不太顺利。

收获

理解了DAO和ORM的原理并可以简单实现。



返回列表 返回列表
评论

    分享到