JDBC---学习Jdbc如何操作连接数据库

什么是jdbc?

Java Database Connectivity ,Java数据库连接 ,简称JDBC

  • 是Java和数据库之间的一个桥梁,是一个规范而不是一个实现,能够执行SQL语句。它由一组用Java语言编写的类和接口组成。各种不同类型的数据库都有相应的实现,本文中的代码都是针对MySQL数据库实现的。
  • Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如`查询和更新数据库中数据的方法

什么是数据库驱动?

数据库提供商对JDBC接口的实现类,如mysql,oracle,sqlserver


//接口interface 
public interface JdbcApi{
    
    
	public void update();
}

//接口不能直接创建对象
JdbcApi api = new JdbcApi();
api.update();

//Mysql厂商
public class MysqlJdbc implements JdbcApi{
    
    
	public void update(){
    
    
		//用Mysql写的代码
	}
}
MysqlJdbc api = new MysqlJdbc();
api.update();

//Oracle 厂商
public class OracleJdbc implements JdbcApi{
    
    
	public void update(){
    
    
		//用OracleJdbc写的代码
	}
}
OracleJdbc api = new OracleJdbc();
api.update();


Jdbc操作数据库原理图

  • Jdbc如何操作Mysql?
    • 1 加载数据库驱动
    • 2 创建并获取数据库链接
    • 3 创建jdbc statement对象
    • 4 设置sql语句
    • 5 设置sql语句中的参数(使用preparedStatement)
    • 6 通过statement执行sql并获取结果
    • 7 对sql执行结果进行解析处理
    • 8 释放资源(resultSet、preparedstatement、connection)
      在这里插入图片描述

Jdbc连接池原理图

  • (1)频繁创建连接,销毁连接造成极大资源开销
  • (2)连接池,即一个集合,可以管理连接对象
  • (3)有什么特点?
    - 1 可以初始化指定数量的连接
    - 2 可以指定集合的最大元素个数
    - 3 可以申请连接池的连接
    - 4 不用的连接可以放回连接池

在这里插入图片描述

Jdbc代码分析总结

  • (1)jdbc 做一个根据名称查询用户的操作搜索
  • (2)初始化数据库
CREATE DATABASE mybatis01;
USE mybatis01;

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` INT(11) PRIMARY KEY  AUTO_INCREMENT,
  `username` VARCHAR(32) ,
  `birthday` DATE,
  `sex` CHAR(1) ,
  `address` VARCHAR(256)
) 
INSERT INTO `user` VALUES ('1', '王五', '2014-07-10', '2', NULL);
INSERT INTO `user` VALUES ('10', '张三', '2014-08-11', '1', '北京市');
INSERT INTO `user` VALUES ('16', '张小明', '2015-07-10', '1', '河南郑州');
INSERT INTO `user` VALUES ('22', '陈小明', '2016-07-10', '2', '重庆');
INSERT INTO `user` VALUES ('24', '张三丰', '2019-07-10', '1', '天津');
INSERT INTO `user` VALUES ('25', '陈小明', '2019-07-10', '1', '杭州');
INSERT INTO `user` VALUES ('26', '王五', '2018-07-10', NULL, NULL);
INSERT INTO `user` VALUES ('27', '李四', '2017-07-10', '2', '天津');
INSERT INTO `user` VALUES ('28', '赵六', '2016-07-10', '1', '上海');
INSERT INTO `user` VALUES ('29', '张朋', '2018-07-10', '1', '云南');
INSERT INTO `user` VALUES ('30', '李威', '2015-07-10', '2', '西藏');
INSERT INTO `user` VALUES ('31', '张明', '2016-07-10', '1', '台湾');
INSERT INTO `user` VALUES ('32', '陈明', '2013-07-10', '2', '武汉');
  • (3)配置mysql驱动依赖
    - 创建maven工程,再创建web01模块
    在这里插入图片描述
    - 配置依赖
    pom.xml
 <properties>
    <mysql.version>5.1.32</mysql.version>
  </properties>
 <!-- MySql -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>${
    
    mysql.version}</version>
    </dependency>

在这里插入图片描述

  • (4)分析jdbc编写操作数据库代码的可改进地方
    - 1 频繁创建、释放数据库连接 ,性能开销大 没有自带连接池
    - 2 Sql语句写在java代码中 ,硬编码
    - 3 sql语句的where条件与占位符赋值没有写判断逻辑
    - 4 数据库记录需封装成pojo对象 User类
    在这里插入图片描述
import org.junit.Test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class TestJdbc {
    
    
    @Test
    public void test01() throws Exception {
    
    
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        // 加载数据库驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 通过驱动管理类获取数据库链接
        connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis01?characterEncoding=utf-8", "root", "123456");
        // 定义SQL语句 ?表示占位符
        String SQL = "select * from user where username = ?";


        // 获取预处理statement
        preparedStatement = connection.prepareStatement(SQL);
        // 设置参数,第一个参数为SQL语句中参数的序号(从1开始),第二个参数为设置的参数值
        preparedStatement.setString(1, "王五");
        // 向数据库发出SQL执行查询,查询出结果集
        resultSet = preparedStatement.executeQuery();
        // 遍历查询结果集
        while (resultSet.next()) {
    
    
            System.out.println(resultSet.getString("id") + "  " + resultSet.getString("username"));
        }
        // 释放资源
        resultSet.close();
        preparedStatement.close();
        connection.close();
    }

关于JDBC的学习今天就这么多,欢迎评论区讨论哦。

猜你喜欢

转载自blog.csdn.net/qq_41209886/article/details/108781094