发表于: 2017-05-24 21:20:09

1 1256


Task1第九2017年5月24日

今日计划

开始继续任务一,重新编写一遍DAO

今天重新编写了一个DAO,可以实现对本地MySQL数据库的增删改查,经过编译运行成功执行。


1、数据库连接类  JdbcUtils.java  

 

package jdbc;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;


public final  class JdbcUtils

{

private JdbcUtils () {}

private static String driverName = "com.mysql.cj.jdbc.Driver";

private static String url = "jdbc:mysql://localhost:3306/test?serverTimezone = UTC";

private static String username = "root";

private static String password = "920901";

public static Connection getConnection()

{

Connection conn = null;

try

{

Class.forName(driverName);

conn = DriverManager.getConnection(url,username,password);

System.out.println("连接数据库test成功");

}

catch(Exception e)

{

e.printStackTrace();

}

return conn;

}

    public static void free(ResultSet rs, Statement st , Connection con)  

    {  

        try {  

            if(null != rs)  

            {  

                rs.close();  

                rs = null ;  

            }  

              

            if(null != st)  

            {  

                st.close();  

                st = null ;  

            }  

              

            if(null != con)  

            {  

                con.close();  

                con = null ;  

            }  

              

        } catch (Exception e) {  

            e.printStackTrace();  

        }  

    }  

}

2、VO类: User.java

package jdbc.domain;

 

public class User {

private long id;

private String name;

private String qq;

private String profession;

private String gschool;

private String online_class;

private String daily_url;

private String oath;

private String resource;

public long getId() {

return id;

}

public void setId(long id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getQq() {

return qq;

}

public void setQq(String qq) {

this.qq = qq;

}

public String getProfession() {

return profession;

}

public void setProfession(String profession) {

this.profession = profession;

}

public String getGschool() {

return gschool;

}

public void setGschool(String gschool) {

this.gschool = gschool;

}

public String getOnline_class() {

return online_class;

}

public void setOnline_class(String online_class) {

this.online_class = online_class;

}

public String getDaily_url() {

return daily_url;

}

public void setDaily_url(String daily_url) {

this.daily_url = daily_url;

}

public String getOath() {

return oath;

}

public void setOath(String oath) {

this.oath = oath;

}

public String getResource() {

return resource;

}

public void setResource(String resource) {

this.resource = resource;

}

}

这里在使用ecplise编写代码时有一个快捷方法:

private long id;

private String name;

private String qq;

private String profession;

private String gschool;

private String online_class;

private String daily_url;

private String oath;

private String resource;

定义好变量之后,选中任意一个变量 右键-->Source-->Generate Getters and Setters勾选所有定义的变量名

点击OK,就完成了。

3、DAO接口类:UserDao.java

package jdbc.dao;

 

import jdbc.domain.User;

 

 

public interface UserDao {

public void addUser(User user);

public User getUser(long Id);

public User findUser(String name);

public void update(User user);

public void delete(User user);

}

4、DAO实现类 UserDaojdbcImpl.java

package jdbc.impl;

 

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

 

 

import jdbc.dao.DaoException;

import jdbc.JdbcUtils;

import jdbc.dao.UserDao;

import jdbc.domain.User;

 

public class UserDaojdbcImpl implements UserDao {

 //添加数据

public void addUser(User user) {

Connection conn = null ;  

    PreparedStatement ps = null ;   

    try  

    {  

     conn = JdbcUtils.getConnection();  

        String sql = "insert into apply(name,qq,profession,gschool,online_class,Daily_url,oath,Resource) values(?,?,?,?,?,?,?,?)";  

        ps = conn.prepareStatement(sql);  

 

       ps.setString(1, user.getName());  

       ps.setString(2, user.getQq());  

       ps.setString(3, user.getProfession());  

       ps.setString(4, user.getGschool());  

       ps.setString(5, user.getOnline_class());

       ps.setString(6, user.getDaily_url());

       ps.setString(7, user.getOath());  

       ps.setString(8, user.getResource());

       ps.executeUpdate();

              

     }  

     catch(SQLException e)  

     {  

      throw new DaoException(e.getMessage(),e);

     }  

     finally  

     {  

         JdbcUtils.free(null, ps, conn);  

     }  

}

 //根据id查找数据

public User getUser(long id)  {

  Connection conn = null ;  

      PreparedStatement ps = null ;  

      ResultSet rs = null;

      User user = null;

        try  

        {  

            conn = JdbcUtils.getConnection();  

            String sql = "select id,name,qq,profession,gschool,online_class,oath,resource from apply where id = ?";  

            ps = conn.prepareStatement(sql);  

            ps.setLong(1, id);

            rs = ps.executeQuery();

            while(rs.next()){

             user = mappingUser(rs);

            }  

        }  

        catch(SQLException e)  

        {  

            throw new DaoException(e.getMessage(),e);  

        }  

        finally  

        {  

            JdbcUtils.free(rs, ps, conn);  

        }  

        return user;

}

 

 //根据name查找数据

public User findUser(String name) {

  Connection conn = null ;  

      PreparedStatement ps = null ;  

      ResultSet rs = null;

      User user = null;

        try  

        {  

            conn = JdbcUtils.getConnection();  

            String sql = "select id,name,qq,profession,gschool,online_class,oath,resource from apply where name = ?";  

            ps = conn.prepareStatement(sql);  

            ps.setString(1, name);

            rs = ps.executeQuery();

            while(rs.next()){

             user = mappingUser(rs);

            }  

        }  

        catch(SQLException e)  

        {  

            throw new DaoException(e.getMessage(),e);  

        }  

        finally  

        {  

            JdbcUtils.free(rs, ps, conn);  

        }  

        return user;

}

//更新数据

public void update(User user)  {

  Connection conn = null ;  

      PreparedStatement ps = null ;   

        try  

        {  

            conn = JdbcUtils.getConnection();  

            String sql = "update apply set oath=? where name=?";  

            ps = conn.prepareStatement(sql);  

            ps.setString(1, user.getOath());

            ps.setString(2,user.getName());

            ps.executeUpdate();

              

        }  

        catch(SQLException e)  

        {  

            throw new DaoException(e.getMessage(),e);  

        }  

        finally  

        {  

            JdbcUtils.free(null, ps, conn);  

        }  

}

 //删除数据

public void delete(User user) {

  Connection conn = null ;  

      PreparedStatement ps = null ;  

         

        try  

        {  

            conn = JdbcUtils.getConnection();  

            String sql = "delete from apply where name = ?";  

            ps = conn.prepareStatement(sql);  

            ps.setString(1, user.getName());

            ps.executeUpdate();

              

        }  

        catch(SQLException e)  

        {  

            throw new DaoException(e.getMessage(),e);  

        }  

        finally  

        {  

            JdbcUtils.free(null, ps, conn);  

        }  

}

private User mappingUser(ResultSet rs) throws SQLException {

User user;

user = new User();

user.setId(rs.getLong("id"));

user.setName(rs.getString("name"));

user.setQq(rs.getString("qq"));

user.setProfession(rs.getString("profession"));

user.setGschool(rs.getString("gschool"));

user.setOnline_class(rs.getString("online_class"));

user.setOath(rs.getString("oath"));

user.setResource(rs.getString("resource"));

return user;

}

}

这里使用ecplise进行编写,可以选中重复的代码,右键-->Refactor-->Extract Method

输入方法名,软件会自动对重复的代码进行重构,这里使用这个功能完成了mappingUser.

5、异常类 DaoException.java

package jdbc.dao;

 

public class DaoException extends RuntimeException {

private static final long serialVersionUID = 1L;

public DaoException() {

}

 

public DaoException(String message) {

super(message);

}

 

public DaoException(Throwable cause) {

super(cause);

}

 

public DaoException(String message, Throwable cause) {

super(message, cause);

}

 

public DaoException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {

super(message, cause, enableSuppression, writableStackTrace);

}

 

}

6.最后编写了一个test,检测了一下一上代码是否能够按照期望运行

package jdbc.dao;

import jdbc.impl.UserDaojdbcImpl;

import jdbc.domain.User;

public class UserDaoTest {

public static void main(String[] args) {

UserDao userDao =new UserDaojdbcImpl();

//User user = new User();

//user.setName("张全蛋");

//user.setQq("12313189");

////user.setProfession("Java工程师");

//user.setGschool("南京大学");

//user.setOnline_class("JAVA-2029");

//user.setDaily_url("www.bilibili.com");

//user.setOath("成为大牛");

//user.setResource("百度");

//userDao.addUser(user);

//User u = userDao.findUser(user.getName());

//System.out.println(u.getId());

User u =userDao.findUser("王六麻");

u.setOath("成为海贼王的男人");

userDao.update(u);

}

}

收获

经过几天的基础学习,编写基本的增删改查DAO类的过程已经比较清晰了,其中各种类的封装与调用,接口的实现,不再像以前云里雾里了,通过了异常的学习,对异常处理也有了一定的了解。

明日计划

今天重新编写了一遍DAO,明天继续深入学习DAO

学习“工厂模式”、反射技术、连接池等更多知识,并逐渐修改优化编写DAO。


返回列表 返回列表
评论

    分享到