使用数据库ch08总结加上机简答

date 数据|access 访问|object|entity实体|purchase购买|vehicle车辆|guide|invoice|

什么是持久化:持久化就是将程序中数据在瞬时状态将转换的机制

主要的持久化操作有哪些

什么是DAO模式,使用该模式有哪些优势:隔离了数据访问代码和业务逻辑代码隔离了不同数据库实现

DAO模式接口,DAO实现类,实体类,数据库连接和关闭

实现宠物主人登录页面SJLX1~2

package ch08;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Properties;

/**

* 数据库连接与关闭工具类。

*/

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;

}

}


/**
 * 主人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);
}
import java.util.List;
import cn.jbit.epet.entity.Pet;
    /**
     * 宠物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 findByName(String name);
    /**
     * 获取指定类型的宠物列表。
     * @param type 宠物类型
     * @return 宠物列表
     */
    List findByType(String type);
}
package cn.jbit.epet.dao;

import java.util.List;
import cn.jbit.epet.entity.Pet;
    /**
     * 宠物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 findByName(String name);
    /**
     * 获取指定类型的宠物列表。
     * @param type 宠物类型
     * @return 宠物列表
     */
    List findByType(String type);
}
package cn.jbit.epet.entity;
/**
 * 宠物主人类。
 */
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;
    }
}
package cn.jbit.epet.impl;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import cn.jbit.epet.dao.BaseDao;
import cn.jbit.epet.dao.PetDao;
import cn.jbit.epet.entity.Pet;
/**
 * PetDao针对MySQL数据库的实现类。
 */
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 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 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;
    }
}

package cn.jbit.epet.manager;

import java.util.Scanner;

import cn.jbit.epet.dao.impl.MasterDaoMySQLImpl;
import cn.jbit.epet.entity.Master;

/**
 * 主人业务类。
 */
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("用户名或密码错误,登录失败!");
        }
    }
}
package cn.jbit.epet.test;

import cn.jbit.epet.manager.MasterManager;

/**
 * 测试类
 */
public class Test {
    public static void main(String[] args) {
        MasterManager masterManager = new MasterManager();
        masterManager.login();
    }
}

package cn.jbit.epet.dao;

import java.util.List;
import cn.jbit.epet.entity.Pet;
    /**
     * 宠物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 findByName(String name);
    /**
     * 获取指定类型的宠物列表。
     * @param type 宠物类型
     * @return 宠物列表
     */
    List findByType(String type);
}
package cn.jbit.epet.dao;

import java.util.List;

import cn.jbit.epet.entity.PetType;

public interface PetTypeDao {
    List findPetType(); //查询宠物类型
    int findIdByTypeName(String name); //根据类型名称查询类型编号
    int save(PetType petType);
}

package cn.jbit.epet.entity;

import java.io.Serializable;

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;
    }
}

package cn.jbit.epet.manager;

import java.util.List;

import cn.jbit.epet.dao.PetTypeDao;
import cn.jbit.epet.dao.impl.PetTypeMySQLImpl;
import cn.jbit.epet.entity.PetType;

public class PetTypeManager {
    /**
     * 显示宠物类型
     */
    public void showPetType(){
        PetTypeDao pTypeDao=new PetTypeMySQLImpl();
        List 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);
    }
}

package cn.jbit.epet.test;

import java.util.Scanner;

import cn.jbit.epet.dao.MasterDao;
import cn.jbit.epet.dao.PetDao;
import cn.jbit.epet.dao.impl.MasterDaoMySQLImpl;
import cn.jbit.epet.dao.impl.PetDaoMySQLImpl;
import cn.jbit.epet.entity.Master;
import cn.jbit.epet.entity.Pet;
import cn.jbit.epet.manager.PetTypeManager;


/**
 * 测试类。
 */
public class Test {
    Master master = null;
    public static void main(String[] args) {
        /* PetService petService = new PetServiceImpl();
         Pet pet = new Pet();
         pet.setId(1);
         if(petService.updateStatus(pet)){
             System.out.println("宠物状态更新成功!");
         }else{
             System.out.println("宠物状态更新成功!");
         }*/

        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!=0)
                    System.out.println("领养成功!");
            }else{
                System.out.println("宠物类型有误,领养失败!");
            }   
        }       
    }
}

你可能感兴趣的:(使用数据库ch08总结加上机简答)