2017.11.5 Java Web ----案例:数据库访问JavaBean的设计

(12)案例----数据库访问JavaBean的设计

例题:数据库操作在一个Web应用程序中的后台处理中占有大比重,设计一组JavaBean封装数据库的基本操作供上层模块调用,提高程序的可移植性。
【分析】:假设操作的数据库名是test,表格是user(userid、username、sex),封装的基本操作包括记录的添加、修改查询全部、按userid查找用户、按userid删除用户
【设计】需要设计以下组件
1.数据库test及其数据库表userUtil.java
2.在类路径(src)下建立属性文件db.properties,存放数据库的基本信息。
3.建立一个获取连接和释放资源的工具类JdbcUtil.java
4. 建立类Uesr.java实现信息对象化,体现面向编程
5. 在上面的基础建立类UserDao.java封装基本的数据库。其操作如下:
5.1. 向数据库中添加用户记录方法:public void add(User user)
5.2. 修改数据库用户记录方法:public void update (User user)
5.3. 删除数据库用户记录方法:public void delete(String uesrId)
5.4.根据id查询用户的方法:public Uesr findUesrById(String userId)
5.5 查询全部用户的方法:public List<User/ QueryAll()


【实现】

1.先建立一个“db.properties”文件,在该文件中存放的基本信息有:数据库驱动程序名、数据库连接字符串、数据库用户名、数据库用户密码。
driver=com.mysql.jdbc.Driver //驱动程序名  
url=jdbc:mysql://localhost/test?user?userUnicode=true&characterEncoding=utf-8 //String url的字符串
username=root  //数据库用户名
password=123456     //数据库密码                                                      
2.建立一个获取连接和释放类的工具类JdbcUil.java
package dbc;
import java.sql.*;
import java.util.Properties;
public final class JdbcUtil {
	private static String driver;
	private static String url;
	private static String user;
	private static String password;
	private static Properties pr=new Properties();
	@SuppressWarnings("unused")
	private  void JdbcUtils(){}
	//设计该工具类的静态初始化器中的代码,该代码再装入类时执行,且执行一次
	
static {
	try{
		pr.load(JdbcUtil.class.getClassLoader().getResourceAsStream("db.properties"));
		driver=pr.getProperty("driver");
		url=pr.getProperty("url");
		user=pr.getProperty("username");
		password=pr.getProperty("password");
		Class.forName(driver);
		}catch (Exception e){
			throw new ExceptionInInitializerError(e);
		}
	}

//设计获得连接对象的方法getConnection()
public static Connection getConnection()throws SQLException{
	return DriverManager.getConnection(url,user,password);
	}

//设计释放结果集、语句和连接的方法free()
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();
				}
			}
		}
	}
}
3.建立类User.java 实现记录信息化,基于对象对数据库关系表进行操作
package vo;
public class User {   
	private String userid;  //设计User类的三个私有属性
	private String username;
	private String sex;
	public String getUserid()    //Userid属性的get方法
	{
		return userid;
		}
	public void setUserid(String userid)  //Uesrid属性的set方法
	{
		this.userid=userid;
		}
	public String getUsername()
	{
		return username;
		}
	public void setUsername(String username)
	{
		this.username=username;
		}
	public String getSex()
	{
		return sex;
		}
	public void setSex(String sex)
	{
		this.sex=sex;
		}
}
4.建立类UserDao.java 封装基本的数据库操作
package dao;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

import vo.User;
import dbc.JdbcUtil;
public class UserDao {
	
	//向数据库中添加用户记录方法 add()
	public void add(User user)throws Exception{
		Connection conn=null;
		PreparedStatement ps=null;
		try{
			conn=JdbcUtil.getConnection();
			String sql="insert into user values(?,?,?)";
			ps=conn.prepareStatement(sql);
			ps.setString(1, user.getUserid());
			ps.setString(2, user.getUsername());
			ps.setString(3, user.getSex());
			ps.executeUpdate();
		}finally{JdbcUtil.free(null, ps, conn);}
	}
	
	//修改数据库用户记录的方法  update()
	public void update(User user)throws Exception{
		Connection conn=null;
		PreparedStatement ps=null;
		try{
			conn=JdbcUtil.getConnection();
			String sql="update user set username=?,sex=?,where userid=?";
			ps=conn.prepareStatement(sql);
			ps.setString(1, user.getUsername());
			ps.setString(2, user.getSex());
			ps.setString(3, user.getUserid());
			ps.executeUpdate();
		}finally{JdbcUtil.free(null, ps, conn);}
	}
	
	
	//删除数据库用户记录的方法delete()
	public void deletes(String userid)throws Exception{
		Connection conn=null;
		PreparedStatement ps=null;
		try{
			conn=JdbcUtil.getConnection();
			String sql="delete from user where userid=?";
			ps=conn.prepareStatement(sql);
			ps.setString(1,userid);
			ps.executeUpdate();
	}finally{JdbcUtil.free(null, ps, conn);}
}
	
	//根据id查询用户的方法  fingUserById()
	public User findUserById(String userid)throws Exception{
		Connection conn=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		User user=null;
		try{
			conn=JdbcUtil.getConnection();
			String sql="selete * from user where userid=?";
			ps=conn.prepareStatement(sql);
			ps.setString(1, userid);//
			rs=ps.executeQuery();
			if(rs.next()){
				user=new User();
				user.setUserid(rs.getString(1));
				user.setUsername(rs.getString(2));
				user.setSex(rs.getString(3));
			}
		}finally{JdbcUtil.free(rs, ps, conn);}
		return user;
	}
	
	//查询全部用户的方法QueryAl()
	public List<User>QueryAll()throws Exception{
		Connection conn=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		List<User>userList=new ArrayList<User>();
		try{
			conn=JdbcUtil.getConnection();
			String sql="select *from user";
			ps=conn.prepareStatement(sql);
			rs=ps.executeQuery();
			while(rs.next()){
				User user=new User();
				user.setUserid(rs.getString(1));
				user.setUsername(rs.getString(2));
				user.setSex(rs.getString(3));
				userList.add(user);
			}	
		}finally{JdbcUtil.free(rs,ps,conn);}
		return userList;
	}
}
posted @ 2017-11-05 22:49  LegendQi  阅读(955)  评论(0编辑  收藏  举报