发表于: 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(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;}
2.本来想把代码丢到github链接放在下面,git的学习不太顺利。
收获
理解了DAO和ORM的原理并可以简单实现。
评论