上机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("宠物类型有误,领养失败!"); } } } }