MySQL终章(8)JDBC

目录
1.前言
2.正文
2.1JDBC概念
2.2三种编码方式
2.2.1第一种
2.2.2第二种(优化版)
2.2.3第三种(更优化版)
3.小结
1.前言
哈喽大家好吖,今天来给大家带来Java中的JDBC的讲解,之前学习的都是操作数据库的sql语言,那么我们如何通过程序来操作数据库呢?就是通过JDBC了,正文开始。
2.正文
2.1JDBC概念
JDBC是干什么的呢?
目的:使Java程序能够通过统一接口访问多种关系型数据库(如MySQL、Oracle、PostgreSQL等)。
核心思想:通过驱动(Driver)实现与具体数据库的解耦,开发者只需调用JDBC API,无需关心底层数据库差异。
访问数据库的常用流程:
- 确定数据库服务器的地址,端口号。(数据源)
- 建立连接,用户名,密码。(不同的数据库以哪种协议建立连接)(数据库连接)
- 发送要执行的SQL。(以什么样的形式发送,这里主要考虑编码的格式,即协议)(执行对象)
- 接收返回结果 (结果集,受影响的行数) 以哪种协议解析结果。 (结果集)
- 关闭连接。(释放资源,关闭连接)
JDBC是JAVA平台提供的接口,具体的实现是由数据库厂商去完成的。
2.2三种编码方式
在JDBC前记得先在maven中导入jar包:
Maven Repository: Search/Browse/Explore
https://mvnrepository.com/pom文件是这样:
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version>
</dependency>
测试的数据库代码我也在这里先提供给大家:
create database StudyRoom;
use StudyRoom;
-- 用户表
CREATE TABLE users (user_id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) UNIQUE NOT NULL,password VARCHAR(255) NOT NULL,phone VARCHAR(20) UNIQUE NOT NULL,email VARCHAR(100),school VARCHAR(100),points INT DEFAULT 0
);INSERT INTO users values(01,'tom','12345','123456789','@123456789','HEDU',10)
正式开始:
2.2.1第一种
代码:
import java.sql.*;
import java.text.MessageFormat;
import java.util.Scanner;public class jdbc1 {public static void main(String[] args) {Connection connection = null;Statement statement = null;ResultSet resultSet = null;try {// 1. 加载数据库厂商提供的驱动Class.forName("com.mysql.cj.jdbc.Driver");// 2. 获取数据库连接connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/studyroom?characterEncoding=utf8" +"&allowPublicKeyRetrieval=true&useSSL=false", "root", "123456");// 3. 创建Statement对象statement = connection.createStatement();// 4. 定义SQL并执行SQL语句System.out.println("请输入学生编号:");Scanner scanner = new Scanner(System.in);// 接收用户的输入int id = scanner.nextInt();String sql = "select user_id, username, password, phone, email, school, points from users where user_id = '" + id + "'";// 5. 执行SQL,获取查询结果resultSet = statement.executeQuery(sql);// 6. 对结果集进行遍历,获取数据// 如果一下条有记录,返回true,没有则返回falsewhile (resultSet.next()) {// 获取学生Idlong user_id = resultSet.getLong(1);String username = resultSet.getString(2);String password = resultSet.getString(3);String phone = resultSet.getString(4);String email = resultSet.getString(5);String school = resultSet.getString(6);long points= resultSet.getLong(7);System.out.println(MessageFormat.format("学生编号={0}, 姓名={1}, 密码={2}, 手机号={3}, 邮箱={4}, 学校={5}, 点数={6}", user_id, username, password, phone, email, school, points));}} catch (ClassNotFoundException e) {e.printStackTrace();} 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();}}}}
}
核心思路讲解:
1.加载数据库驱动
使用
Class.forName("com.mysql.cj.jdbc.Driver")加载 MySQL 数据库的 JDBC 驱动类,这是建立与 MySQL 数据库连接的必要步骤,让 Java 程序能够识别并使用 MySQL 的驱动来与数据库进行通信。2.获取数据库连接
通过
DriverManager.getConnection方法,使用数据库的 URL(包括数据库的地址、端口、数据库名以及一些连接参数,如字符编码、是否允许公钥检索、是否使用 SSL 等)、用户名和密码来获取与数据库的连接,将返回的连接赋值给 connection 对象。3.创建 Statement 对象
调用 connection 对象的
createStatement方法创建一个 Statement 对象,这个对象用于向数据库发送 SQL 语句并执行。4.定义 SQL 查询语句并执行
提示用户输入学生编号,并通过 Scanner 对象接收用户的输入。
根据用户输入的学生编号构建 SQL 查询语句,查询 users 表中对应学生编号的相关信息,包括 user_id、username、password、phone、email、school、points 等字段。
使用 statement 对象的
executeQuery方法执行构建好的 SQL 查询语句,将查询结果存储在 resultSet 对象中。5.处理查询结果
使用 while 循环和 resultSet 对象的
next方法遍历查询结果集,每次调用next方法都会将结果集中的指针向下移动一行,如果还有数据则返回 true,否则返回 false。在循环体内,使用 resultSet 对象的 get 系列方法(如
getLong、getString等)根据字段的顺序或列名获取每一行数据中的各个字段值。使用 MessageFormat.format 方法将获取到的字段值按照指定的格式(包含占位符)组合成一个字符串,并输出到控制台,显示学生的所有相关信息。
6.关闭资源
在 finally 块中,依次判断 resultSet、statement、connection 对象是否不为 null,如果不为 null,则分别调用它们的 close 方法关闭这些资源,释放数据库连接和相关资源,这是非常重要的一步,避免了资源泄漏的问题。即使在执行过程中出现异常,finally 块中的代码也会被执行,确保资源被正确关闭。
2.2.2第二种(优化版)
代码:
import com.mysql.cj.jdbc.MysqlDataSource;import javax.sql.DataSource;
import java.sql.*;
import java.text.MessageFormat;
import java.util.Scanner;public class jdbc2 {public static void main(String[] args) {// 定义MySQL数据源对象MysqlDataSource mysqlDataSource = new MysqlDataSource();// 设置数据库连接串mysqlDataSource.setURL("jdbc:mysql://127.0.0.1:3306/studyroom?characterEncoding=utf8" +"&allowPublicKeyRetrieval=true&useSSL=false");// 用户名mysqlDataSource.setUser("root");// 密码mysqlDataSource.setPassword("123456");// 定义JDBC的数据源对象DataSource dataSource = mysqlDataSource;// 定义连接对象Connection connection = null;// 定义预处理SQL执行对象PreparedStatement statement = null;// 定义结果集对象ResultSet resultSet = null;try {// 1. 通过数据源获取数据库连接connection = dataSource.getConnection();// 2. 获取预处理SQL执行对象//输入System.out.println("请输入学生编号:");Scanner scanner = new Scanner(System.in);int id = scanner.nextInt();// 定义要执行的SQLString sql = "select user_id, username, password, phone, email, school, points from users where user_id = ?";statement = connection.prepareStatement(sql);// 3. 用真实值替换占位符statement.setInt(1, id);// 4. 执行SQL,获取结果集resultSet = statement.executeQuery();// 5. 遍历结果集while (resultSet.next()) {// 获取学生Idlong user_id = resultSet.getLong(1);String username = resultSet.getString(2);String password = resultSet.getString(3);String phone = resultSet.getString(4);String email = resultSet.getString(5);String school = resultSet.getString(6);long points= resultSet.getLong(7);System.out.println(MessageFormat.format("学生编号={0}, 姓名={1}, 密码={2}, 手机号={3}, 邮箱={4}, 学校={5}, 点数={6}", user_id, username, password, phone, email, school, points));}} 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();}}}}
}
核心思路讲解:
1.配置数据库连接信息
创建
MysqlDataSource对象,通过设置其 URL、用户名和密码来配置数据库连接信息,这种方式将连接信息集中管理,使得代码更加清晰和易于维护,方便后续对连接信息的修改。2.获取数据库连接
将配置好的
MysqlDataSource对象赋值给DataSource类型的变量 dataSource,然后通过 dataSource 的getConnection方法获取数据库连接,这与直接使用DriverManager获取连接相比,更符合 JDBC 的最佳实践,便于后续进行连接池等高级功能的集成。3.使用 PreparedStatement 执行 SQL 语句
定义 SQL 语句时使用了占位符 "?",然后通过
connection.prepareStatement(sql)获取PreparedStatement对象,这种方式可以有效防止 SQL 注入攻击,因为 PreparedStatement 会对参数进行预编译和转义处理。使用
statement.setInt(1, id)将用户输入的学生编号设置到 SQL 语句的占位符位置,将参数与 SQL 语句分离,提高了代码的安全性和可读性。4.执行查询和处理结果
调用
statement.executeQuery()执行查询操作,获取结果集。遍历结果集的方式与之前的代码类似,通过
resultSet.next()移动指针并获取数据,然后使用MessageFormat.format方法输出格式化后的学生信息。5.关闭资源
在 finally 块中关闭资源的逻辑与之前代码相同,确保无论是否出现异常,都会关闭 resultSet、statement 和 connection 对象,释放数据库资源。
相比第一种有哪些优化呢?
数据库连接管理 :之前的代码直接通过
DriverManager.getConnection获取连接,而本代码使用了MysqlDataSource数据源来配置和获取连接,这种方式更灵活,便于后续进行连接池等优化,提高了代码的可维护性和可扩展性。SQL 注入防护 :之前的代码通过字符串拼接构建 SQL 语句,容易受到 SQL 注入攻击,而本代码使用了
PreparedStatement和参数占位符的方式,有效防止了 SQL 注入问题,增强了程序的安全性。代码可读性和可维护性 :通过将数据库连接信息集中配置在数据源中,以及使用 PreparedStatement 的参数设置方式,使得代码结构更加清晰,便于理解和后续的维护。
2.2.3第三种(更优化版)
我们发现,如果每一次尝试通过程序来操作数据库都要一次一次建立连接,代码会非常麻烦,于是我们引入连接池的概念,将连接数据库与释放资源的操作封装起来,这样就会非常方便。
代码结构:

DButil:
package utils;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;public class DButil {private static DataSource dataSource = null;private static final String URL = "jdbc:mysql://127.0.0.1:3306/studyroom?characterEncoding=utf8" +"&allowPublicKeyRetrieval=true&useSSL=false";private static final String USER = "root";private static final String PASSWORD = "123456";static {MysqlDataSource mysqlDataSource = new MysqlDataSource();mysqlDataSource.setURL(URL);mysqlDataSource.setUser(USER);mysqlDataSource.setPassword(PASSWORD);dataSource = mysqlDataSource;}private DButil(){}public static Connection getConnection() throws SQLException {return dataSource.getConnection();}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();}}}}
JDBC3:
package com.example.demo;import utils.DButil;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.MessageFormat;
import java.util.Scanner;public class jdbc3 {public static void main(String[] args) {Connection connection = null;PreparedStatement statement = null;try {connection = DButil.getConnection();String sql = "select user_id, username, password, phone, email, school, points from users where user_id = ?";statement = connection.prepareStatement(sql);Scanner scanner = new Scanner(System.in);int id = scanner.nextInt();statement.setInt(1,id);ResultSet resultSet = statement.executeQuery();while (resultSet.next()) {// 获取学生Idlong user_id = resultSet.getLong(1);String username = resultSet.getString(2);String password = resultSet.getString(3);String phone = resultSet.getString(4);String email = resultSet.getString(5);String school = resultSet.getString(6);long points= resultSet.getLong(7);System.out.println(MessageFormat.format("学生编号={0}, 姓名={1}, 密码={2}, 手机号={3}, 邮箱={4}, 学校={5}, 点数={6}", user_id, username, password, phone, email, school, points));}} catch (SQLException e) {e.printStackTrace();} finally {DButil.close(null,statement,connection);}}
}
代码核心思路:
DButil类(工具类)
功能 :
专门用于管理数据库连接和资源关闭的工具类,将数据库连接的获取和资源关闭的逻辑抽取出来,方便在多个地方复用,避免重复代码,提高代码的可维护性和复用性。
静态代码块初始化数据源 :
在类加载时,通过静态代码块创建并配置
MysqlDataSource对象,设置数据库的 URL、用户名和密码,并将其赋值给dataSource对象。这种方式确保数据源只初始化一次,提高了效率。私有构造方法 :
将构造方法私有化,防止外部创建该工具类的实例,因为工具类主要用于提供静态方法,不需要实例化。
获取数据库连接 :
提供
getConnection静态方法,通过调用dataSource.getConnection()向外提供数据库连接对象,方便其他类使用。关闭资源 :
提供
close静态方法,接收ResultSet、Statement和Connection对象作为参数,并依次判断它们是否不为 null,若不为 null 则关闭它们,释放资源。这样统一管理资源关闭逻辑,避免资源泄漏。
jdbc3类(主程序类):
功能 :
使用
DButil工具类获取数据库连接,并通过PreparedStatement执行 SQL 查询语句,根据用户输入的学生编号查询学生信息并输出。获取数据库连接 :
调用
DButil.getConnection()方法获取数据库连接,而不是像之前的代码直接在主程序中配置连接信息和创建连接,这样使得数据库连接的获取更加规范和集中管理。执行 SQL 查询 :
定义 SQL 语句时继续使用占位符 "?",并通过
connection.prepareStatement(sql)获取PreparedStatement对象,然后使用statement.setInt(1, id)设置参数值,有效防止 SQL 注入,同时提高代码的可读性和安全性。处理查询结果和关闭资源 :
执行查询获取结果集后,遍历结果集并输出学生信息,这部分逻辑与之前的代码类似。
在 finally 块中调用
DButil.close方法关闭资源,而不是像之前在主程序中手动关闭,简化了资源关闭的代码,减少了出错的可能性。
优化点:
代码复用和单一职责 :将数据库连接的获取和资源关闭的逻辑抽取到专门的
DButil工具类中,遵循单一职责原则,使每个类的职责更加明确,提高了代码的复用性。在之前的代码中,这些逻辑都分散在主程序中,导致代码重复且不易维护。资源管理更规范 :通过工具类统一管理资源关闭,确保在任何情况下(即使出现异常)都能正确关闭资源,避免资源泄漏的问题。之前的代码虽然也有在 finally 块中关闭资源,但随着项目规模的扩大和复杂性的增加,这种方式容易出现遗漏或错误。
提高可维护性和可扩展性 :如果将来需要更改数据库连接信息或切换数据库类型,只需修改
DButil类中的相关配置即可,而无需修改每个使用数据库连接的地方,大大提高了代码的可维护性和可扩展性。
运行截图:
3.小结
今天的分享到这里就结束了,喜欢的小伙伴点点赞点点关注,你的支持就是对我最大的鼓励,大家加油!
相关文章:
MySQL终章(8)JDBC
目录 1.前言 2.正文 2.1JDBC概念 2.2三种编码方式 2.2.1第一种 2.2.2第二种(优化版) 2.2.3第三种(更优化版) 3.小结 1.前言 哈喽大家好吖,今天来给大家带来Java中的JDBC的讲解,之前学习的都是操作…...
点云数据处理开源C++方案
一、主流开源库对比 库名称特点适用场景开源协议活跃度PCL功能最全,算法丰富科研、工业级应用BSD★★★★★Open3D现代API,支持Python绑定快速开发、深度学习MIT★★★★☆CGAL计算几何算法强大网格处理、高级几何运算GPL/LGPL★★★☆☆PDAL专注于点云…...
Python 爬虫如何伪装 Referer?从随机生成到动态匹配
一、Referer 的作用与重要性 Referer 是 HTTP 请求头中的一个字段,用于标识请求的来源页面。它在网站的正常运行中扮演着重要角色,例如用于统计流量来源、防止恶意链接等。然而,对于爬虫来说,Referer 也可能成为被识别为爬虫的关…...
【MySQL】表的约束(主键、唯一键、外键等约束类型详解)、表的设计
目录 1.数据库约束 1.1 约束类型 1.2 null约束 — not null 1.3 unique — 唯一约束 1.4 default — 设置默认值 1.5 primary key — 主键约束 自增主键 自增主键的局限性:经典面试问题(进阶问题) 1.6 foreign key — 外键约束 1.7…...
基于STC89C52RC和8X8点阵屏、独立按键的小游戏《打砖块》
目录 系列文章目录前言一、效果展示二、原理分析三、各模块代码1、8X8点阵屏2、独立按键3、定时器04、定时器1 四、主函数总结 系列文章目录 前言 用的是普中A2开发板,外设有:8X8LED点阵屏、独立按键。 【单片机】STC89C52RC 【频率】12T11.0592MHz 效…...
数字电子技术基础(五十)——硬件描述语言简介
目录 1 硬件描述语言简介 1.1 硬件描述语言简介 1.2 硬件编程语言的发展历史 1.3 两种硬件描述的比较 1.4 硬件描述语言的应用场景 1.5 基本程序结构 1.5.1 基本程序结构 1.5.2 基本语句和描述方法 1.5.3 仿真 1 硬件描述语言简介 1.1 硬件描述语言简介 硬件描述语…...
【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件common.py解读
【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件common.py解读 文章目录 【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件common.py解读前言autopad函数Conv类__init__成员函数forward成员函数forward_fuse成员函数 Bottleneck类__init__成员…...
16.Chromium指纹浏览器开发教程之WebGPU指纹定制
WebGPU指纹概述 WebGPU是下一代的Web图形和计算API,旨在提供高性能的图形渲染和计算能力。它是WebGL的后继者,旨在利用现代GPU的强大功能,使得Web应用能够实现接近原生应用的图形和计算性能。而且它是一个低级别的API,可以直接与…...
示例:spring 纯xml配置
以下是一个完整的 纯 XML 配置开发示例,涵盖 DAO、Service、Controller 层,通过 Spring XML 配置实现依赖注入和事务管理,无需任何注解。 1. 项目结构 src/main/java ├── com.example.dao │ └── UserDao.java # DAO 接口…...
SQL预编译——预编译真的能完美防御SQL注入吗
SQL注入原理 sql注入是指攻击者拼接恶意SQL语句到接受外部参数的动态SQL查询中,程序本身 未对插入的SQL语句进行过滤,导致SQL语句直接被服务端执行。 拼接的SQL查询例如,通过在id变量后插入or 11这样的条件,来绕过身份验证&#…...
系统架构师2025年论文《论基于UML的需求分析》
论基于构件的软件开发 摘要: 2011 年 3 月,我有幸参加了某市医院预约挂号系统项目的开发工作,并担任系统架构师一职,负责系统的架构设计及核心构件的开发工作。该项目是某市医院为提升患者就医体验、优化挂号流程而委托开发的,项目于 2011 年底验收,满足了医院及患者提…...
运行neo4j.bat console 报错无法识别为脚本,PowerShell 教程:查看语言模式并通过注册表修改受限模式
无法将“D:\neo4j-community-4.4.38-windows\bin\Neo4j-Management\Get-Args.ps1”项识别为cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 前提配置好环境变量之后依然报上面的错…...
【EDA软件】【设计约束和分析操作方法】
1. 设计约束 设计约束主要分为物理约束和时序约束。 物理约束主要包括I/O接口约束(如引脚分配、电平标准设定等物理属性的约束)、布局约束、布线约束以及配置约束。 时序约束是FPGA内部的各种逻辑或走线的延时,反应系统的频率和速度的约束…...
【Lua】Lua 入门知识点总结
Lua 入门学习笔记 本教程旨在帮助有编程基础的学习者快速入门Lua编程语言。包括Lua中变量的声明与使用,包括全局变量和局部变量的区别,以及nil类型的概念、数值型、字符串和函数的基本操作,包括16进制表示、科学计数法、字符串连接、函数声明…...
Godot学习-关于3D模型选择问题
下面是OBJ、glTF/GLB、BLEND和FBX四种3D模型格式的比较表格,以便更直观地了解它们之间的差异: 特性/格式OBJglTF / GLBBLENDFBX文件类型文本文本/二进制二进制二进制几何数据支持支持支持支持材质支持基础高级(PBR等)完整支持高级…...
光谱相机在肤质检测中的应用
光谱相机在肤质检测中具有独特优势,能够通过多波段光谱分析皮肤深层成分及生理状态,实现非侵入式、高精度、多维度的皮肤健康评估。以下是其核心应用与技术细节: 一、工作原理 光谱反射与吸收特性: 血红蛋白&a…...
IDEA 插件推荐清单(2025)
IDEA 插件推荐清单 精选高效开发必备插件,提升 Java 开发体验与效率。 参考来源:十六款好用的 IDEA 插件,强烈推荐!!!不容错过 代码开发助手类 插件名称功能简介推荐指数CodeGeeX智能代码补全、代码生成、…...
机器学习第一篇 线性回归
数据集:公开的World Happiness Report | Kaggle中的happiness dataset2017. 目标:基于GDP值预测幸福指数。(单特征预测) 代码: 文件一:prepare_for_traning.py """用于科学计算的一个库…...
CS144 Lab1实战记录:实现TCP重组器
文章目录 1 实验背景与要求1.1 TCP的数据分片与重组问题1.2 实验具体任务 2 重组器的设计架构2.1 整体架构2.2 数据结构设计 3 重组器处理的关键场景分析3.1 按序到达的子串(直接写入)3.2 乱序到达的子串(需要存储)3.3 与已处理区…...
Linux安装mysql_exporter
mysqld_exporter 是一个用于监控 MySQL 数据库的 Prometheus exporter。可以从 MySQL 数据库的 metrics_schema 收集指标,相关指标主要包括: MySQL 服务器指标:例如 uptime、version 等数据库指标:例如 schema_name、table_rows 等表指标:例如 table_name、engine、…...
BeautifulSoup 库的使用——python爬虫
文章目录 写在前面python 爬虫BeautifulSoup库是什么BeautifulSoup的安装解析器对比BeautifulSoup的使用BeautifulSoup 库中的4种类获取标签获取指定标签获取标签的的子标签获取标签的的父标签(上行遍历)获取标签的兄弟标签(平行遍历)获取注释根据条件查找标签根据CSS选择器查找…...
HTTP的Header
一、HTTP Header 是什么? HTTP Header 是 HTTP 协议中的头部信息部分,位于请求或响应的起始行之后,用来在客户端(浏览器等)与服务器之间传递元信息(meta-data)(简单理解为传递信息的…...
linux虚拟机网络问题处理
yum install -y yum-utils \ > device-mapper-persistent-data \ > lvm2 --skip-broken 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http://mirrorlist.centos.org/?release7&arch…...
unet算法发展历程简介
UNet是一种基于深度学习的图像分割架构,自2015年提出以来经历了多次改进和扩展,逐渐成为医学图像分割和其他精细分割任务的标杆。以下是UNet算法的主要发展历程和关键变体: 1. 原始UNet(2015) 论文: U-Net: Convoluti…...
基于华为云 ModelArts 的在线服务应用开发(Requests 模块)
基于华为云 ModelArts 的在线服务应用开发(Requests 模块) 一、本节目标 了解并掌握 Requests 模块的特点与用法学会通过 PythonRequests 访问华为云 ModelArts 在线推理服务熟悉 JSON 模块在 Python 中的数据序列化与反序列化掌握 Python 文件 I/O 的基…...
【Rust】基本概念
目录 第一个 Rust 程序:猜数字基本概念变量和可变性可变性常量变量隐藏 数据类型标量类型整型浮点型数值运算布尔型字符类型 复合类型元组数组 函数参数语句与表达式函数返回值 控制流使用 if 表达式控制条件if 表达式使用 else if 处理多重条件在 let 语句中使用 i…...
AI-Sphere-Butler之如何使用Llama factory LoRA微调Qwen2-1.5B/3B专属管家大模型
环境: AI-Sphere-Butler WSL2 英伟达4070ti 12G Win10 Ubuntu22.04 Qwen2.-1.5B/3B Llama factory llama.cpp 问题描述: AI-Sphere-Butler之如何使用Llama factory LoRA微调Qwen2-1.5B/3B管家大模型 解决方案: 一、准备数据集我这…...
C++学习之游戏服务器开发十四QT登录器实现
目录 1.界面搭建 2.登录客户端步骤分析 3.拼接登录请求实现 4.发送http请求 5.服务器登录请求处理 6.客户端处理服务器回复数据 7.注册页面启动 8.qt启动游戏程序 1.界面搭建 查询程序依赖的动态库 ldd 程序名 do 1 cdocker rm docker ps -aq 静态编译游戏服务程序&a…...
协同推荐算法实现的智能商品推荐系统 - [基于springboot +vue]
🛍️ 智能商品推荐系统 - 基于springboot vue 🚀 项目亮点 欢迎来到未来的购物体验!我们的智能商品推荐系统就像您的私人购物顾问,它能读懂您的心思,了解您的喜好,为您精心挑选最适合的商品。想象一下&am…...
【LLM】Ollama:容器化并加载本地 GGUF 模型
本教程将完整演示如何在支持多 GPU 的环境下,通过 Docker 实现 Ollama 的本地化部署,并深度整合本地 GGUF 模型。我们将构建一个具备生产可用性的容器化 LLM 服务,包含完整的存储映射、GPU 加速配置和模型管理方案。 前提与环境准备 操作系统…...
