使用Java实现数据库编程_第八章_DAO模式_上机1-4

上机01:实现宠物主人登录的数据访问

上机02:实现宠物主人登录业务

上机03:实现宠物类型查询

上机04:实现主人领养宠物

首先在数据库创建三个表,分别是:主人表(Master),字段分别是:id、name、password。宠物种类表(pet_type), 字段分别是:id、name。宠物表(pet), 字段分别是:id、master_id、name、type_id、health、love、adopt_time、status

接下来就是数据库的外键约束(打在MySQL里,执行SQL语句):

ALTER TABLE pet ADD CONSTRAINT id FOREIGN  KEY (`master_id`) REFERENCES `master`(`id`);    #mater_id作为外键参考master表的id字段。
ALTER TABLE pet ADD CONSTRAINT chongwu FOREIGN  KEY (`type_id`) REFERENCES `pet_type`(`id`);    #type_id作为外键参考pet_type表的id字段

在接下来就是打Java代码了!直接把所有类创建复制代码就好!
完美运行图

其中,在sre右击,new,新建一个file文件

MyEclipse中选中项目src文件夹右击,在弹出的快捷菜单中选择”New” “File”命令,在打开新建文件窗口中输入database.properties,单机”finish”按钮,也可以创建一个文本文件改名为database.properties(扩展名为.properties),复制粘贴带项目目录中。
文件内容为:
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/epet     //epet是数据库名
user = ****                       //“ * ”是数据库用户名
password = ****               //“ * ”是数据库登录密码
BaseDao类:
/**
 * 数据库连接与关闭工具类。
 */
public class BaseDao {
	
	private static String driver; // 数据库驱动字符串
	private static String url; // 连接URL字符串
	private static String user; // 数据库用户名
	private static String password; // 用户密码
	Connection conn = null;// 数据连接对象
	
	static{//静态代码块,在类加载的时候执行
		init();
	}
	
	/**
	 * 初始化连接参数,从配置文件里获得
	 */
		public static void init(){
			Properties params=new Properties();
			String configFile = "database.properties";//配置文件路径
			//加载配置文件到输入流中
			InputStream is=BaseDao.class.getClassLoader().getResourceAsStream(configFile);
			
			try {
				//从输入流中读取属性列表
				params.load(is);
			} catch (IOException e) {
				e.printStackTrace();
			}
			//根据指定的获取对应的值
			driver=params.getProperty("driver");
			url=params.getProperty("url");
			user=params.getProperty("user");
			password=params.getProperty("password");
		}   
	/**
	 * 获取数据库连接对象。
	 */
	public Connection getConnection() {
		if(conn==null){
			// 获取连接并捕获异常
			try {
				Class.forName(driver);
				conn = DriverManager.getConnection(url, user, password);
			} catch (Exception e) {
				e.printStackTrace();// 异常处理
			}
		}	
		return conn;// 返回连接对象
	}
	/**
	 * 关闭数据库连接。
	 * @param conn 数据库连接
	 * @param stmt Statement对象
	 * @param rs 结果集
	 */
	public void closeAll(Connection conn, Statement stmt, 
					ResultSet rs) {
		// 若结果集对象不为空,则关闭
		if (rs != null) {
			try {
				rs.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		// 若Statement对象不为空,则关闭
		if (stmt != null) {
			try {
				stmt.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		// 若数据库连接对象不为空,则关闭
		if (conn != null) {
			try {
				conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	/**
	 * 增、删、改的操作
	 * @param sql 预编译的 SQL 语句          
	 * @param param 预编译的 SQL 语句中的‘?’参数的字符串数组          
	 * @return 影响的行数
	 */
	public int exceuteUpdate(String preparedSql, Object[] param) {
		PreparedStatement pstmt = null;
		int num = 0;
		conn =  getConnection(); 
		try {
			pstmt = conn.prepareStatement(preparedSql);
			if (param != null) {
				for (int i = 0; i < param.length; i++) {
					pstmt.setObject(i + 1, param[i]); // 为预编译sql设置参数
				}
			}
			num = pstmt.executeUpdate(); 
		} catch (SQLException e) {
			e.printStackTrace();
		} finally{
			closeAll(conn, pstmt, null);
		}
		return num;
	}
}

Master类:
/**
 * 宠物主人类。
 */
public class Master {
	private int id;// 主人id
	private String name;// 登录名
	private String password; // 登录密码

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
}

MasterDao类:
/**
 * 主人Dao接口。
 */
public interface MasterDao {
	/**
	 * 保存主人信息。
	 * @param master 主人
	 */
	int save(Master master);
	
	/**
	 * 删除主人信息。
	 * @param master 主人
	 */
	int del(Master master);
	
	/**
	 * 更新主人信息。
	 * @param master 主人
	 */
	int update(Master master);
	
	/**
	 * 查找指定登录名和密码的主人
	 * @param master 要查找的主人
	 * @return 主人
	 */
	Master findMaster(Master master);
}

MasterDaoMySQLImpl类:
/**
 * MasterDao针对MySQL数据库的实现类。
 */
public class MasterDaoMySQLImpl extends BaseDao implements MasterDao {

	@Override
	public int del(Master master) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int save(Master master) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int update(Master master) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public Master findMaster(Master mas) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		Master master = null;
		try {
			conn = this.getConnection();
			String sql = "select * from master where  name = ? and password=?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, mas.getName());
			pstmt.setString(2, mas.getPassword());
			rs = pstmt.executeQuery();
			if (rs.next()) {
				master = new Master();
				master.setId(rs.getInt("id"));
				master.setName(rs.getString("name"));
				master.setPassword(rs.getString("password"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			this.closeAll(conn, pstmt, rs);
		}
		return master;
	}
}

MasterManager类:
/**
 * 主人业务类。
 */
public class MasterManager {
	Master master=null; //主人
	/**
	 * 主人登录。
	 */
	public void login() {
		// 1、获得输入对象
		Scanner input = new Scanner(System.in);
		// 2、打印欢迎信息
		System.out.println("---- 欢迎光临宠物乐园 ----");
		// 3、获取用户输入的登录名、密码
		System.out.print("请输入登录名:");
		String loginId = input.next();
		System.out.print("请输入密码:");
		String password = input.next();
		Master mas = new Master();
		mas.setName(loginId);
		mas.setPassword(password);
		// 4、检查登录名、密码是否合法,并输出提示信息
		MasterDaoMySQLImpl masterDao = new MasterDaoMySQLImpl();
		master = masterDao.findMaster(mas);
		if (master!=null) {
			System.out.println("登录成功!");
		} else {
			System.out.println("用户名或密码错误,登录失败!");
		}
	}
}
Pet类:
/**
 * 宠物实体类。
 */
public class Pet {
	private int id;// 宠物id
	private int masterId;// 主人id
	private String name;// 昵称
	private int typeId;// 类型id
	private int health;// 健康值
	private int love;// 亲密度
	private Date adoptTime;// 领养时间
	private String status;// 状态
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getMasterId() {
		return masterId;
	}
	public void setMasterId(int masterId) {
		this.masterId = masterId;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getTypeId() {
		return typeId;
	}
	public void setTypeId(int typeId) {
		this.typeId = typeId;
	}
	public int getHealth() {
		return health;
	}
	public void setHealth(int health) {
		this.health = health;
	}
	public int getLove() {
		return love;
	}
	public void setLove(int love) {
		this.love = love;
	}

	public Date getAdoptTime() {
		return adoptTime;
	}
	public void setAdoptTime(Date adoptTime) {
		this.adoptTime = adoptTime;
	}
	public String getStatus() {
		return status;
	}
	public void setStatus(String status) {
		this.status = status;
	}
}
PetDao类:
/**
 * 宠物Dao接口。
 */
public interface PetDao {
/**
  * 保存宠物。
  * @param pet 宠物
  */
 int save(Pet pet);
/**
 * 删除宠物。
 * @param pet 宠物
 */
 int del(Pet pet);
/**
 * 更新宠物。
 * @param pet 宠物
 */
int update(Pet pet);
 /**
 * 获取指定昵称的宠物,精确查询。
 * @param name 昵称
 * @return 宠物
 */
Pet getByName(String name);
/**
 * 获取指定昵称的宠物列表,模糊查询。
 * @param name 昵称
 * @return 宠物列表
 */
List<Pet> findByName(String name);
/**
 * 获取指定类型的宠物列表。
 * @param type 宠物类型
 * @return 宠物列表
 */
List<Pet> findByType(String type);
}

PetDaoMySQLImpl类:


public class PetDaoMySQLImpl extends BaseDao implements PetDao{
	public int update(Pet pet) {	
		String sql="update pet set status=9 where id=?";
		Object[] param={pet.getId()};
		int result=this.exceuteUpdate(sql, param);
		return result;
	}

	@Override
	public List<Pet> findByName(String name) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Pet getByName(String name) {
		// TODO Auto-generated method stub
		return null;
	}
	
	@Override
	public List<Pet> findByType(String type) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int save(Pet pet) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int del(Pet pet) {
		// TODO Auto-generated method stub
		return 0;
	}
}

PetType类:
public class PetType implements Serializable {
	private static final long serialVersionUID = 25874444741572L;
	private int id;
	private String name;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}
PetTypeDao类:
public interface PetTypeDao {
	List<PetType> findPetType(); //查询宠物类型
	int findIdByTypeName(String name); //根据类型名称查询类型编号
	int save(PetType petType);
}
PetTypeManager类:
public class PetTypeManager {
	/**
	 * 显示宠物类型
	 */
	public void showPetType(){
		PetTypeDao pTypeDao=new PetTypeMySQLImpl();
		List<PetType> list=pTypeDao.findPetType();
		System.out.println("请选择宠物类型:");
		for(PetType petType:list){
			System.out.print(petType.getName()+" | ");
		}
		System.out.println();
	}
	
	public int findId(String name){
		PetTypeDao pTypeDao=new PetTypeMySQLImpl();
		return pTypeDao.findIdByTypeName(name);
	}
}

PetTypeMySQLImpl类:




/**
 * PetDao针对MySQL数据库的实现类。
 */
public class PetTypeMySQLImpl extends BaseDao implements PetTypeDao {

	@Override
	public List<PetType> findPetType() {
		List<PetType> list=new ArrayList<PetType>();
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			conn = this.getConnection();
			String sql = "select * from pet_type";
			pstmt=conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			while (rs.next()) {
				PetType petType=new PetType();
				petType.setId(rs.getInt("id"));
				petType.setName(rs.getString("name"));
				list.add(petType);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			this.closeAll(conn, pstmt, rs);
		}
		return list;
	}

	@Override
	public int findIdByTypeName(String name) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		int id=0;
		try {
			conn = this.getConnection();
			String sql="select id from pet_type where name=?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, name);
			rs = pstmt.executeQuery();
			if (rs.next()) {
				id=rs.getInt("id");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			this.closeAll(conn, pstmt, rs);
		}
		return id;
	}

	@Override
	public int save(PetType petType) {
		// TODO Auto-generated method stub
		return 0;
	}
}

Test类(测试类):
/**
 * 测试类。
 */
public class Test {
	Master master = null;
	public static void main(String[] args) {
		Test test = new Test();
		test.adoptPet();
	}
	
    /*
     * 登录
     */	
	public void login() {
		// 1、获得输入对象
		Scanner input = new Scanner(System.in);
		// 2、打印欢迎信息
		System.out.println("---- 欢迎光临宠物乐园 ----");
		// 3、获取用户输入的登录名、密码
		System.out.print("请输入登录名:");
		String loginId = input.next();
		System.out.print("请输入密码:");
		String password = input.next();
		Master mas=new Master();
		mas.setName(loginId);
		mas.setPassword(password);
		// 4、检查登录名、密码是否合法,并输出提示信息
		MasterDao masterDao = new MasterDaoMySQLImpl();
		
		master = masterDao.findMaster(mas);
		if (master!=null) {
			System.out.println("登录成功!");
		} else {
			System.out.println("用户名或密码错误,登录失败!");
		}
	}
	
	/*
	 * 主人领养宠物
	 */
	public void adoptPet() {
		Scanner input = new Scanner(System.in);
		if(master==null){  //判断主人是否登录
			login();
			adoptPet();
		}else{
			PetTypeManager petTypeManager=new PetTypeManager();
			petTypeManager.showPetType(); //显示宠物类型
			String name=input.next().trim();
			int typeId=petTypeManager.findId(name);  //获得宠物类型的编号
			if(typeId!=0){
				System.out.print("请输入宠物昵称:");
				String petName = input.next();				
				Pet pet=new Pet();
				pet.setMasterId(master.getId());
				pet.setName(petName);
				pet.setTypeId(typeId);
				PetDao petDao = new PetDaoMySQLImpl();
				int result=petDao.save(pet); //添加宠物
				if(result!=1)
					System.out.println("领养成功!");
			}else{
				System.out.println("宠物类型有误,领养失败!");
			}	
		}		
	}
}

猜你喜欢

转载自blog.csdn.net/MrSupermanl/article/details/80285818