• 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;
    	}
    }
    
  • 相关阅读:
    随感
    LIKE运算符
    数据库运行时的关键字先后顺序
    联表查询
    进程、线程、协程
    算法复杂度
    redis支持的数据类型
    面向对象编程和面向过程编程的区别总结
    判断对象的变量是否存在,isset和property_exists区别
    构造函数和析构函数
  • 原文地址:https://www.cnblogs.com/qichunlin/p/7789251.html
Copyright © 2020-2023  润新知