首页 > 代码库 > 如何使用JDBC实现数据访问对象层(DAO)

如何使用JDBC实现数据访问对象层(DAO)

JAVA是面向对象的语言,开发者在操作数据的时候,通常更习惯面对一个特定类型的对象,如一个用户就是一个
User类的对象。DAO层需要做的,就是为上层提供充分的对象支持,让上层再也看不到具体的数据,而是一个个活生生的对象。

增加,删除,查询和修改操作是DAO需要做的最基本的4项操作。查询一般需要提供遍历查询和id查询,对于遍历查询,DAO需要提供
User泛型的list对象,对于id查询则提供已经装配好数据的User对象,至于增加和修改操作,上层一般会提供一个User对象,DAO把
User对象中的数据使用Insert语句插入到表格中。删除操作则只需提供一个id即可

 class User{	private long id;	private String name;	private String gender;  public User(){	super();  }  public User(long id,String name,String gender){	super();	this.id = id;	this.name = name;	this.gender = gender;	}	//get,set方法  }    //DAO类  public class jdbcDao{	static{		try{			Class.forName("com.mysql.jdbc.Driver");		}catch(Exception e){		e.printStackTrace();			}		}	private Connection  getConn(){		try{			return DriverManager.getConnection("jdbc:mysql://localhost:3306:xe","root","password");			}catch(Exception e){			e.printStackTrace();			}		}		return null;	}	private void release(ResultSet rs,Statement ps,Connection conn){		if(rs!=null){			try{				rs.close();			}catch(Exception e){				e.printStackTrace();			}		}		if(ps!=null){			try{				ps.close();			}catch(Exception e){				e.printStackTrace();			}		}		if(conn!=null){			try{				conn.close();			}catch(Exception e){				e.printStackTrace();			}		}	}	//用ID获取用户对象	public User getUserById(long id){		ResultSet rs = null;		PreparedStatement ps = null;		Connection conn = null;		String sql = "select * from user where id = ?";		try{			conn = this.getConnection();			ps = conn.prepareStatement(sql);			ps.setLong(1,id);			rs = ps.executeQuery();			if(rs.next()){				//如果存在,则直接构建并返回用户对象				User user = new User(rs.getLong("id"),rs.getString("name"),rs.getString("gender"));				return user;			}		}catch(Exception e){			e.printStackTrace();		}finally{			this.release(rs,ps,conn);		}		return null;	}	//查询所有用户	public List<User> getAllUsers(){		List<User> list = new ArrayList<User>();		ResultSet rs = null;		PreparedStatement ps = null;		Connection conn = null;		String sql = "select * from user ";		try{			conn = this.getConnection();			ps = conn.prepareStatement(sql);			rs = ps.executeQuery();			//循环添加用户对象			while(rs.next()){				User user = new User(rs.getLong("id"),rs.getString("name"),rs.getString("gender"));				list.add(user);			}		}catch(Exception e){			e.printStackTrace();		}finally{			this.release(rs,ps,conn);		}		return list;	}	//修改用户数据	public User updateUser(User user){		PreparedStatement ps = null;		Connection conn = null;		String sql = "update user set id =?,name=?,gender=?";	try{			conn = this.getConnection();			conn.setAutoCommit(false);			ps = conn.prepareStatement(sql);			ps.setLong(1,user.getId());			ps.setString(2,user.getName());			ps.setString(3,user.getGender());			int rst = ps.executeUpdate();			if(rst>0){				return  new User(user.getId(),user.getName(),user.getGender());				 			}			conn.commit();		}catch(Exception e){			e.printStackTrace();			try{				conn.rollback();			}catch(Exception e1){				e1.printStackTrace();			}		}finally{			this.release(null,ps,conn);		}		return null;			}		}		//删除用户数据	public boolean deleteUser(long id){		PreparedStatement ps = null;		Connection conn = null;		String sql = "delete from user where id =?;	try{			conn = this.getConnection();			conn.setAutoCommit(false);			ps = conn.prepareStatement(sql);			ps.setLong(1,user.getId());			ps.setString(2,user.getName());			ps.setString(3,user.getGender());			int rst = ps.executeUpdate();			if(rst>0){				return user;			}			conn.commit();		}catch(Exception e){			e.printStackTrace();			try{				conn.rollback();			}catch(Exception e1){				e1.printStackTrace();			}		}finally{			this.release(null,ps,conn);		}		return null;			}		}		//插入用户数据		public User insertUser(User user){		PreparedStatement ps = null;		Connection conn = null;		String sql = "insert into user values(?,?,?)";	try{			conn = this.getConnection();			conn.setAutoCommit(false);			ps = conn.prepareStatement(sql);			ps.setLong(1,user.getId());			ps.setString(2,user.getName());			ps.setString(3,user.getGender());			int rst = ps.executeUpdate();			if(rst>0){				return user;			}			conn.commit();		}catch(Exception e){			e.printStackTrace();			try{				conn.rollback();			}catch(Exception e1){				e1.printStackTrace();			}		}finally{			this.release(null,ps,conn);		}		return null;			}		}	}  }

  

如何使用JDBC实现数据访问对象层(DAO)