当前位置: 首页 > news >正文

Java原生JDBC概览

Java原生JDBC概览

一、是什么?

JDBC是Java DataBase Connectivity的缩写,它是Java程序访问数据库的标准接口。

Java代码并不是直接通过TCP连接去访问数据库,而是通过JDBC接口来访问,而JDBC接口则通过JDBC驱动来实现对数据库的访问。

例如访问MySQL,那么必须编写代码操作JDBC接口。注意到JDBC接口是Java标准库自带的,所以可以直接编译。而具体的JDBC驱动是由数据库厂商提供的。MySQL的JDBC驱动由Oracle提供。

访问某个具体的数据库只需要引入该厂商提供的JDBC驱动。这样保证了Java程序编写的是一套数据库访问代码,却可以访问各种不同的数据库,因为他们都提供了标准的JDBC驱动。

二、怎么用?

所谓JDBC驱动,其实就是一个第三方jar包,我们直接添加一个Maven依赖:

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version><scope>runtime</scope>
</dependency>

2.1 连接数据库

首先得先连接到数据库。打开一个Connection时,需要准备URL、用户名和口令。

URL是由数据库厂商指定的格式,MySQL的URL格式是:

jdbc:mysql://<hostname>:<port>/<db>?key1=value1&key2=value2

假设数据库运行在本机localhost,端口使用标准的3306,数据库名称是learnjdbc,那么URL如下:

jdbc:mysql://localhost:3306/learnjdbc?useSSL=false&characterEncoding=utf8

要获取数据库连接,使用如下代码:

// JDBC连接的URL, 不同数据库有不同的格式:
String JDBC_URL = "jdbc:mysql://localhost:3306/test";
String JDBC_USER = "root";
String JDBC_PASSWORD = "password";
// 获取连接:
Connection conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD);// TODO: 访问数据库// 关闭连接:
conn.close();

2.2 访问数据库操作

经典的数据库操作CRUD:创建、读取、更新和删除。

(1)创建Sql语句

User login(String name, String pass) {...String sql = "SELECT * FROM user WHERE login=? AND pass=?"; //?是占位符PreparedStatement ps = conn.prepareStatement(sql);ps.setObject(1, name); //索引从1开始ps.setObject(2, pass);...
}

(2)执行Sql语句

ResultSet rs = ps.executeQuery();

(3)获取返回结果

  while (rs.next()) {long id = rs.getLong("id");long grade = rs.getLong("grade");String name = rs.getString("name");String gender = rs.getString("gender");}

完整代码:

try (Connection conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD)) {try (PreparedStatement ps = conn.prepareStatement("SELECT id, grade, name, gender FROM students WHERE gender=? AND grade=?")) {ps.setObject(1, "M"); // 注意:索引从1开始ps.setObject(2, 3);try (ResultSet rs = ps.executeQuery()) {while (rs.next()) {long id = rs.getLong("id");long grade = rs.getLong("grade");String name = rs.getString("name");String gender = rs.getString("gender");}}}
}

相关文章:

Java原生JDBC概览

Java原生JDBC概览 一、是什么&#xff1f; JDBC是Java DataBase Connectivity的缩写&#xff0c;它是Java程序访问数据库的标准接口。 Java代码并不是直接通过TCP连接去访问数据库&#xff0c;而是通过JDBC接口来访问&#xff0c;而JDBC接口则通过JDBC驱动来实现对数据库的访…...

C# 跨线程访问UI组件,serialPort1串口接收数据

在Windows应用程序&#xff08;例如WinForms或WPF&#xff09;中&#xff0c;UI组件&#xff08;如按钮、文本框等&#xff09;都在主线程&#xff08;也称为UI线程&#xff09;上运行。当你在一个非UI线程&#xff08;例如&#xff0c;一个后台线程或者网络请求线程&#xff0…...

D - New Friends(AtCoder Beginner Contest 350)

题目链接: D - New Friends (atcoder.jp) 题目大意: 题目解析: 题目的大致意思: 假如A和B是朋友 B和C也是朋友 那么当A和C不是朋友的时候 可以通过B让A和C也成为朋友 问你增加了多少对的朋友关系 题目分析: 咱们可以从图论去考虑 当这一群是一个连通块 那么这一群点(人) 都…...

【FAQ】HarmonyOS SDK 闭源开放能力 —Account Kit(2)

1.问题描述&#xff1a; 怎么判断登录的华为帐号有变动&#xff1f; 解决方案&#xff1a; 华为帐号登录成功后会返回唯一标识OpenID和UnionID&#xff0c;如果切换不同的华为帐号登录&#xff0c;这个唯一标识会变。 OpenID是华为帐号用户在不同类型的产品的身份ID&#x…...

Web组态可视化编辑器 快速绘制组态图

演示地址&#xff1a;by组态[web组态插件] 随着工业智能制造的发展&#xff0c;工业企业对设备可视化、远程运维的需求日趋强烈&#xff0c;传统的单机版组态软件已经不能满足越来越复杂的控制需求&#xff0c;那么实现Web组态可视化界面成为了主要的技术路径。 行业痛点 对于…...

怎样在网上赚点零花钱?推荐十个正规的赚钱兼职平台

今天要和大家探讨一个激动人心的话题——网络赚钱。在这个互联网日新月异的时代&#xff0c;网络赚钱已经变成了触手可及的现实。如果你正打算在网上赚取一些额外收入&#xff0c;那么这篇文章绝对值得一读&#xff01; 在这个信息泛滥的时代&#xff0c;网络赚钱的机遇随处可…...

手动操作很麻烦?试试这个自动加好友神器吧!

你是不是也觉得手动逐一输入号码或是微信号&#xff0c;再搜索添加很麻烦&#xff1f;试试这个自动加好友神器——个微管理系统&#xff0c;帮助你省去繁琐的手工操作&#xff0c;节省时间和精力。 首先&#xff0c;在系统上登录微信号&#xff0c;无论你有多少个微信号&#…...

金额转大写

金额转大写 /*** 金额转大写* param n* returns {string}*/ export const moneyUppercase (n) > {let fraction [角, 分];let digit [零, 壹, 贰, 叁, 肆,伍, 陆, 柒, 捌, 玖];let unit [[圆, 万, 亿],[, 拾, 佰, 仟]];let head n < 0 ? 欠 : ;n Math.abs(n);let…...

vue的axios配置超时时间;单个接口配置响应时间

vue项目中axios请求统一配置了超时时间&#xff0c;单独接口请求时重设超时时间 根据官网推荐&#xff1a;axios中文文档 1.配置的优先顺序 配置会以一个优先顺序进行合并。这个顺序是&#xff1a;在 lib/defaults.js 找到的库的默认值&#xff0c;然后是实例的 defaults 属性&…...

leetcode-盛水最多的容器-109

题目要求 思路 1.正常用双循环外循环i从0开始&#xff0c;内循环从height.size()-1开始去计算每一个值是可以的&#xff0c;但是因为数据量太大&#xff0c;会超时。 2.考虑到超时&#xff0c;需要优化一些&#xff0c;比如第一个选下标1&#xff0c;第二个选下标3和第一个选下…...

VMware ESXi中安装Proxmox VE

0、巴拉巴拉 前几天某行业HW&#xff0c;闲暇的时候几个技术人员聊天&#xff0c;臭味相投的聊到自己玩的东西。有个玩家说家里用工作站安装Proxmox VE&#xff0c;然后在上面安装软路由、安装NAS。我以前一直想玩玩&#xff0c;没有付诸行动&#xff0c;所以也想弄个集中的方案…...

Java(其十二)--集合·初级

ArrayList集合 集合有很多种&#xff0c;ArrayList 是最常用的一种&#xff0c;集合的作用相当于C中的STL 最显著的特点就是&#xff1a;自动扩容。 一般定义式 ArrayList list new ArrayList(); //该 list 是可以储存各种类型的数据的&#xff0c;要想约束储存的数据&#x…...

疯狂“造人”!美国两党共推新法案,5年培养100万AI及量子人才

当前&#xff0c;全球量子计算人才的短缺已成为制约该领域快速发展的关键瓶颈。 为了解决量子计算人才短缺的问题&#xff0c;各国政府和企业采取了积极措施&#xff0c;加大了对量子教育和培训的投入。根据美国参议院官网消息&#xff0c;2024年5月23日&#xff0c;美国两党议…...

Python 文件操作指南:使用 open 和 with open 实现高效读写

&#x1f340; 前言 博客地址&#xff1a; CSDN&#xff1a;https://blog.csdn.net/powerbiubiu &#x1f44b; 简介 本系列文章主要分享文件操作&#xff0c;了解如何使用 Python 进行文件的读写操作&#xff0c;介绍常见文件格式的读取和写入方法&#xff0c;包括TXT、 CS…...

FasterNet代码阅读

FasterNet 类参数初始化 将图像切分为非重叠的图像块 PatchEmbed 类 将图像分解为非重叠的图像块有以下几个好处&#xff1a; 1. 缩小计算量&#xff1a;对于大尺寸的图像&#xff0c;直接对整个图像进行处理可能会导致计算和内存消耗过大。将图像切分为小块可以降低计算量…...

Rust开源Web框架Salvo源码编译

1.克隆源码: https://github.com/salvo-rs/salvo.git 2.进入salve目录并运行cargo build编译 编译成功 3.编译生成的库 4.安装salve-cli git clone --recursive https://github.com/salvo-rs/salvo-cli.git 编译salve-cli...

基于Java+SpringBoot+Mybaties-plus+Vue+elememt + uniapp 新闻资讯 的设计与实现

一.项目介绍 本系统分为 后端 和 小程序端 后端&#xff1a;点击登录按钮 设置个人中心、 管理员账号数据维护、 基础数据维护、 短视频信息维护(包括查看短视频留言、短视频收藏)、 论坛维护(增删改查帖子信息&#xff0c;包括查…...

TCP—三次握手和四次挥手

目录 一、三次握手和四次挥手的目的 二、TCP可靠的方面 三、什么是三次握手 四、第三次握手的目的 五、什么是四次挥手 六、超时时间的目的 七、SYN包、ACK包、FIN包 八、解决丢包和乱序 九、参考资料 一、三次握手和四次挥手的目的 TCP三次握手的目的主要是为了确保两…...

基于UDP的网络聊天室

一.项目需求&#xff1a; 如果有用户登录&#xff0c;其他用户可以收到这个人的登录信息如果有人发送信息&#xff0c;其他用户可以收到这个人的群聊信息如果有人下线&#xff0c;其他用户可以收到这个人的下线信息服务器可以发送系统信息 二.服务器端 #include <myhead.h&…...

数组-两个升序数组中位数

一、题目描述 二、解题思路 (一).基本思想&#xff1a; 如果列表总长度allsize( arr1.size()arr2.size() ) 为奇数时&#xff0c;中位数位置应该在两个列表排序后的第 allsize/2 位置处&#xff0c;如果allsize为偶数&#xff0c;中位数应该取 (allsize/2)-1 和 allsize/2 的…...

C#与Unity的协作协议:从语法表层到引擎契约的深度解析

1. 这不是“学编程”&#xff0c;而是重新建立你和机器对话的语法系统很多人点开这个标题&#xff0c;心里想的是&#xff1a;“Unity游戏开发&#xff1f;那我得先学会C#&#xff0c;再学Unity编辑器&#xff0c;最后做个小飞机打砖块……”——这个思路本身就把门关死了。我带…...

口岸突发事件回溯,无感定位实现 UWB 达不到的全域时空复盘

口岸突发事件回溯&#xff0c;无感定位实现 UWB 达不到的全域时空复盘口岸突发事件应急复盘、轨迹溯源、责任界定是国门安全风控、事件处置、执法取证的核心关键。口岸闯关冲卡、违规尾随、异常聚集、滞留徘徊、人车冲突等突发场景具备瞬时性、跨区域、高动态、多主体混杂特征&…...

Rust 环境搭建指南

Rust 环境搭建指南 引言 Rust 是一种系统编程语言,以其高性能、内存安全和并发特性而闻名。在本文中,我们将详细讲解如何搭建 Rust 开发环境,包括安装 Rust 语言、配置编辑器以及使用 Rust 包管理器 Cargo。 安装 Rust 系统要求 在开始之前,请确保您的计算机满足以下系…...

STM32H5安全连接AWS IoT:基于TrustZone与Secure Manager的物联网方案

1. 项目概述&#xff1a;当STM32H5遇上AWS云如果你正在用STM32H5系列高性能MCU做物联网设备开发&#xff0c;并且想把数据安全地送到AWS云上&#xff0c;那么意法半导体最近发布的这个X-CUBE-AWS-H5扩展包&#xff0c;绝对值得你花时间深入研究。这不仅仅是一个简单的“库文件”…...

AI开始替人跑任务后,真正决定体验的不是模型,而是向量引擎

AI开始替人跑任务后&#xff0c;真正决定体验的不是模型&#xff0c;而是向量引擎为什么这篇文章值得你现在看 过去一年&#xff0c;很多人聊AI&#xff0c;张口就是哪个模型更强。 有人追Gemini 3.5 Flash。 有人追Qwen新模型。 有人追OpenAI的Responses API和Agent工具链。 也…...

3步解锁GTA V无限可能:ScriptHookV脚本注入核心技术深度解析

3步解锁GTA V无限可能&#xff1a;ScriptHookV脚本注入核心技术深度解析 【免费下载链接】ScriptHookV An open source hook into GTAV for loading offline mods 项目地址: https://gitcode.com/gh_mirrors/sc/ScriptHookV 想象一下&#xff0c;你正在玩《侠盗猎车手V》…...

【QMT 量化实战】股市 “高开低走“ 是陷阱还是机会?(下)附完整 Python 代码

摘要 本文为《股市 "高开低走" 是陷阱还是机会&#xff1f;》系列下篇&#xff0c;提供基于QMT 量化交易平台的完整 "高开低走" 策略 Python 实现代码。包含 Xtquant 初始化、全局参数配置、数据获取、趋势判断、周期计算及结果输出等全流程代码&#xff…...

AI Agent社交交互延迟超800ms?——用eBPF+LLM Token流控双引擎压测实录(性能提升4.8倍原始基线)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI Agent社交交互延迟超800ms&#xff1f;——用eBPFLLM Token流控双引擎压测实录&#xff08;性能提升4.8倍原始基线&#xff09; 当AI Agent在高并发社交场景中响应延迟突破800ms&#xff0c;用户会感…...

Agent驱动的机器学习 pipeline 全链路拆解,深度解析LLM+ML协同训练的4大范式演进

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Agent驱动的机器学习 pipeline 全链路拆解&#xff0c;深度解析LLMML协同训练的4大范式演进 Agent驱动的机器学习 pipeline 正在重构传统ML工程范式——它不再将数据预处理、特征工程、模型训练与部署割裂为静…...

Unity ShaderGraph环境搭建:URP配置与节点库激活指南

1. 这不是“装个插件就完事”的 ShaderGraph 入门很多人点开 Unity 官方文档里那句“Shader Graph is included with Unity 2019.1”就直接关掉页面&#xff0c;以为只要打开 Unity 就能拖拽节点写 Shader——结果新建一个 Shader Graph Asset&#xff0c;双击打开&#xff0c;…...