发表于: 2017-05-24 21:20:09
1 1257
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。
评论