idea中jdbc连接数据库


1.引入jar包

在项目名下创建一个名为lib的包,将mysql-connector-java-8.0.23.jar放进去。
在对准这个jar包,点击右键,add as library(作为库添加)。
在这里插入图片描述

二、jdbc六步

在这里插入图片描述
基本上jdbc连接数据库都是靠这6步的。

public class InsertPerson {
    public static void main(String[] args) throws SQLException,ClassNotFoundException {
//1.加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
//2.获取连接
String url="jdbc:mysql://localhost:3306/lvning?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai";
String username="root";
String passwd="123456";
        Connection conn = DriverManager.getConnection(url, username,passwd);
// 3.获取一个发送sql的工具
        String sql="insert into t_person values(1,'岳不群',45,'男','1774322132','华山')";
        PreparedStatement pstm = conn.prepareStatement(sql);

//4.发生并执行sql
        int update = pstm.executeUpdate();
//5.处理结果集
//6.释放资源
        pstm.close();
        conn.close();

    }
}

其中:

获取连接:String
url=“jdbc:所使用的是哪个数据库(mysql或其他)😕/localhost:端口号/数据库名?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai”;
在这里插入图片描述

三、JDBC的ORM(对象关系映射)

目录结构如下:
在这里插入图片描述

1.entity实体类及对应的表

public class Person {
    private Integer id;
    private String name;
    private Integer age;
    private String sex;
    private String mobile;
    private String address;

    public Person(Integer id, String name, Integer age, String sex, String mobile, String address) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.mobile = mobile;
        this.address = address;
    }

    public Person() {
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", mobile='" + mobile + '\'' +
                ", address='" + address + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

表结构:

DROP TABLE IF EXISTS `t_person`;
CREATE TABLE `t_person`  (
  `person_id` int(11) NOT NULL AUTO_INCREMENT,
  `person_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `age` tinyint(4) NULL DEFAULT NULL,
  `sex` enum('男','女','其他') CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `mobile` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `address` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`person_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

2.以.properties结尾的配置文件

在src下创建jdbc.properties文件。
将驱动driver,url,username及passwd都写在配置文件里。

driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/lvning?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username = root
password = 123456

3.utils包

public class JDBCutils 
    private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
    private static Properties prop = new Properties();
    static {
        try {
            //通过流读取jdbc.properties文件中内容
            //通过类对象的getResourceAsStream()获取配置文件输入流
//			InputStream in = new FileInputStream("./src/jdbc.properties");
            // /表示com超级父包所在的目录
            InputStream in = JDBCUtils.class.getResourceAsStream("/jdbc.properties");
            //自动的使用输入流读取配置文件,并将键值对数据保存到本身
            prop.load(in);
            in.close();
            String driverClassName = prop.getProperty("driver");
            Class.forName(driverClassName);
        }catch(Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    //抽取JDBC前2步
    public static Connection getConnection() {

        //从当前线程空间中获取conn
        Connection  conn = tl.get();

        //如果获取不到,说明是第1次获取连接,则从数据库中获取,然后保存到线程中
        if(conn == null) {
            try {

                String url = prop.getProperty("url");
                String user = prop.getProperty("username");
                String password = prop.getProperty("password");
                conn = DriverManager.getConnection(url, user, password);
                tl.set(conn);
            }catch(Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
        //conn不为空,说明不是第1次,则直接返回从线程对象中获取的连接
        return conn;
    }

    //抽取JDBC最后1步
    public static void close(Connection conn,ResultSet rs,PreparedStatement pstm) {
        if(rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(pstm != null) {
            try {
                pstm.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        Connection connection = getConnection();
        System.out.println(connection);
    }
}

4.dao包及Impl包


public interface PersonDao {
    int insertPerson(Person p);

    int deletePersonById(Integer id);

    int updatePerson(Person p);

    Person selectPersonById(Integer id);

    List<Person> selectAllPerson();
}

实现类:

public class PersonDaoImpl implements PersonDao {
//
    @Override
    public int insertPerson(Person p) {
        Connection conn = JDBCutils.getConnection();
        String sql="insert into t_person values (null ,?,?,?,?,?)";
        PreparedStatement pstm = null;
        int update = 0;
        try {
            pstm = conn.prepareStatement(sql);
            pstm.setString(1,p.getName());
            pstm.setInt(2,p.getAge());
            pstm.setString(3,p.getSex());
            pstm.setString(4,p.getMobile());
            pstm.setString(5,p.getAddress());

            update = pstm.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        JDBCutils.close(conn,null,pstm);

        return update;

    }

    @Override
    public int deletePersonById(Integer id) {
        Connection conn = JDBCutils.getConnection();
        PreparedStatement pstm = null;
        int update=0;
        try {
            String sql="delete from t_person where person_id=?";
            pstm = conn.prepareStatement(sql);
            pstm.setInt(1,id);
             update = pstm.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        JDBCutils.close(conn,null,pstm);
      return update;
    }

    @Override
    public int updatePerson(Person p) {
        Connection conn = JDBCutils.getConnection();
        String sql="update t_person set person_name=? ,age=? where person_id=?";
        PreparedStatement pstm = null;
        int update = 0;
        try {
            pstm = conn.prepareStatement(sql);
            pstm.setString(1,p.getName());
            pstm.setInt(2,p.getAge());
            pstm.setInt(3,p.getId());
            update = pstm.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        JDBCutils.close(conn,null,pstm);
        return update;
    }

    @Override
    public Person selectPersonById(Integer id) {
        Connection conn = JDBCutils.getConnection();
        String sql="select * from t_person where person_id=?";
        PreparedStatement pstm = null;
        Person person= null;
        try {
            pstm = conn.prepareStatement(sql);
            pstm.setInt(1,id);
            ResultSet rs = pstm.executeQuery();
            person = null;
            while (rs.next()) {
                int id1 = rs.getInt(1);
                String name = rs.getString(2);
                int age = rs.getInt(3);
                String sex = rs.getString(4);
                String mobile = rs.getString(5);
                String address = rs.getString(6);
                person = new Person(id1, name, age, sex, mobile, address);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        JDBCutils.close(conn,null,pstm);
        return person;
    }

    @Override
    public List<Person> selectAllPerson() {
        Connection conn = JDBCutils.getConnection();
        String sql="select * from t_person";
        List<Person> persons = new Vector<>();
        Person person=null;
        ResultSet rs=null;
        PreparedStatement pstm=null;
        try {
             pstm = conn.prepareStatement(sql);
            rs = pstm.executeQuery();

        while (rs.next()){
        int id = rs.getInt(1);
        String name = rs.getString(2);
        int age = rs.getInt(3);
        String sex = rs.getString(4);
        String mobile = rs.getString(5);
        String address = rs.getString(6);
         person = new Person(id, name, age, sex, mobile, address);
        persons.add(person);
    }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        JDBCutils.close(conn,rs,pstm);
        return persons;
    }
}

5.测试类

public class Test {
    public static void main(String[] args) {
        PersonDaoImpl personDao = new PersonDaoImpl();
//        int i = personDao.deletePersonById(3);
//        System.out.println(i);
//        List<Person> persons = personDao.selectAllPerson();
//        System.out.println(persons);
//        Person person = new Person(null, "江宁", 18, "男", "123xxxxxx", "华山");
//        Person person = new Person(5, "任我行", 30, "男", "123xxxxxx", "未知");
//        int i = personDao.insertPerson(person);
//        System.out.println(i);
//
//        int i = personDao.updatePerson(person);
//        System.out.println(i);
        Person person = personDao.selectPersonById(1);
        System.out.println(person);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值