Java IDEA 进行数据库的连接 (MYSQL)实现数据库交互 及其配置 (基于Mac M1)

1 使用 Navicat 进行数据库以及表的创建,下面是本测试中使用的建的数据库和表的情况:

在这里插入图片描述

2 进行连接的源代码,进行简单的查询

package DatabaseConnect;

import java.sql.*; //导包

public class JDBC {
    public static void main(String[] args) throws SQLException {

        try {
            // 1.加载驱动
            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("加载驱动成功!");

            // 2.连接数据库 获得连接对象 conn 是连接对象
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/data", "root", "111111");
            System.out.println("数据库连接成功!");

            // 3.创建执行环境
            Statement statement = conn.createStatement();

            // 4.创建了查询语句 进行语句的执行 得到结果
            ResultSet result = statement.executeQuery("select * from info");

            // 将查询到的东西进行展示
            while (result.next()) {
                System.out.println(result.getInt("id"));
                System.out.println(result.getString("uname"));
                System.out.println(result.getString("upass"));
            }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            System.out.println("加载驱动失败!");
            System.out.println("数据库连接失败!");
        }
    }
}

3 对于上述代码中出现的部分方法进行简单的整理

连接数据的步骤(别忘了复制jar包)
(1)注册驱动: Class.forName():DriverManager
(2)获得链接对象:Connection (JVM 和 数据库的进程通道打开,结束需要关闭)
(3)创建sql执行环境:Statement(就是执行 SQL 语句的对象)
(4)执行sql语句:
(5)查询操作:遍历结果集:ResultSet
(6)关闭资源:(进程通信,一定要关闭)

(1) Class.forName()

Class.forName()中传入的参数就是类的全限定名,JVM通过该全限定名首先检查该类是否已经被加载,若该类没有被加载则加载该类 ;并返回该类相关的Class对象。
  说白了就是对于类的加载,在此处就是所谓的驱动的加载;

(2) 什么是数据库驱动程序?为什么加载驱动?

什么是?
  在Java里边也就是一些类.它们在一些特别的包里.它们负责与数据库建立连接,把一些SQL传到数据库里边去.不同的数据库由不同的类来实现,也就产生的不同的"数据库驱动程序包"。

为什么?
  加载了驱动也就是建立起来了Java与数据库的联系,可以在Java中书写 SQL 语句,从而对于数据库中的数据进行操作,得到自己需要的数据,并切进行相关的处理操作

(3)Connection类

Connection 用于与数据库“对话”,并由特定提供程序的类(如 SqlConnection)表示

1 、有四种:SqlConnection,OleDbConnection,OdbcConnection和OracleConnection;
2、SqlConnection类的对象连接SQL Server数据库;OracleConnection 类的对象连接Oracle数据库;
3、OleDbConnection类的对象连接支持OLE DB的数据库,如Access;而OdbcConnection类的对象连接任何支持ODBC的数据库。与数据库的所有通讯最终都是通过Connection对象来完成的

(4)Java DriverManager.getConnection()

  • Java DriverManager.getConnection() 方法用于获得试图建立到指定数据库 URL 的连接;
  • DriverManager 试图从已注册的 JDBC 驱动程序集中选择一个适当的驱动程序。

(5)Statement

建立了到特定数据库的连接之后,就可用该连接发送 SQL 语句,在发送SQL语句的时候,得有一个执行环境,用连接的 conn 对象创建出来执行环境,

Statement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute,使用哪一个方法由 SQL 语句所产生的内容决定。

  • 方法executeQuery
    用于产生单个结果集(ResultSet)的语句,例如:被执行最多的SELECT 语句。
    这个方法被用来执行 SELECT 语句,但也只能执行查询语句,执行后返回代表查询结果的ResultSet对象。
  • 方法executeUpdate
    用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。
    INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。
  • 方法execute:
    可用于执行任何SQL语句,返回一个boolean值,表明执行该SQL语句是否返回了ResultSet。
    如果执行后第一个结果是ResultSet,则返回true,否则返回false。

(6)ResultSet

封装了结果集的对象:内部有一个可移动的光标,默认情况,指向第一条记录集的上一条记录:

  • next();光标下移动一次:返回的boolean的值;判断是否有结果可以被遍历:
    boolean 返回一个真假值,真的话就可以进行下面的输出操作,本文使用了 while 循环操作;

  • previous();光标上移动一次:

  • last()移动到最后一行:

  • afterLast();移动到最后一行之后:

  • beforeFirst()移动到第一行的之前:

  • first()

4 将上述的代码封装成为一个工具类

思考:在封装的时候,如果像前面的代码所示,每当数据库发生变化的时候,都需要修改源代码,这是不合适的,也是不方便的,所以将数据库的 url , username , password 单独写成相关的配置文件,使用文件流的形式进行读取即可,用户修改相关的配置文件即可:

4.1 具体的封装的配置文件如下:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/数据库名字
username=root
password=test

# 此处的键值对中间的 = 不能出现空格;
# 每一句配置的后面都不能加封号
# 配置文件的后缀为:properties,我使用的是 db.properties;

工具类的代码如下所示,本质上与上文的连接数据库操作一样,只是将用户名,密码等配置文件单独出来,方便后期的维护;

代码如下所示:

package DatabaseConnect;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

/**
 * @author LuoBin
 * @version 1.0
 * @date 2021/7/9 10:43 上午
 */

// Utild 表示的是JDBC 的一个工具类
    /*
            command + shift + t  进行测试类的创建 单击类:JDBCUtils 选中进行操作
     */
public class JDBCUtils {

    private static String driver;
    private static String url;
    private static String username;
    private static String password;


    // 静态语句块
    // 将配置文件中的 driver 进行这里的传输 用流的形式进行读取

    static {
        // 将文件用流的形式进行读取进来 (核心目的)
        // JDBCUtils.class 获得对象
        // getClassLoader() 类加载器
        // getResourceAsStream("db.properties") 加载源文件放到输入流中
        InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("db.properties");

        // 读取进来进行解析 创建 Property 对象
        // 使用对象对于数据流进行操作
        Properties properties = new Properties();

        // 加载流文件
        try {
            properties.load(is);

            // 加载进了文件之后,读取到相关的值:键值 driver 解析出来
            driver = properties.getProperty("driver");
            url = properties.getProperty("url");
            username = properties.getProperty("username");
            password = properties.getProperty("password");

            Class.forName(driver);

            System.out.println("驱动加载成功!");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("加载流文件失败!");
        }
    }

    // 获得连接对象的方法
    public static Connection getConnection(){
        try {
            System.out.println("数据库连接成功!");
            return DriverManager.getConnection(url,username,password);

        } catch (SQLException throwables) {
            System.out.println("数据库连接失败!");
            throwables.printStackTrace();
        }
        // 保证了连接不成功也有返回值,不然的话只有运行成功才有返回值是不正确的,编译会报错
        return null;
    }
}

5 小笔记,敲代码过程中

5.1 键值

关于键值,Java 语言的配置文件,数据库的名字,位置,用户名,密码等的配置
1、Properties 类位于 java.util.Properties ,是Java 语言的配置文件所使用的类;
2、Xxx.properties 为Java 语言常见的配置文件,如数据库的配置 jdbc.properties;
3、系统参数配置 system.properties
4、这里,讲解一下Properties 类的具体使用。
以key=value 的 键值对的形式进行存储值 key值不能重复

举例如下:(左边是键。右边是值)
        (键值对相当于函数中的映射,键和值进行一一对应,唯一的对应)
    username=root
    password=9842213764

5.2 idea 中的 target 文件夹的作用

这个是intellij IDEA默认的编译路径,就是存放class或者包文件的地方,是IDE自动生成的

5.3 Utility 表示创建出来的实用工具

所以在开发的时候命名时后面为Utils

5.4 JDBC

全称为Java DataBase Connectivity standard, 它是一个面向对象的应用程序接口(API), 通过它可访问各类关系数据库。JDBC也是java核心类库的一部分

6 附录 本测试的文件组织形式

本测试的目录形式如下:
注:db.properties 的放置位置
数据库的驱动程序放在 lib 中,具体的驱动包参考其他博客
在这里插入图片描述

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值