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

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

程序员文章站 2024-01-26 15:25:34
...

什么是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---学习Jdbc如何操作连接数据库

Jdbc连接池原理图

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

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

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模块
    JDBC---学习Jdbc如何操作连接数据库
    - 配置依赖
    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>

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

  • (4)分析jdbc编写操作数据库代码的可改进地方
    - 1 频繁创建、释放数据库连接 ,性能开销大 没有自带连接池
    - 2 Sql语句写在java代码中 ,硬编码
    - 3 sql语句的where条件与占位符赋值没有写判断逻辑
    - 4 数据库记录需封装成pojo对象 User类
    JDBC---学习Jdbc如何操作连接数据库
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的学习今天就这么多,欢迎评论区讨论哦。

上一篇: Filter 过滤器的介绍及使用

下一篇: