【Java 进阶篇】JDBC插入数据详解

在这里插入图片描述

在Java应用程序中,与数据库交互是一项常见的任务。其中,插入数据操作是一种基本的数据库操作之一。本文将详细介绍如何使用Java JDBC(Java Database Connectivity)来执行插入数据操作。无论您是初学者还是有一定经验的开发人员,都能从本文中获得有关插入数据的重要信息。

什么是插入数据?

在数据库术语中,插入数据是指将新的数据行添加到数据库表中的操作。这可以是将完全新的数据插入到表中,也可以是更新表中已有的数据。

使用JDBC插入数据的基本步骤

在开始之前,确保您已经设置了Java开发环境,并且已经安装了适当的数据库。我们将以MySQL数据库为例进行说明,但类似的步骤也适用于其他数据库系统。

步骤1:导入JDBC库

首先,您需要导入JDBC库,以便在Java程序中使用数据库功能。通常,您会下载并使用数据库供应商提供的JDBC驱动程序。以下是一些常见的JDBC库导入语句示例:

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

步骤2:建立数据库连接

在插入数据之前,您需要建立与数据库的连接。通常,您需要提供数据库的URL、用户名和密码。以下是建立MySQL数据库连接的示例代码:

public class JDBCDemo {public static void main(String[] args) {// JDBC连接参数String url = "jdbc:mysql://localhost:3306/mydatabase";String username = "root";String password = "password";try {// 建立数据库连接Connection connection = DriverManager.getConnection(url, username, password);// 在此处执行插入数据操作// 关闭连接connection.close();} catch (SQLException e) {e.printStackTrace();}}
}

步骤3:创建SQL插入语句

接下来,您需要创建一个SQL插入语句,以指定要插入的数据和目标表。SQL插入语句通常采用以下格式:

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

在上述SQL语句中,table_name是目标表的名称,column1column2等是要插入数据的列名,value1value2等是要插入的实际数据值。

步骤4:执行插入数据操作

要执行插入数据操作,您需要创建一个Statement对象,并使用它来执行SQL插入语句。以下是一个示例代码:

try {// 创建Statement对象Statement statement = connection.createStatement();// 创建SQL插入语句String sql = "INSERT INTO employees (name, salary) VALUES ('John', 50000)";// 执行SQL插入语句int rowsAffected = statement.executeUpdate(sql);if (rowsAffected > 0) {System.out.println("Insertion successful. Rows affected: " + rowsAffected);} else {System.out.println("Insertion failed.");}// 关闭Statementstatement.close();
} catch (SQLException e) {e.printStackTrace();
}

在上述代码中,我们创建了一个Statement对象,然后使用executeUpdate()方法执行SQL插入语句。通过检查rowsAffected变量,我们可以确定是否插入成功。

步骤5:关闭连接

最后,在插入数据操作完成后,不要忘记关闭数据库连接。这是释放资源和确保数据库安全性的重要步骤。

connection.close();

防止SQL注入攻击

在执行SQL插入操作时,务必注意防止SQL注入攻击。SQL注入攻击是一种恶意操作,通过在输入数据中注入恶意SQL代码,来绕过应用程序的安全措施,访问或破坏数据库。

为了防止SQL注入攻击,您应该使用参数化的SQL语句或预编译的语句。以下是一个使用预编译语句的示例:

try {// 创建预编译的SQL插入语句String sql = "INSERT INTO employees (name, salary) VALUES (?, ?)";PreparedStatement preparedStatement = connection.prepareStatement(sql);// 设置参数的值preparedStatement.setString(1, "John");preparedStatement.setInt(2, 50000);// 执行预编译的语句int rowsAffected = preparedStatement.executeUpdate();if (rowsAffected > 0) {System.out.println("Insertion successful. Rows affected: " + rowsAffected);} else {System.out.println("Insertion failed.");}// 关闭PreparedStatementpreparedStatement.close();
} catch (SQLException e) {e.printStackTrace();
}

在上述示例中,我们使用了PreparedStatement对象,并使用占位符?来表示参数。然后,通过调用setXXX()方法设置参数的值,其中XXX表示参数的数据类型。这种方式可以有效地防止SQL注入攻击。

异常处理

在编写插入数据操作时,应该注意处理可能出现的异常。通常,与数据库交互的代码都会抛出SQLException,因此您应该使用try-catch块来捕获并处理这些异常。

try {// 执行插入数据操作} catch (SQLException e) {e.printStackTrace();
}

在异常处理块中,您可以根据具体情况采取适当的措施,例如记录日志、回滚事务或提供错误消息给用户。

示例代码

以下是一个完整的示例代码,演示了如何使用JDBC插入数据到MySQL数据库:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class InsertDataExample {public static void main(String[] args) {// JDBC连接参数String url = "jdbc:mysql://localhost:3306/mydatabase";String username = "root";String password = "password";try {// 建立数据库连接Connection connection = DriverManager.getConnection(url, username, password);// 创建预编译的SQL插入语句String sql = "INSERT INTO employees (name, salary) VALUES (?, ?)";PreparedStatement preparedStatement = connection.prepareStatement(sql);// 设置参数的值preparedStatement.setString(1, "John");preparedStatement.setInt(2, 50000);// 执行预编译的语句int rowsAffected = preparedStatement.executeUpdate();if (rowsAffected > 0) {System.out.println("Insertion successful. Rows affected: " + rowsAffected);} else {System.out.println("Insertion failed.");}// 关闭连接和PreparedStatementpreparedStatement.close();connection.close();} catch (SQLException e) {e.printStackTrace();}}
}

请注意,上述代码中的数据库连接参数、表名、列名等应根据您的实际情况进行修改。

这就是使用JDBC插入数据的基本步骤和示例。通过遵循这些步骤,您可以安全地将数据插入到数据库中,同时避免了常见的SQL注入攻击。希望这篇文章对您理解JDBC插入操作有所帮助!如果您有任何疑问或需要进一步的帮助,请随时提出。

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

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

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

相关文章

数仓精品理论-做大数据还有没有前途?

数仓精品理论-做大数据还有没有前途? 做大数据还有没有前途?大数据三要三不要我来讲讲大数据前景 做大数据还有没有前途? 先说,答案是肯定的,但一定要记住三要三不要。 datapulse官网: github:https://data…

关于 FOCA

目录 注意团队成员成品官网项目社区 版本信息致谢 注意 此文章会随时更新,最好收藏起来,总对你有好处。我们不定时发布一些 IT 内容,所以请关注我们。 此账号为 FOCA 唯一的官方账号,请勿轻易相信其他账号所发布内容。 团队 全…

LeetCode 热题 HOT 100:回溯专题

LeetCode 热题 HOT 100:https://leetcode.cn/problem-list/2cktkvj/ 文章目录 17. 电话号码的字母组合22. 括号生成39. 组合总和46. 全排列补充:47. 全排列 II (待优化)78. 子集79. 单词搜索124. 二叉树中的最大路径和200. 岛屿数量437. 路径…

手机电脑数码小程序商城的作用是什么

手机几乎是每个成年人人手一个以上,市场非常大,加之产品更新迭代速度快,每年都会推出多个型号、造型等,因此对高收入群体或爱机人群来说,新手机往往一年或二年时间就会换,或者直接购买当备用机等。 每个城…

关于解决 unable to start ssh-agent service, error :1058

前言 操作系统:win11 命令终端:Powershell 当我在终端输入命令 启动 ssh-agent 代理的时候 ssh-agent -s 很不幸出现了 unable to start ssh-agent service, error :1058以下错误 问题的解决 查看我们ssh-agent 服务是否运行,执行如下命令…

快看看你的手机有没有:谷歌Android全面封杀此类软件!

谷歌坐不住了,因为Android应用商店中,充斥着大量可窃取用户数据的应用,所以必然要出手整治了。 一款名叫“SonicSpy”软件是整个事情的导火索,而该应用是典型的窃取用户数据的应用,其除了可以从手机中提取个人数据外&…

C++ 学习系列 -- std::stack 与 std::queue

一 std::stack 与 std::queue 分别是什么? 两者均是 c 中的序列化容器,区别在于: std::stack 元素是先进后出 std::queue 元素是先进先出 二 std::stack 与 std::queue 原理 1 std:statck 2. std::queue 两者底层容器可以是 list 也可以…

黑豹程序员-架构师学习路线图-百科:HTML-网页三剑客

为什么需要HTML 在网站技术发达之前,千年来我们获取信息是通过书籍。电脑流行后我们看文章、小说通过txt文件。看图通过单独的图片流量工具看单个的图片文件。 而HTML把文字和图片一起展示,让今天的电子书成为可能。 另外一点,我们的信息是…

蜂蜜配送销售商城小程序的作用是什么

蜂蜜是农产品中重要的一个类目,其受众之广市场需求量大,但由于非人人必需品,因此传统线下门店经营也面临着痛点,线上入驻平台也有很多限制难以打造自有品牌,无法管理销售商品及会员、营销等,缺少自营渠道&a…

Linux常见操作命令(1)

​ 前言:作者也是初学Linux,可能总结的还不是很到位 ♈️今日夜电波:达尔文—林俊杰 0:30━━━━━━️💟──────── 4:06 🔄 ◀️ …

Springcloud中Feign传递参数

传递单个参数: 单个参数的传值有两种方式,第一种 使用RequestParam/PathVariable进行传值 客户端feign调用接口(RequestParam) RequestMapping("/ct/selectOne")Customer selectOne(RequestParam("id") Int…

集合在多线程下安全问题

如果在多线程下,同时操作同一个数据源,就会出现数据安全问题: A线程取出值为10,准备加5. 同时B线程也取出来10,减了5 C取出的时候有可能时15,也有可能时5。产生了数据安全问题。 方法有很多例如&#xff1a…

Go 语言 iota 的神奇力量

前言 当你深入研究官网库、开源库或者任何一个 Go 项目时,你都会发现 iota 这个神奇的标识符无处不在。它扮演着一种重要的角色,让代码变得更加简洁、清晰,并提高了可读性和可维护性。它的应用范围广泛,从枚举类型到位运算&#…

Acwing 143. 最大异或对

Acwing 143. 最大异或对 题目描述思路讲解代码展示 题目描述 思路讲解 这道题的启示是&#xff1a;字典树不单单可以高效存储和查找字符串集合,还可以存储二进制数字 思路:将每个数以二进制方式存入字典树,找的时候从最高位去找有无该位的异. 代码展示 #include<iostream…

uboot启动流程-涉及_main汇编函数

一. uboot启动流程涉及函数 本文简单分析一下 save_boot_params_ret调用的函数&#xff1a;_main汇编函数。 本文继之前文章的学习&#xff0c;地址如下&#xff1a; uboot启动流程-涉及s_init汇编函数_凌肖战的博客-CSDN博客 二. uboot启动流程涉及的 _main汇编函数 经过之…

鞋类 整鞋试验方法 剥离强度

声明 本文是学习GB-T 3903.3-2011 鞋类 整鞋试验方法 剥离强度. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 GB/T 3903 的本部分规定了整鞋鞋底与鞋帮或外底与外中底之间剥离强度的试验方法。 本部分适用于采用模压、硫化、注塑、灌注、胶…

vue3中sync修饰符的使用

props是子组件与父组件进行通信的常用方式&#xff0c;使用步骤主要有以下几个&#xff1a; 1. 在子组件中定义props要从父组件接收的变量&#xff08;变量的类型必须写明&#xff0c;默认值可选&#xff09; // 这里以 document.vue 子组件为例 // 通过 defineProps 宏的方…

Springboot对MVC、tomcat扩展配置

Springboot在web层的开发基本都是采用Springmvc框架技术&#xff0c;但是Springmvc中的某些配置在boot是没有的&#xff0c;我们就应该根据自己的需求进行对mvc扩展配置 Springboot1.x版本如何配置 通过注解Configuration一个类&#xff0c;继承webmvcconfigureradapter&#…

macOS 14 Sonoma 如何删除不需要的 4k 动态壁纸

概览 在升级到 macOS 14&#xff08;Sonoma&#xff09;之后&#xff0c;小伙伴们惊喜发现  提供了诸多高清&#xff08;4k&#xff09;动态壁纸的支持。 现在&#xff0c;从锁屏到解锁进入桌面动态到静态的切换一气呵成、无比丝滑。 壁纸显现可谓是有了“天水相连为一色&…

【SpringBoot学习】收藏的学习资料,精!

文章目录 Spring实战&#xff08;第五版&#xff09;&#xff1a; https://potoyang.gitbook.io/spring-in-action-v5/di-er-bu-fen-ji-cheng-spring南京大学-软件体系架构,结合SpringBoot Spring实战&#xff08;第五版&#xff09;&#xff1a; https://potoyang.gitbook.io/…