发表于: 2017-09-15 18:03:55
1 507
今天完成的事情:用JDBC编写了DAO层
明天计划的事情:学习Mybatis
遇到的问题:异常处理的地方还是不太懂,需要多查查
收获:
1.建立一个业务表结构如下:
2.建立一个与业务表对应的java类
public class Student {
private String name ;
private int id ;
private int qq ;
private String type ;
private String university ;
private String wish ;
public void setName(String name) {this.name = name;}
public String getName() {return name;}
public int getId() {return id;}
public void setId(int id) {this.id = id;}
public int getQq() {return qq;}
public void setQq(int qq) {this.qq = qq;}
public void setType(String type) {this.type = type;}
public String getType() {return type;}
public String getUniversity() {return university;}
public void setUniversity(String university) {this.university = university;}
public String getWish() {return wish;}
public void setWish(String wish) {this.wish = wish;}
public String getInfo() {
return "ID : " + id + "\nname : " + name + "\nqq : " + qq + "\ntype : " + type + "\nuniversity : " + university + "\nwish : " + wish;
}
}
3.建立DAO接口
public interface IStudentDAO {
public void add(Student student );
public Student readByName(String name);
public void delete(Student student);
public void update(Student student);
}
4.建立DAOimpl的工具,把重复方法和默认值设置到该类中
public final class JdbcUtils {
private static String url = "jdbc:mysql://localhost:3306/jdbc";
private static String user = "root";
private static String password = "640913";
private JdbcUtils(){}
static {//注册驱动
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError(e);
}
}
public static Connection getConnection() throws SQLException {//连接
return DriverManager.getConnection(url,user,password);
}
public static void free(ResultSet rs, Statement st, Connection conn){//释放
try{
if (rs != null)
rs.close();
} catch (SQLException e){
e.printStackTrace();
}finally{
try {
if (st != null)
st.close();
} catch (SQLException e) {
e.printStackTrace();
}finally {
if (conn != null)
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
5.建立一个数据访问异常类 继承 RuntimeException类 运行异常
public class DaoException extends RuntimeException{
public DaoException(String message, SQLException e) {
}
}
6.建立DAOimpl类
public class StudentDAOJdbcImpl implements IStudentDAO {
public void add(Student student) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConnection();
String sql = "insert into student(name,qq,type,university,wish) values(?,?,?,?,?)";
ps = conn.prepareStatement(sql);
ps.setString(1, student.getName());
ps.setInt(2, student.getQq());
ps.setString(3, student.getType());
ps.setString(4, student.getUniversity());
ps.setString(5, student.getWish());
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
throw new DaoException(e.getMessage(), e);//将 编译异常 转化为 运行异常 抛出
} finally {
JdbcUtils.free(rs, ps, conn);
}
}
public void delete(Student student) {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConnection();
st = conn.createStatement();
String sql = "delete from student where id=" + student.getId();
st.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
throw new DaoException(e.getMessage(), e);
} finally {
JdbcUtils.free(rs, st, conn);
}
}
public Student readByName(String name) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
Student student = null;
try {
conn = JdbcUtils.getConnection();
String sql = "SELECT ID,name,qq,type,university,wish FROM student WHERE name = ?";
ps = conn.prepareStatement(sql);
ps.setString(1, name);
rs = ps.executeQuery();
while (rs.next()) {
student = new Student();
student.setId(rs.getInt("ID"));
student.setName(rs.getString("name"));
student.setQq(rs.getInt("qq"));
student.setType(rs.getString("type"));
student.setUniversity(rs.getString("university"));
student.setWish(rs.getString("wish"));
}
} catch (SQLException e) {
e.printStackTrace();//打印异常堆栈
throw new DaoException(e.getMessage(), e);
} finally {
JdbcUtils.free(rs, ps, conn);
}
return student;
}
public void update(Student student){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConnection();
String sql = "update student set name=?,qq=?,type=?,university=?,wish=? WHERE ID=?";
ps = conn.prepareStatement(sql);
ps.setString(1, student.getName());
ps.setInt(2, student.getQq());
ps.setString(3, student.getType());
ps.setString(4, student.getUniversity());
ps.setString(5, student.getWish());
ps.setInt(6,student.getId());
} catch (SQLException e) {
e.printStackTrace();
throw new DaoException(e.getMessage(),e);
} finally {
JdbcUtils.free(rs, ps, conn);
}
}
}
7.建立一个test类测试
public class IStudentDAOTest {
public static void main(String args[]){
IStudentDAO iStudentDAO = new StudentDAOJdbcImpl();
Student student = new Student();
student.setWish("test dao wish");
student.setType("test dao java");
student.setQq(953274732);
student.setName("test dao name");
student.setUniversity("test dao university");
iStudentDAO.add(student);
Student s1 = iStudentDAO.readByName(student.getName());
System.out.println(s1.getInfo());
}
}
输出结果如下:
业务表:
评论