JDBC进阶——通过Java类实现数据库的增删改

一、连接数据库

        1.安装驱动包

         这部分参考文章:初识JDBC——JDBC介绍、安装以及简单运用

        2.设置配置文件

        在前一篇文章中,我们将数据库地址、账户、密码等信息是直接写入程序中,是固定死的。当我们需要修改这些参数是,需要重新编译;因此,我们可以将这些参数写入配置文件中去。

       首先,我们在项目中创建一个资源文件夹,并将其资源根,接着在其中创建配置文件database.properties。

         然后,我们在database.properties输入我们需要的参数。参数如下(注意,参数中不能出现空格):

mysqldriver=com.mysql.cj.jdbc.Driver
mysqlurl=jdbc:mysql://主机IP:3306/数据库名
mysqluser=账户
mysqlpwd=密码

二、创建操作类

        在文章《初识JDBC——JDBC介绍、安装以及简单运用》中,我们是将操作数据的代码一股脑写在主函数中,这样导致代码重复度很高。因此,我们要用操作类来封装这些代码,或者说将增删查改的功能封装进类文件中。

        1.创建基础操作类

        (1)创建一个BaseDao类

        在软件包下,创建软件包dao,用于存放操作类文件。接着创建BaseDao类,来实现最基本的操作数据库的功能。

        然后设置BaseDao类属性,用于对应配置文件中的配置参数,接着写一个静态方法来读取配置文件中保存的参数信息。

public class BaseDao {
    private static String driver;//驱动参数
    private static String url;//数据库服务器地址参数
    private static String user;//账户
    private static String pwd;//密码
    static {
        //读取配置文件信息
        Properties properties = new Properties();
        InputStream inputStream =
 BaseDao.class.getClassLoader().getResourceAsStream("database.properties");
        try{
            properties.load(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //将读取到的参数设置赋值给BaseDao类的属性
        driver=properties.getProperty("mysqldriver");
        url=properties.getProperty("mysqlurl");
        user=properties.getProperty("mysqluser");
        pwd=properties.getProperty("mysqlpwd");
    }
}

       (2)编写BaseDao中的方法

        到这里,我们完成连接数据库的准备工作,接下来我们要实现第一步和第二步——获取驱动和用DriverManager获取Connection连接。

    public Connection getConnect(){
        Connection connection=null;
        try{
            Class.forName(driver);
            connection = DriverManager.getConnection(url,user,pwd);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }

        过多的连接容易导致数据库崩溃,所以我们提前实现第五步——释放资源。

    public void close(Connection connection, PreparedStatement prst){
        try {
            if (null!=connection){
                connection.close();
            }
            if (null!=prst){
                prst.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

        接下来,我们就来实现操作数据库。

    //操作数据库
    // 将新增,修改,删除统一抽象到一个方法中去
    //sqltr为输入的sql语句
    // @param params ...用法:表示n个参数n∈[0,∞]
    public int executeUpdate(String sqlStr,Object... params){
        Connection connection = this.getConnection();
        PreparedStatement preparedStatement = null;
        int num = -1;
        try{
            //执行sql语句
            preparedStatement = connection.prepareStatement(sqlStr);
            //判断属性是否为空
            if (null!=params){
                for (int i=0;i<params.length;i++){
                    //设置属性
                    preparedStatement.setObject(i+1,params[i]);
                }
            }
            num = preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return num;
    }

        2.创建表操作类

                (1)创建表接口

        我们先创建一个接口来实现操作数据库的方法,这里的接口单独针对一个类。本文继续以dog表为例。

/*
    对数据库中Dog表的操作定义,比如新增宠物,根据ID删除宠物,根据健康值删除宠物
 */
public interface DogDao {
    Integer saveDog(Dog dog);//增
    Integer updateDog(Dog dog);//改
    Integer delById(Integer id);//根据id删
    Integer delByHealth(Integer health);//根据健康值删
}

        (2)创建表操作类

        接下来,我们创建对表进行操作的类,注意,这里要继承基础操作类。


public class DogBaoImpl extends BaseDao implements DogDao{
    //增加宠物
    @Override
    public Integer saveDog(Dog dog) {
        String sql = 
"insert into dog(name,health,love,strain,lytm) value(?,?,?,?,now())";
        int num = 
super.executeUpdate(sql,dog.getName(),dog.getHealth(),dog.getLove(),dog.getStrain());
        return num;
        if (num>0){
            System.out.println("增加成功");
        }
        return num;
    }
    //修改宠物信息
    @Override
    public Integer updateDog(Dog dog) {
        String sql = "update dog set name=? where id=?";
        int num = super.executeUpdate(sql, dog.getName(), dog.getId());
        if (num>0){
            System.out.println("修改成功");
        }
        return num;

    }
    //根据id删除宠物
    @Override
    public Integer delById(Integer id) {
        String sql = "delete from dog where id=?";
        int num = super.executeUpdate(sql,id);
        if (num>0){
            System.out.println("删除成功");
        }
        return num;

    }
    //根据健康值删除
    @Override
    public Integer delByHealth(Integer health) {
        String sql = "delete from dog where health=?";
        int num = super.executeUpdate(sql,health);
        if (num>0){
            System.out.println("宠物已删除");
        }else {
            System.out.println("宠物都活着");
        }
        return num;

    }

}

三、在测试类中调用方法

        这里用测试类进行举例:

    @Test
    public void testDogDaoInserter(){
        //创建操作类的对象
        DogDao dogDao = new DogBaoImpl();
        //创建dog对象
        Dog dog = new Dog("芬达", 100, 88, "中华田园犬");
        //调用操作类的方法添加信息
        dogDao.saveDog(dog);
    }

猜你喜欢

转载自blog.csdn.net/Alcaibur/article/details/128535860