Java 访问数据库的奇妙之旅

news2025/1/2 22:33:15

目录

一、JDBC 基础入门

(一)连接数据库的第一步

(二)简单代码示例

二、更安全的 PreparedStatement

(一)为啥要用它

(二)代码示例

三、高效的连接池

(一)连接池是啥好东西

(二)Druid 连接池示例


宝子们,今天咱就来唠唠 Java 是咋跟数据库打交道的。在开发那些超酷的应用程序时,数据的存储和读取可是至关重要的环节,而 Java 访问数据库的方式就像是打开数据宝库的不同钥匙。

一、JDBC 基础入门

(一)连接数据库的第一步

首先呢,咱得知道啥是 JDBC(Java Database Connectivity),这可是 Java 访问数据库的根基。就好比你要去一个神秘的岛屿(数据库),JDBC 就是那艘带你前往的船。

在开始之前,得先把对应的数据库驱动搞到手。比如说,如果是 MySQL 数据库,就得去找到 MySQL 的 JDBC 驱动包,然后加到咱的 Java 项目里。这就像是给船准备好燃料,不然可走不动。

(二)简单代码示例

来,看看下面这段代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcBasicExample {
    public static void main(String[] args) {
        // 这就是数据库的地址,告诉 Java 要去哪儿找数据库,格式得写对哦
        String url = "jdbc:mysql://localhost:3306/mydb";
        // 数据库的用户名,就像你上某个网站的账号
        String username = "root";
        // 密码,可不能随便告诉别人
        String password = "your_password";

        try {
            // 这一步就像是启动船的引擎,加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            // 建立连接,现在船出发啦,驶向数据库
            Connection connection = DriverManager.getConnection(url, username, password);
            // 创建一个能执行 SQL 语句的家伙
            Statement statement = connection.createStatement();
            // 写个简单的 SQL 语句,比如创建一个表
            String sql = "CREATE TABLE IF NOT EXISTS test_table (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255))";
            // 让它去执行这个 SQL 语句
            statement.executeUpdate(sql);
            // 用完了就得关闭资源,先把执行 SQL 的家伙关掉
            statement.close();
            // 再关掉连接,船靠岸啦
            connection.close();
            System.out.println("表创建成功,数据库连接操作顺利!");
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

这段代码就是最基础的 JDBC 操作,创建了一个表。宝子们可以看到,通过 DriverManager 拿到连接,用 Statement 执行 SQL,最后关闭连接,是不是有点感觉了?

二、更安全的 PreparedStatement

(一)为啥要用它

有时候,咱直接用 Statement 可能会有安全隐患,这时候 PreparedStatement 就闪亮登场啦。它可以防止一种叫 SQL 注入的坏事儿发生。比如说,有人想通过在输入框里输入一些奇怪的字符,来篡改你的 SQL 语句,获取不该获取的信息,这可不行!而 PreparedStatement 就能把这些危险挡在门外。

(二)代码示例

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

public class PreparedStatementExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydb";
        String username = "root";
        String password = "your_password";

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection connection = DriverManager.getConnection(url, username, password);
            // 看这里,SQL 语句里用问号占位,就像给要填的信息留了个空座位
            String sql = "INSERT INTO test_table (name) VALUES (?)";
            // 创建 PreparedStatement 对象
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            // 给占位符设置值,第一个参数是占位符的位置(从 1 开始),第二个是要设置的值
            preparedStatement.setString(1, "张三");
            // 执行插入操作
            preparedStatement.executeUpdate();
            // 关闭资源
            preparedStatement.close();
            connection.close();
            System.out.println("数据安全插入成功!");
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

用 PreparedStatement 插入数据是不是很简单?而且还安全,宝子们以后插入、更新数据的时候尽量用它哦。

三、高效的连接池

(一)连接池是啥好东西

每次都去创建和销毁数据库连接是不是有点麻烦,还浪费资源?这就像你每次出门都要重新造一辆车,开完就扔掉,太奢侈啦!连接池就是解决这个问题的神器。它会提前创建好一些数据库连接,放在一个 “池子” 里,当程序需要连接数据库时,就从池子里拿一个,用完了再放回去,而不是每次都重新创建和销毁,这样效率就大大提高啦。

(二)Druid 连接池示例

咱以常用的 Druid 连接池为例,看看代码咋写。
首先得把 Druid 的依赖加到项目里哦。

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.16</version>
</dependency>

然后是代码:

宝子们看,用连接池是不是很方便?而且能让咱的程序运行得更高效、更稳定。

好啦,今天就给大家介绍了 Java 访问数据库的几种常见方式,从基础的 JDBC,到更安全的 PreparedStatement,再到高效的连接池。希望大家都能掌握这些技能,在开发的道路上勇往直前!如果有啥问题,随时在评论区留言哦。

在Java中访问数据库的几种方式的优缺点对比

除了JDBC,还有哪些Java框架可以方便地访问数据库?

如何优化Java访问数据库的性能?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2268025.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通过 Ansys Electronics Desktop 中的高级仿真优化 IC 设计

半导体行业继续通过日益复杂的集成电路 (IC) 设计突破技术界限。随着工艺节点缩小和电路密度达到前所未有的水平&#xff0c;电磁效应对设备性能和可靠性变得越来越重要。现代 IC 设计面临着来自复杂的布局相关耦合机制、信号完整性问题和功率分布问题的挑战&#xff0c;这些问…

Kafka数据迁移全解析:同集群和跨集群

文章目录 一、同集群迁移二、跨集群迁移 Kafka两种迁移场景&#xff0c;分别是同集群数据迁移、跨集群数据迁移。 一、同集群迁移 应用场景&#xff1a; broker 迁移 主要使用的场景是broker 上线,下线,或者扩容等.基于同一套zookeeper的操作。 实践&#xff1a; 将需要新添加…

【OpenGL ES】GLSL基础语法

1 前言 本文将介绍 GLSL 中数据类型、数组、结构体、宏、运算符、向量运算、矩阵运算、函数、流程控制、精度限定符、变量限定符&#xff08;in、out、inout&#xff09;、函数参数限定符等内容&#xff0c;另外提供了一个 include 工具&#xff0c;方便多文件管理 glsl 代码&a…

ffmpeg之播放一个yuv视频

播放YUV视频的步骤 初始化SDL库&#xff1a; 目的&#xff1a;确保SDL库正确初始化&#xff0c;以便可以使用其窗口、渲染和事件处理功能。操作&#xff1a;调用 SDL_Init(SDL_INIT_VIDEO) 来初始化SDL的视频子系统。 创建窗口用于显示YUV视频&#xff1a; 目的&#xff1a;…

复习打卡大数据篇——Hadoop MapReduce

目录 1. MapReduce基本介绍 2. MapReduce原理 1. MapReduce基本介绍 什么是MapReduce MapReduce是一个分布式运算程序的编程框架&#xff0c;核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序&#xff0c;并发运行在Hadoop集群上。 MapRed…

小程序配置文件 —— 13 全局配置 - window配置

全局配置 - window配置 这里讲解根目录 app.json 中的 window 字段&#xff0c;window 字段用于设置小程序的状态栏、导航条、标题、窗口背景色&#xff1b; 状态栏&#xff1a;顶部位置&#xff0c;有网络信号、时间信息、电池信息等&#xff1b;导航条&#xff1a;有一个当…

el-pagination 为什么只能展示 10 条数据(element-ui@2.15.13)

好的&#xff0c;我来帮你分析前端为什么只能展示 10 条数据&#xff0c;以及如何解决这个问题。 问题分析&#xff1a; pageSize 的值&#xff1a; 你的 el-pagination 组件中&#xff0c;pageSize 的值被设置为 10&#xff1a;<el-pagination:current-page"current…

单片机与MQTT协议

MQTT 协议简述 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;&#xff0c;是一种基于发布 / 订阅&#xff08;publish/subscribe&#xff09;模式的 “轻量级” 通讯协议&#xff0c;该协议构建于 TCP/IP 协议上&#xf…

Debian-linux运维-docker安装和配置

腾讯云搭建docker官方文档&#xff1a;https://cloud.tencent.com/document/product/213/46000 阿里云安装Docker官方文档&#xff1a;https://help.aliyun.com/zh/ecs/use-cases/install-and-use-docker-on-a-linux-ecs-instance 天翼云常见docker源配置指导&#xff1a;htt…

使用Docker-compose部署SpringCloud项目

docker编写dockfile遇到的问题&#xff1a; 需要在docker-compose.yml文件下执行命令 docker-compose.yml文件格式的问题 1和2处空2格&#xff0c;3处空1格&#xff0c;4为本地配置文件目录&#xff0c;5为docker容器的目录&#xff0c;version为自己安装的docker-compose版本 …

KG4Diagnosis 分层多代理的医疗诊断框架,结合大模型与知识图谱构建,覆盖362种常见疾病

KG4Diagnosis 分层多代理的医疗诊断框架&#xff0c;结合大模型与知识图谱构建&#xff0c;覆盖362种常见疾病 论文大纲理解1. 提出背景是什么&#xff1f;2. 概念的性质是什么&#xff1f;是什么导致这个性质&#xff1f;3. 请举一个正例、一个反例&#xff0c;对比4. 请使用类…

【LLM综述】29种大模型Prompt Engineering技术

note 从零样本&#xff08;Zero-shot&#xff09;提示到最新进展的各种提示技术&#xff0c;包括推理和逻辑链&#xff08;Chain-of-Thought, CoT&#xff09;提示、自动链式思考&#xff08;Auto-CoT&#xff09;提示、自我一致性&#xff08;Self-Consistency&#xff09;提…

【黑马头条训练营】day02-黑马头条-App端文章展示

目录 描述app端首页从请求到数据显示的全部流程 描述文章微服务的组成及首页展示业务与实现 自己编写文章微服务关键逻辑 描述app端首页从请求到数据显示的全部流程 浏览器请求我们的app端 会通过nginx请求到我们app前端 app端输入手机号和密码 点击登录 请求 会到我们的…

DBeaver 咋手动配置sqlite 驱动

目录 1 问题2 下载 1 问题 离线安装了DBeaver 数据库软件&#xff0c;现在需要使用这个数据库打开sqlite 数据库&#xff0c;但是提示没有 驱动&#xff0c;那么我们就需要手动下载驱动&#xff0c;在这个软件里面导入 2 下载 https://repo1.maven.org/maven2/org/xerial/sql…

Linux 的历史与发展:从诞生到未来

Linux 的历史与发展&#xff1a;从诞生到未来 1. 起源之前&#xff1a;操作系统的历史背景 在 Linux 问世之前&#xff0c;操作系统的发展经历了多个重要阶段&#xff0c;这些阶段为 Linux 的诞生奠定了基础&#xff1a; 1940-1950 年代&#xff1a;计算机初期 早期计算机如 [[…

八爪鱼easyspider:

参考我的上一篇博客&#xff1a; scraper插件与软件&#xff0c; 主八爪鱼&#xff0c;easyspider 1&#xff0c;八爪鱼&#xff1a; 同时注意数据横向还是纵向&#xff0c;但是不好操作 二&#xff0c;easyspider&#xff1a; 其中1/2是不需要用户登入的&#xff0c;第3个…

算法基础一:冒泡排序

一、冒泡排序 1、定义 冒泡排序&#xff08;英语&#xff1a;Bubble Sort&#xff09;是一种简单的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序&#xff08;如从大到小、首字母从A到Z&#xff09;错误就把他们交换过来。 …

llamafactory报错:双卡4090GPU,训练qwen2.5:7B、14B时报错GPU显存不足(out of memory),轻松搞定~~~

实际问题场景&#xff1a; 使用llamafactory进行微调qwen2.5 7B和14B的大模型时&#xff0c;会出现out of memory的报错。尝试使用降低batch_size&#xff08;原本是2&#xff0c;现在降到1&#xff09;的方式&#xff0c;可以让qwen2.5:7B跑起来&#xff0c;但时不时会不稳定…

七牛云—对象云存储Kodo(详解,文件上传和下载)

文章目录 七牛—对象云存储Kodo1.1 介绍1.2 使用注册账号创建bucket空间查询accessKey/secretKey查看官网SDK1.3 SpringBoot中使用七牛云上传引入依赖(在官方SDK文档中有)引入工具类servie层controller层postman测试下载引入工具类域名查询controller层七牛—对象云存储Kodo 1…

概率统计与随机过程--作业8

推导题 试给出图1中所有关于Z{e}与变量a条件独立的变量。 编程题 有一个美国医生使用Bayes网络诊断胸部疾病&#xff0c;其掌握的数据信息如图2所示&#xff0c;其中包括&#xff1a; 有50%的病人吸烟&#xff08;smoking&#xff09;&#xff0c;1%患有肺结核(Tuberculosis…