初学者的java学习笔记——JDBC的使用练习

这里是一只小萌新 [1]

程序描述

本文是练习程序,旨在自我回顾以及巩固。


本文主要内容是JDBC连接并操作数据库的设计与实现,没有啥高大尚的内容,就是这么的朴实无华,若有缺点,还望各路高手指正。


因为只涉及基本的CURD操作,所以本程序未添加任何事务操作。


先来一句点兔万岁!

使用工具

idea
mysql
navicat for mysql

程序结构


代码

首先是创建存储数据的类:

package domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Rabbit {
    private Long    id;
    private String  name;
    private Integer age;
    private String  store;
    private String  voice;
}

接着是DAO接口:

package dao;

import domain.Rabbit;

import java.util.List;

public interface IRabbitDAO {
    /**
     * 用于增加新的数据
     * @param xb 要插入的数据
     */
    void insert(Rabbit xb);

    /**
     * 用于删除指定的数据
     * @param id 要删除的数据的id
     */
    void delete(Long id);

    /**
     * 用于修改指定的数据
     * @param xb 要用于修改的数据
     */
    void update(Rabbit xb);

    /**
     * 查询单条数据
     * @param id 要查询的数据的id
     * @return 返回相应的数据的对象
     */
    Rabbit selectOne(Long id);

    /**
     * 查询整个表的数据
     * @return 返回包含了整个表数据对象的集合
     */
    List<Rabbit> selectAll();
}

然后是用于获取连接对象以及用于关闭的工具类(本文使用的连接池是阿里的Druid):

package util;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JDBCUtil {
    private static DataSource dataSource = null;

    /**
     * 用于初始化从连接池获取dataSource对象
     */
    static {
        Properties p = new Properties();
        InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties");
        try {
            p.load(resourceAsStream);
            dataSource = DruidDataSourceFactory.createDataSource(p);
        }catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 通过上方获取的DataSource的对象获取连接对象
     * @return 返回连接对象
     */
    public static Connection getConnection() {
        Connection conn = null;
        try {
            conn = dataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

    /**
     * 用于关闭各种对象
     * @param connection 连接对象
     * @param statement 语句对象
     */
    public static void close(Connection connection,Statement statement) {
        try {
            if(connection != null) {
                connection.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if(statement != null) {
                statement.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 方法重载
     * @param connection 连接对象
     * @param statement 语句对象
     * @param resultSet 结果集对象
     */
    public static void close(Connection connection, Statement statement, ResultSet resultSet) {
        try {
            if(connection != null) {
                connection.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if(statement != null) {
                statement.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if(resultSet != null) {
                resultSet.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

最后是万众瞩目的实现类:

package dao.impl;

import dao.IRabbitDAO;
import domain.Rabbit;
import util.JDBCUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class RabbitDAOImpl implements IRabbitDAO {
    @Override
    public void insert(Rabbit xb) {
        String sql = "INSERT INTO rabbit_order(name,age,store,voice) VALUES(?,?,?,?)";
        Connection conn = JDBCUtil.getConnection();
        PreparedStatement pst = null;
        try {
            pst = conn.prepareStatement(sql);
            pst.setString(1,xb.getName());
            pst.setInt(2,xb.getAge());
            pst.setString(3,xb.getStore());
            pst.setString(4,xb.getVoice());
            pst.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtil.close(conn,pst);
        }
    }

    @Override
    public void delete(Long id) {
        String sql = "DELETE FROM rabbit_order WHERE id=?";
        Connection conn = JDBCUtil.getConnection();
        PreparedStatement pst = null;
        try {
            pst = conn.prepareStatement(sql);
            pst.setLong(1,id);
            pst.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtil.close(conn,pst);
        }
    }

    @Override
    public void update(Rabbit xb) {
        String sql = "UPDATE rabbit_order SET name=?,age=?,store=?,voice=? WHERE id=?";
        Connection conn = JDBCUtil.getConnection();
        PreparedStatement pst = null;
        try {
            pst = conn.prepareStatement(sql);
            pst.setString(1,xb.getName());
            pst.setInt(2,xb.getAge());
            pst.setString(3,xb.getStore());
            pst.setString(4,xb.getVoice());
            pst.setLong(5,xb.getId());
            pst.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtil.close(conn,pst);
        }
    }

    @Override
    public Rabbit selectOne(Long id) {
        String sql = "SELECT * FROM rabbit_order WHERE id=?";
        Connection conn = JDBCUtil.getConnection();
        PreparedStatement pst = null;
        ResultSet resultSet = null;
        try {
            pst = conn.prepareStatement(sql);
            pst.setLong(1,id);
            resultSet = pst.executeQuery();
            if(resultSet.next()) {
                String name = resultSet.getString("name");
                int age = resultSet.getInt("age");
                String store = resultSet.getString("store");
                String voice = resultSet.getString("voice");
                return new Rabbit(id,name,age,store,voice);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtil.close(conn,pst,resultSet);
        }
        return null;
    }

    @Override
    public List<Rabbit> selectAll() {
        String sql = "SELECT * FROM rabbit_order";
        Connection conn = JDBCUtil.getConnection();
        PreparedStatement pst = null;
        ResultSet resultSet = null;
        List<Rabbit> list = new ArrayList<>();
        try {
            pst = conn.prepareStatement(sql);
            resultSet = pst.executeQuery();
            while(resultSet.next()) {
                long id = resultSet.getLong("id");
                String name = resultSet.getString("name");
                int age = resultSet.getInt("age");
                String store = resultSet.getString("store");
                String voice = resultSet.getString("voice");
                list.add(new Rabbit(id,name,age,store,voice));
            }
            return list;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtil.close(conn,pst,resultSet);
        }
        return null;
    }
}

对了对了,差点忘了,建表语句奉上:

CREATE TABLE rabbit_order (
			id	BIGINT PRIMARY KEY AUTO_INCREMENT,
			name	VARCHAR(10),
			age	INT,
			store	VARCHAR(25),
			voice	VARCHAR(10)
);
INSERT INTO rabbit_order(name,age,store,voice) VALUES('保登心爱',15,'Rabbit House','佐仓绫音');
INSERT INTO rabbit_order(name,age,store,voice) VALUES('香风智乃',13,'Rabbit House','水濑祈');
INSERT INTO rabbit_order(name,age,store,voice) VALUES('天天座理世',16,'Rabbit House','种田梨沙');
INSERT INTO rabbit_order(name,age,store,voice) VALUES('宇治松千夜',15,'甘兔庵','佐藤聪美');
INSERT INTO rabbit_order(name,age,store,voice) VALUES('桐间纱路',15,'Fleur du Lapin','内田真礼');
INSERT INTO rabbit_order(name,age,store,voice) VALUES('条河麻耶',15,null,'徳井青空');
INSERT INTO rabbit_order(name,age,store,voice) VALUES('奈津惠',15,null,'村川梨衣');

总结(个人学习笔记奉上)


  1. 我是可爱的萌新,请对我好一点。 ↩︎

posted @ 2021-11-10 22:41  阿梓喵~~  阅读(82)  评论(0)    收藏  举报