天天看点

Java基础-JDBC相关知识点Java基础-JDBC相关知识点

Java基础-JDBC相关知识点

前言

Java基础篇JDBC,JDBC操作是比较常见的,但是因为我们想在一般都是用Spring+SpringMVC + Mybatis,和连接池C3p0(Spring一般是这个)。存的JDBC操作在工作中是很少见的。但是我们了解下下。不能只知道黄焖排骨好吃,但是不知道猪长啥样吧。

比较简单

Java基础-JDBC相关知识点Java基础-JDBC相关知识点

1. JDBC概述

JDBC API是Java与数据库交互的接口

接口是由各类数据厂商实现的,(这篇博客用的是MySQL数据库)。JDBC定义了接口。Connecion,Statement,ResultSet都是接口。具体的实现得看数据库厂商的。就是那个jar包。

说到Jar包,估计想在一般都是用idea,Maven工具,都是自动管理jar包,我们在pom.xml写点配置,人家自然帮我搞定。许多人估计都不知道不同maven该怎么做。不知道耶没关系,因为这并不是什么特殊或者说非常重要的小操作。需要的时候再去做就好了。我这里给个链接,用的其实很少IDEA导入JDBC驱动的jar包。这个是我看到的一篇博客,总结的挺不错的。包括下载jar包,如何导入

1.1 JDBC操作步骤

  1. 导入MySQL驱动包 ---->IDEA导入JDBC驱动的jar包。
  2. 注册驱动程序(现在驱动程序会自动注册) ~

    Class.forName("com.mysql.cj.jdbc.Driver");

    ~ 这一步其实可以省略,在Java核心技术卷二看到的,鲜为人知。小tips
  3. 获取与数据库的连接

    Connection connection = DriverManager.getConnection(url,username,password);

  4. 编辑SQL语句
  5. 执行SQL语句,(以及获取SQL结果)

    resultSet = statement.executeQuery(sql);

  6. 关闭连接

    resultSet.close(); statement.close(); connection.close();;

1.2 JDBC操作示例

package com.java.basic.jdbc;

import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.sql.*;
import java.util.Properties;

//连接数据库
public class MyMySQLConnect {
	//原来是用的直接给链接的型,后面又练习了下读取配置表的方式
    /*private final static String MySQL_USERNAME = "root";
    private final static String MySQL_PASSWORD = "[email protected]";
    private final static String MySQL_URL = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
*/
    public Connection getConnection() throws IOException, SQLException {
    	//读取配置表方式获取链接
        Properties jdbc_properties = new Properties();
        try(InputStream in = Files.newInputStream(Paths.get("D:\\workproject\\MyNote\\sources\\MySQL.properties"))) {
            jdbc_properties.load(in);
        }
        String url = jdbc_properties.getProperty("jdbc.url");
        String username = jdbc_properties.getProperty("jdbc.username");
        String password = jdbc_properties.getProperty("jdbc.password");

        return DriverManager.getConnection(url,username,password);

    }
    public static void main(String[] args) throws SQLException, IOException {
        MyMySQLConnect myMySQLConnect = new MyMySQLConnect();


        Connection connection = myMySQLConnect.getConnection();;
        Statement statement = null;
        ResultSet resultSet = null;

        try {
            //我在Java核心技术卷二里看到说JDBC文件会自动注册,然后我试了下,把下面这一行删除掉,程序还是可以运行的
            //作者说自动注册是个鲜为人知的特性
            //Class.forName("com.mysql.cj.jdbc.Driver");
            //connection = DriverManager.getConnection(MySQL_URL,MySQL_USERNAME,MySQL_PASSWORD);
            String sql = "select * from user";

            statement = connection.createStatement();
            //execute()没有返回值
            //statement.execute("INSERT into USER(username,mobilenum,remarks)VALUES('李四','18871719999','第二次插入数据');");
            //executeQuery增删改查都可以用,但是查询只能用这个,因为就这个有返回值 ResultSet型的

            resultSet = statement.executeQuery(sql);
            while (resultSet.next()){
                System.out.println(resultSet.getInt("id"));
                System.out.println(resultSet.getString("username"));
                System.out.println(resultSet.getString("mobilenum"));
                System.out.println(resultSet.getString("remarks"));

            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            resultSet.close();
            statement.close();
            connection.close();;

        }
    }
}

           

2. 主要使用对象

JDBC操作的主要就是下面三个接口对应的对象。接口是用数据库厂商实现的,Java只提供了接口。可以看看源码包java.sql下面。主要就这三个。用IEDA 的【ctrl+鼠标左键 】需要选择对象,就可以直接跳到源码了,很方便。我下面的东西也是吧源码扣出来一部分

2.1 Connection对象

原文:

A connection (session) with a specific database. SQL statements are executed and results are returned within the context of a connection.

意思就是说:与特定数据库的连接(会话)。执行SQL语句并在连接的上下文中返回结果。

是一个一个数据库连接。主要用来连接数据库,以及提交会话

常用方法:

**close()**关闭连接

**createStatement()**返回Statement对象

**prepareStatement(String)**返回prepareStatement对象

还有一些和事务相关的方法,下面事务会写

2.2 Statement对象

原文:

The object used for executing a static SQL statement and returning the results it produces.

意思是:用于执行静态语句的对象,以及返回一个ResultSet结果集

就是一个用来执行语句的对象

常用方法:

void close() 关闭该对象

ResultSet executeQuery(String sql) 执行语句 增删改查都可以,但是查询只能用这个,因子只有它有返回值

int executeUpdate(String sql) 增删改

下面连个方法得配合着用,上面一个执行的语句,下面方法查看结果(得是一个statement)

boolean execute(String sql)

ResultSet getResultSet()

用于批处理方法

void addBatch( String sql ) 可以添加多个语句

int[] executeBatch() 多个语句一起执行

void clearBatch() 情况批处理语句

2.3 ResultSet对象

原文:

A table of data representing a database result set, which is usually generated by executing a statement that queries the database.

意思是:表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。

用来存储结果集的,但是一般我们只关注查询语句的结果,其他语句其实也没啥结果给我们看。

3. 事务和数据库连接池

其实就是利用Connection对象的方法

commit()提交事务

rollback()回滚事务

setSavepoint()事务的保存点

setAutoCommit(boolean autoCommit)设置事务是否自动提交

事务隔离级别 看另外一篇------》基础篇-MySQL简介 (Java面试,MySQL高频知识点:事务特点ACID,事务隔离级别,存储引擎,数据库锁)

数据库连接池可以参照线程池理解,我不是很想写这个

一般有DBCP和C3P0两种,后者用的普遍些

4. 小结

JDBC内容其实比较简单,但是很多人以为自己不知道,因为用的都是SSM框架,已经封装的比较好。但是我们肯定都用过,不然怎么CRUD

其实没什么内容

后续想到什么东西在补充把

总目录:Java进阶之路-目录

水不在深,有龙则灵
                《陋室铭》
                博主:五更依旧朝花落
                首次发布时间:2020年4月16日23:29:23
                末次更新时间: