JDBC连接MySQL数据库

最详细的JDBC连接MySQL数据库的步骤!!!(这里以IDEA软件为例):

(1)导入jar包,因为,要使用SUN公司的这套接口,就必须导入他编写的jar包。
这是jar包的截图
JDBC连接MySQL数据库_第1张图片

因为我的数据库是8.0的,所以这里JDBC的jar包以mysql8.0为例,如果用的是5.0版本的数据库就下载mysql5.0的jar包。
在模块下面创建一个lib目录,然后将jar包复制进去,再添加依赖到模块下。(创建项目的步骤是File --> New --> Project 然后可以直接创建包和类 )(添加依赖的步骤 File --> Project Structure)
JDBC连接MySQL数据库_第2张图片
JDBC连接MySQL数据库_第3张图片
JDBC连接MySQL数据库_第4张图片
jar包前面有小箭头就代表,依赖导入成功!!!

(2)然后肯定是要创建一个实体类,因为一张表对应java中的一个实体类。(这里以user表为例)

以下是数据表里的数据 和 整个数据表的结构(这里的id 没有自增,一般在项目中是要设置自增的)
JDBC连接MySQL数据库_第5张图片
JDBC连接MySQL数据库_第6张图片
以下是User实体类(属性是和数据表中的字段相对应的,一般都要有无参数构造和有参数构造,然后get和set方法,还有toString方法)

package com.atguigu.jdbc.entity;

import java.util.Date;

public class User {
private Integer id;
private String username;//用户名
private String sex;//性别
private Date birthday;//生日
private String address;//住址

public User() {
}

public User(Integer id, String username, String sex, Date birthday, String address) {
    this.id = id;
    this.username = username;
    this.sex = sex;
    this.birthday = birthday;
    this.address = address;
}

public Integer getId() {
    return id;
}

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

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getSex() {
    return sex;
}

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

public Date getBirthday() {
    return birthday;
}

public void setBirthday(Date birthday) {
    this.birthday = birthday;
}

public String getAddress() {
    return address;
}

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

@Override
public String toString() {
    return "User{" +
            "id=" + id +
            ", username='" + username + '\'' +
            ", sex='" + sex + '\'' +
            ", birthday=" + birthday +
            ", address='" + address + '\'' +
            '}';
}

}

(3)接下来就全是JDBC的操作了,请认真阅读

(3.1) 在src目录下,创建一个jdbc.properties文件,名字随便定义,但是后缀名一定要是.properties,这里建议命名为jdbc.properties(创建步骤 右击src目录,new --> File)
JDBC连接MySQL数据库_第7张图片
(3.2) 在jdbc.properties文件中配置数据库的连接参数,因为我是8.0的数据库所以url地址和5.0有些不一样(截图里面忘记说了,8.0之前的driverClassName是com.mysql.jdbc.Driver !!! 8.0才需要加cj)
JDBC连接MySQL数据库_第8张图片
(3.3)废话不多说,接下来就是在main方法里面进行连接了。
添加操作:添加了 王五 这条记录
JDBC连接MySQL数据库_第9张图片
修改操作:将 张三 修改成 张三丰
JDBC连接MySQL数据库_第10张图片
查询操作:查询user表中所有记录,运行结果如下
在这里插入图片描述
删除操作:删除 王五 这条记录
JDBC连接MySQL数据库_第11张图片
接下来附上测试类的代码
package com.atguigu.jdbc.test;

import com.atguigu.jdbc.entity.User;

import java.io.InputStream;
import java.sql.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

public class JDBCTest {

public static void main(String[] args) throws Exception {
    /**
     * 1.读取配置文件中的4个基本信息(main方法对应目录是src下,
     * 如果是单元测试方法的话好像是对应模块目录)。
     * 2.写代码的话,我个人感觉没有太大弄懂每一步什么意思,
     * 比如这个ClassLoader.getSystemClassLoader()什么的,我也只知道是用类加载器加载属性资源文件
     * 建议新手的话,先不要深究每一行代码是什么意思,只需要记住每一步的步骤和相关的API方法
     * 因为连接每次都是一样的步骤,资源文件的路径一般也都是在src下
     *
     * 这里解释一下 这里是通过 key 获取 键值对的值 括号里面的值要是jdbc.properties文件中存在的
     *
     * String username = pros.getProperty("username");
     * String password = pros.getProperty("password");
     * String url = pros.getProperty("url");
     * String driverClassName = pros.getProperty("driverClassName");
     */
    InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
    Properties pros = new Properties();
    pros.load(is);

    String username = pros.getProperty("username");
    String password = pros.getProperty("password");
    String url = pros.getProperty("url");
    String driverClassName = pros.getProperty("driverClassName");

    // 2.加载驱动
    Class.forName(driverClassName);

    // 3.获取连接
    Connection conn = DriverManager.getConnection(url, username, password);

    /**
     * 2.预编译sql语句,返回PreparedStatement的实例(这里说一下为什么不用Statement)
     * 使用Statement会被恶意的sql注入(关于sql注入,大家可以百度查一下,我这就不细说了)
     * PreparedStatement刚好可以避免这种sql注入
     *
     * PrepareStatement是数据库的操作对象
     */
    //添加操作  ? 是占位符
    //添加一条王五的记录

// String insertSql = “insert into user values(?,?,?,?,?)”;
// PreparedStatement ps = conn.prepareStatement(insertSql);
// new JDBCTest().insert(ps);

    //将张三 改成 张三丰

// String updateSql = “update user set username=? where id=?”; //修改操作
// PreparedStatement ps = conn.prepareStatement(updateSql);
// new JDBCTest().update(ps);

    //查询操作

// String selectSql = “select * from user”;
// PreparedStatement ps = conn.prepareStatement(selectSql);
// new JDBCTest().select(ps);

    String deleteSql = "delete from user where username = ?"; //删除操作
    PreparedStatement ps = conn.prepareStatement(deleteSql);
    new JDBCTest().delete(ps);


    //关闭连接
    ps.close();
    conn.close();



}

public void insert(PreparedStatement ps) throws Exception {
    //关于为什么要用使用到对象,不用对象明明也可以插入数据,在这里我解释一下,
    // 1. java是面向对象的编程
    // 2. 而且用对象来存储不同类型的对象是比较方便的,比如从网页上获取用户输入的数据,可以通过对象
    //传递到Service层再到dao层
    User user = new User(20, "王五", "男", new Date(), "北京市");
    //填充占位符 setObject() 第一个参数是占位符的下标 下标从1开始
    ps.setObject(1,user.getId());
    ps.setObject(2,user.getUsername());
    ps.setObject(3,user.getSex());
    ps.setObject(4,user.getBirthday());//如果要自己输入日期,则需要进行格式化等操作
    ps.setObject(5,user.getAddress());
    //执行添加操作
    ps.executeUpdate();

}

public void select(PreparedStatement ps) throws Exception {
    //查询操作返回结果集
    ResultSet resultSet = ps.executeQuery();
    //创建一个List集合,里面存放的都是User对象,这里就必须使用到对象的技术,不然这么多不同类型的数据怎么放
    List list = new ArrayList();
    while(resultSet.next()){
        //这里的下标也是从1开始
        Integer id = (Integer) resultSet.getObject(1);
        String username = (String) resultSet.getObject(2);
        String sex = (String) resultSet.getObject(3);
        Date birthday = (Date) resultSet.getObject(4);
        String address = (String) resultSet.getObject(5);
        list.add(new User(id,username,sex,birthday,address));
    }
    //下面使用的java8新特性 lambda表达式 真的很方便 小伙伴们赶快安排上!!!
    list.forEach(System.out::println);
    //如果不会使用lambda表达式可以使用 普通的循环

// for (User user:list) {
// System.out.println(user);
// }
}

public void update(PreparedStatement ps) throws Exception {
    ps.setObject(1,"张三丰");
    ps.setObject(2,12);
    //执行修改操作
    ps.executeUpdate();
}

public void delete(PreparedStatement ps) throws Exception {
    ps.setObject(1,"王五");
    ps.executeUpdate();
}

}

下面是项目的目录:
JDBC连接MySQL数据库_第12张图片
这是我第一次写博客,如果有写的不好的地方请见谅,有错误和不足之处,希望大佬们能之处,最后,希望和大家一起进步,一起成长,谢谢!

你可能感兴趣的:(jdbc,mysql)