欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(JDBC)如何通过IDEA使用Java来连接MySQL数据库并进行操作

程序员文章站 2024-03-22 17:11:40
...


第一步:在Navicat中创建测试的数据库

在Navicat中输入如下代码,创建数据库:

CREATE DATABASE jdbcStudy CHARACTER SET utf8 COLLATE utf8_general_ci;

USE jdbcStudy;

CREATE TABLE `users`(
id INT PRIMARY KEY,
NAME VARCHAR(40),
PASSWORD VARCHAR(40),
email VARCHAR(60),
birthday DATE
);

INSERT INTO `users`(id,NAME,PASSWORD,email,birthday)
VALUES(1,'zhansan','123456','aaa@qq.com','1980-12-04'),
(2,'lisi','123456','aaa@qq.com','1981-12-04'),
(3,'wangwu','123456','aaa@qq.com','1979-12-04')

创建出来的结果如下:
(JDBC)如何通过IDEA使用Java来连接MySQL数据库并进行操作

第二步:在idea中,创建一个普通项目,名为JDBC

(JDBC)如何通过IDEA使用Java来连接MySQL数据库并进行操作
(JDBC)如何通过IDEA使用Java来连接MySQL数据库并进行操作

第三步:导入数据库驱动

首先在JDBC项目下,鼠标右键点击,创建一个名为lib的目录
(JDBC)如何通过IDEA使用Java来连接MySQL数据库并进行操作
再把相应的jar包复制到lib目录下
在这个网站https://mvnrepository.com/artifact/mysql/mysql-connector-java,找到自己想要的版本的jar包,我下的是5.1.47的
(JDBC)如何通过IDEA使用Java来连接MySQL数据库并进行操作
注意!!这时候还没完成
最后,我们需要右键lib目录-add as library
(JDBC)如何通过IDEA使用Java来连接MySQL数据库并进行操作

第四步:编写测试代码

  1. 加载驱动:Class.forName(“com.mysql.jdbc.Driver”);
  2. 连接数据库:DriverManager.getConnection
  3. 获取执行sql的对象:Statement
  4. 获得返回的结果集
  5. 释放连接
package jdbc.test;

import java.sql.*;

public class jdbcTest {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1.加载驱动(此为固定源码)
        Class.forName("com.mysql.jdbc.Driver");
        //2.用户信息和url(使用?来连接参数)
        //jdbc:mysql://主机地址:端口号/数据库名?参数1&参数2&参数3
        String url = "jdbc:mysql://localhost:3306/jdbcStudy?useUnicode=true&characterEncoding=utf8&useSSL=false";
        String username = "root";
        String password = "111";

        //3.连接成功,返回数据库对象
        Connection connection = DriverManager.getConnection(url, username, password);//此时的Connection就代表数据库

        //4.执行SQL的对象
        Statement statement = connection.createStatement();//此时的Statement就执行sql对象

        //5.用执行SQL的对象去执行SQL(可能存在结果,需要查看返回结果)

        String sql = "SELECT * FROM users";
        ResultSet resultSet = statement.executeQuery(sql);//返回的结果集,其中封装了我们全部的查询出来的结果
        while(resultSet.next()){
            System.out.println("id = "+ resultSet.getObject("id"));
            System.out.println("name = "+ resultSet.getObject("NAME"));
            System.out.println("pwd = "+ resultSet.getObject("PASSWORD"));
            System.out.println("email = "+ resultSet.getObject("email"));
            System.out.println("birth = "+ resultSet.getObject("birthday"));
        }

        //6.释放连接
        resultSet.close();
        statement.close();
        connection.close();
    }
}

此时输出结果:
(JDBC)如何通过IDEA使用Java来连接MySQL数据库并进行操作
说明是连接成功了

第五步:提取工具类

我们可以看出,如果需要对数据库进行多次的操作,就要多次重复使用上述的代码,并且上述代码是有一个固定套路的,每次只需要改动sql语句和返回的结果,那么,我们有什么办法能够解决此情况呢?——提取工具类

首先,我们把配置类单独提取出来,原因是:这些用户名密码什么的连接jdbc的配置信息,如果把他们都写到代码了,就强耦合了,我们要把他解耦,把其提取出来放到一个文件里,这里我放到db.properties里

在src文件夹下,创建db.properties的文件
(JDBC)如何通过IDEA使用Java来连接MySQL数据库并进行操作
在db.properties中写入配置信息:
(JDBC)如何通过IDEA使用Java来连接MySQL数据库并进行操作

再创建一个名为utils的包,并在里面创建名为JdbcUtils的类
(JDBC)如何通过IDEA使用Java来连接MySQL数据库并进行操作
接下来,在JdbcUtils类中,读取配置文件,(使用反射)

package jdbc.test2.utils;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class JdbcUtils {
    private static String driver = null;
    private static String url = null;
    private static String username = null;
    private static String password = null;


    static {
        try{
            //第一步:获取流
            InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
            Properties properties = new Properties();
            //第二步:拿到流之后,将流加载进来
            properties.load(in);
            //到目前为止,配置文件中的所有的信息都被读出来了,读到了properties对象中
            //第三步:接下来,就只需要获取properties的里面的资源就好了
            driver = properties.getProperty("driver");
            url = properties.getProperty("url");
            username = properties.getProperty("username");
            password =properties.getProperty("password");

            //第五步:加载驱动(只需加载一次)
            Class.forName(driver);



        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //第六步:获取连接
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(url, username, password);
    }

    public static void release(Connection conn, Statement st, ResultSet rs){
        if (rs!=null){
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (st!=null){
            try {
                st.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (conn!=null){
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}

再创建一个test文件,来测试是否能向数据库中插入数据

package jdbc.test2.utils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestInsert {
    public static void main(String[] args) {
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        try {
            conn = JdbcUtils.getConnection();//获取数据库连接
            st = conn.createStatement();//获得SQL的执行对象
            String sql = "INSERT INTO users(id,`NAME`,`PASSWORD`,`email`,`birthday`) " +
                    "values(4,'xiaoming','abc123','aaa@qq.com','2010-01-01')";
            int i = st.executeUpdate(sql);
            if (i>0){
                System.out.println("插入成功");
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            JdbcUtils.release(conn,st,rs);
        }
    }
}

运行结果:是插入成功的
(JDBC)如何通过IDEA使用Java来连接MySQL数据库并进行操作
接下来,再实验一下 删除数据,再创建一个test测试类

package jdbc.test2.utils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestDelete {
    public static void main(String[] args) {
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        try {
            conn = JdbcUtils.getConnection();//获取数据库连接
            st = conn.createStatement();//获得SQL的执行对象
            String sql = "delete from users where id = 4";
            int i = st.executeUpdate(sql);
            if (i>0){
                System.out.println("删除成功");
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            JdbcUtils.release(conn,st,rs);
        }
    }
}

代码与插入代码大体一致,只改动了sql语言和删除成功的文字
最后数据库显式是删除成功的
(JDBC)如何通过IDEA使用Java来连接MySQL数据库并进行操作

修改数据库内容也是类似操作

注意,查询有些不同,查询要用到executeQuery

package jdbc.test2.utils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SelectTest {
    public static void main(String[] args) {
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        try {
            conn = JdbcUtils.getConnection();
            st = conn.createStatement();

            //SQL
            String sql = "select * from users where id = 1";
            rs = st.executeQuery(sql);//查询完毕会返回一个结果集
            while (rs.next()){
                System.out.println(rs.getString("NAME"));
            }

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            JdbcUtils.release(conn,st,rs);
        }
    }
}

输出结果:查询到了id=1的name:
(JDBC)如何通过IDEA使用Java来连接MySQL数据库并进行操作