【MySQL】从连接数据库开始:JDBC 编程入门指南

【MySQL】从连接数据库开始:JDBC 编程入门指南

个人主页♡喜欢做梦

欢迎  👍点赞  ➕关注  ❤️收藏  💬评论


目录

🌟一、什么是JDBC?

🌟二、JDBC编程的步骤

✨使用步骤

✨DriverManger

💫定义

💫DriverManger的主要功能

💫DriverManger的核心方法

💫使用

✨DataSource

💥定义

💥使用 

💥代码优化

✨DriverManger和DataSource的区别


🌟一、什么是JDBC?

JDBC(Java Data Base Connectivity,Java数据库连接)是Java程序和数据库之间的桥梁,也就是Java语言操作数据库的标准API,他提供了一套用于执行SQL语句的Java接口。JDBC的主要作用就是:与数据库连接、发送SQL语句和处理数据库执行结果。

🌟二、JDBC编程的步骤

✨使用步骤

1.加载数据库厂商的驱动包

2.建立连接,用户名,密码

3.创建Statement

4.发送要执行的SQL语句

5.接收返回结果并显示(结果集,受影响的行数)

6.释放资源和关闭连接

✨DriverManger

💫定义

DriverManger是JDBC中的一个核心类,位于java.sql包下,他负责管理数据库驱动程序,并为客户端程序提供获取数据库连接的方法。它就像一个“驱动管理器”,协调不同数据库驱动与应用程序之间的交互。

💫DriverManger的主要功能

  • 注册数据驱动:管理 已加载的数据;
  • 获取数据库连接:根据连接信息(URL、用户名、密码)返回合适的Connection对象;
  • 处理驱动程序之间的竞争:当多个驱动可以连接到同一URL时,选择最合适的驱动。

URL表示统一资源定位符,是互联网上用来指定一个位置、文件或者资源的标准方式。 

💫DriverManger的核心方法

getConnection()

核心方法功能
getConnection(String url)通过URL获取连接
getConnection(String url,String  user,String password)通过URL、用户名和密码获取连接
getConnection(String url,Properties info)通过URL和包含连接属性的Properties对象获取连接
registerDriver(Driver driver)注册驱动(一般不用手动调用)
deregisterDriver(Driver driver)注销驱动
gerDrivers()获取所有已注册的驱动

💫使用

import java.sql.*; import java.text.MessageFormat; import java.util.Scanner; public class Demo1 { public static void main(String[] args) { //声明数据库操作的相关对象 //数据库连接对象 Connection connection=null; //执行静态SQL对象,但是SQL注入可能会出现一些问题 Statement statement= null; //对静态SQL的解决方法,预处理 PreparedStatement preparedStatement=null; //查询结果集对象 ResultSet resultSet=null; try{ //1,加载数据厂商提供的驱动:加载数据库提供的jdbc驱动类,注册到DriverManger中 Class.forName("com.mysql.cj.jdbc.Driver"); //2.获取数据库连接--相当于在数据库中写use java2; //数据库连接URL格式:jdbc:mysql://服务器地址:端口/数据库?参数名=值[&参数名=值] connection= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/java2?characterEncoding=utf8" + "&allowPublicKeyRetrieval=true&useSSL=false", "root", "123456"); //3.创建Statement对象:Statement用于像数据库发送SQL语句 statement = connection.createStatement(); //4.定义SQL语句并执行 System.out.println("请输入学生姓名:"); Scanner scanner =new Scanner(System.in); //接收用户输入 String name=scanner.next(); String sql="select id,name,class_id from students where+name+"'"; //5.执行SQL,获取查询结果 //executeQuery用于执行select语句,返回结果集 resultSet=statement.executeQuery(sql); //6.对结果集进行遍历获取结果 //有返回true,没有返回false while(resultSet.next()){ long id=resultSet.getLong(1);//获取第一列字段的值 String Stuname=resultSet.getString(2);//获取第二列字段的值 long class_id=resultSet.getLong(3);//获取第三列字段的值 System.out.println(MessageFormat.format("学生id={0},姓名={1},班级={2}",id,name,class_id)); } } catch (SQLException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); }finally{// 释放资源(从后往前释放),关闭连接 if(resultSet!=null){ try{ resultSet.close(); }catch (SQLException e){ e.printStackTrace(); } } if(statement!=null){ try { statement.close(); }catch (SQLException e){ e.printStackTrace(); } } if(connection!=null){ try { connection.close(); }catch (SQLException e){ e.printStackTrace(); } } } } }

✨DataSource

💥定义

是Java数据库连接(JDBC)的一个接口,用于获取数据库连接,可方便数据库连接资源,实现连接池等高级功能。

💥使用 

import com.mysql.cj.jdbc.MysqlDataSource; import javax.sql.DataSource; import java.sql.*; import java.text.MessageFormat; import java.util.Scanner; public class Demo { public static void main(String[] args) { //定义MySQL数据源对象 MysqlDataSource mysqlDataSource=new MysqlDataSource(); //MySQL驱动直连 //数据库连接 mysqlDataSource.setURL("jdbc:mysql://127.0.0.1:3306/java2?characterEncoding=utf8"); mysqlDataSource.setUser("root"); mysqlDataSource.setPassword("123456"); //定义jdbc数据源对象 DataSource dataSource=mysqlDataSource; Connection connection=null; //预处理 PreparedStatement statement=null; //查询结果集对象 ResultSet resultSet=null; try{ //1.获取数据库连接 connection= dataSource.getConnection(); //2.创建Statement对象:Statement用于像数据库发送SQL语句 //定义SQL语句并执行 String sql="select id,name,class_id from students where name=?"; statement = connection.prepareStatement(sql); //3.接收用户输入 System.out.println("请输入学生姓名:"); Scanner scanner =new Scanner(System.in); String name=scanner.next(); // 用真实值替换占位符 statement.setString(1,name); //4..执行SQL,获取查询结果 //executeQuery用于执行select语句,返回结果集 resultSet=statement.executeQuery(sql); //5.对结果集进行遍历获取结果 //有返回true,没有返回false while(resultSet.next()){ long id=resultSet.getLong(1);//获取第一列字段的值 String Stuname=resultSet.getString(2);//获取第二列字段的值 long class_id=resultSet.getLong(3);//获取第三列字段的值 System.out.println(MessageFormat.format("学生id={0},姓名={1},班级={2}",id,name,class_id)); } } catch (SQLException e) { e.printStackTrace(); } finally{// 释放资源(从后往前释放),关闭连接 if(resultSet!=null){ try{ resultSet.close(); }catch (SQLException e){ e.printStackTrace(); } } if(statement!=null){ try { statement.close(); }catch (SQLException e){ e.printStackTrace(); } } if(connection!=null){ try { connection.close(); }catch (SQLException e){ e.printStackTrace(); } } } } }

💥代码优化

封装

import com.mysql.cj.jdbc.MysqlDataSource; import javax.sql.DataSource; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Random; public class DB { //数据源 private static DataSource dataSource=null; //数据库连接串 private static final String url="jdbc:mysql://127.0.0.1:3306/java2?characterEncoding=utf8"; //用户 private static String user="root"; //密码 private static String password="123456"; //当类加载到JVM时,执行数据源的初始化 static { MysqlDataSource mysqlDataSource = new MysqlDataSource(); mysqlDataSource.setURL(url); mysqlDataSource.setUser(user); mysqlDataSource.setPassword(password); dataSource = mysqlDataSource; } public static void close(ResultSet resultSet, Statement statement, Connection connection){ if(resultSet!=null){ try{ resultSet.close(); }catch (SQLException e){ e.printStackTrace(); } } if(statement!=null){ try { statement.close(); }catch (SQLException e){ e.printStackTrace(); } } if(connection!=null){ try { connection.close(); }catch (SQLException e){ e.printStackTrace(); } } } //构造方法私有化,防止new这个对象 private DB(){}; //获取数据连接 public static Connection getConnection() throws SQLException{ return dataSource.getConnection(); } } 

使用jdbc插入数据 

import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Scanner; public class Demo3{ //插入数据 public static void main(String[] args) { Connection connection=null; PreparedStatement statement=null; //插入数据,不用获得结果集,要影响行数即可 try{ //获取数据库 connection=DB.getConnection(); //定义SQL String sql="insert into students(id,name,class_id) values(?,?,?)"; //定义SQL预处理对象 statement = connection.prepareStatement(sql); //接收用户参数 Scanner scanner = new Scanner(System.in); System.out.println("请输入id"); Long id= Long.valueOf(scanner.next()); System.out.println("请输入姓名"); String name= scanner.next(); System.out.println("请输入班级"); Long class_id= Long.valueOf(scanner.next()); //用真实数据代替占位符 statement.setLong(1,id); statement.setString(2,name); statement.setLong(3,class_id); //获取结果,影响的行数 //executeUpdate执行返回结果是一个整形,通常用于insert、delete、update int row=statement.executeUpdate(); //判断 if(row==1){ System.out.println("插入成功"); }else{ System.out.println("插入失败"); } } catch (SQLException e) { e.printStackTrace(); }finally { //关闭连接,释放资源 DB.close(null,statement,connection); } } }

✨DriverManger和DataSource的区别

  • DriverManger每次调用都会初始化一个新的连接,导致资源浪费;
  • DataSource使用连接池的技术,一个连接可以重复使用,用DataDource替代DriverManger.getConnection()直连方式,更直接,灵活。

Read more

AiOnly大模型深度测评:调用GPT-5 API+RAG知识库,快速构建智能客服机器人

AiOnly大模型深度测评:调用GPT-5 API+RAG知识库,快速构建智能客服机器人

声明:本测试报告系作者基于个人兴趣及使用场景开展的非专业测评,测试过程中所涉及的方法、数据及结论均为个人观点,不代表任何官方立场或行业标准。 引言 AI 技术加速渗透各行各业的今天,你是否也面临这样的困境:想调用 GPT-5、Claude4.5等顶尖模型却被海外注册、跨平台适配搞得焦头烂额?想快速搭建智能客服、内容生成工具,却因模型接口差异、成本不可控而望而却步?或是作为中小团队,既想享受 AI 红利,又受限于技术门槛和预算压力? AiOnly平台的出现,正是为了打破这些壁垒。 本文将从实战角度出发,带你全方位解锁这个「全球顶尖大模型 MaaS 平台」:从 5 分钟完成注册到 API 密钥创建,从单模型调用到融合 RAG 知识库的智能体开发,然后手把手教你在 Windows 环境部署一个日均成本不足 0.5 元的电商客服机器人。无论你是 AI 开发者、企业运营者,还是想低成本尝试 AI

By Ne0inhk
win11本地部署openclaw实操第2集-让小龙虾具有telegram机器人能力和搜索网站能力

win11本地部署openclaw实操第2集-让小龙虾具有telegram机器人能力和搜索网站能力

1 按照第一集的部署完成后,我们就开始考虑给小龙虾增加telegram机器人和搜索网站能力,实现效果如下: 2 telegram机器人能力部署 C:\Users\Administrator.openclaw的配置文件openclaw.json 增加一段内容 "channels":{"telegram":{"enabled": true, "dmPolicy":"pairing", "botToken":"你的telegram机器人的token", "groupPolicy":"allowlist", "streamMode":"partial", "network":{"

By Ne0inhk
【Nginx】——从0到1,带你玩转Nginx,掌握其中的技巧以及配置

【Nginx】——从0到1,带你玩转Nginx,掌握其中的技巧以及配置

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大三学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL,Java基础,Rust】 🎈热门专栏:🎊【Python,Javaweb,Springboot】  感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️ 目录 🎈概念 🎈下载 🎈上传安装 ✨开始安装 ✨ 目录结构 🎈 常用命令  ✨ 开启nginx  ✨ 看一下文件日志  ✨ 重新加载配置文件 ✨ 配置文件  🎈 配置文件结构 🎈具体应用 ✨ 部署静态资源 ✨ 反向代理 ✨ 负载均衡 🎈概念         Nginx(engine x)由俄罗斯的程序设计师Igor Sysoev所开发,官方测试显示Nginx能够支撑高达5万并发连接数。Nginx不仅可以作为HTTP服务器使用,处理静态页面或支持FastCGI、SCGI、uWSGI等协议的动态语言,还能充当反向代理服务器,实现负载均衡,以及提供IMAP/

By Ne0inhk
Spring Boot 日志配置详解:log4j2.xml 的完整配置指南

Spring Boot 日志配置详解:log4j2.xml 的完整配置指南

在现代企业级应用开发中,日志管理是系统运维和问题排查的重要组成部分。本文将详细介绍如何在 Spring Boot 项目中配置 Log4j2,包括完整的 [log4j2.xml]配置文件和相关依赖设置。 一、为什么选择 Log4j2? Spring Boot 默认使用 Logback 作为日志框架,但在某些场景下我们更倾向于使用 Log4j2: 1. 性能优势:Log4j2 使用异步日志记录,在高并发环境下性能表现更优 2. 无锁设计:采用 LMAX Disruptor 库实现无锁异步日志记录 3. 灵活配置:支持更丰富的日志过滤和格式化选项 4. 动态更新:配置文件修改后无需重启应用即可生效 二、Maven 依赖配置 1. 排除默认日志框架 首先需要排除 Spring Boot 默认的 Logback 依赖: <

By Ne0inhk