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

news2024/12/23 8:32:57

在这里插入图片描述

在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.");
    }

    // 关闭Statement
    statement.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.");
    }

    // 关闭PreparedStatement
    preparedStatement.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.");
            }

            // 关闭连接和PreparedStatement
            preparedStatement.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.coloradmin.cn/o/1054460.html

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

相关文章

好题分享

1.Problem - G - Codeforces (1)题意 (2)思路 因为最多13次,那么不如我们就问13次,然后考虑把每一个位置重新按二进制拆分成一个下标,因为C(13,6) > 1000,因此在数量上是满足得,我…

【centos7】centos7卸载gitlab

一、GitLab安装 1. 安装依赖包 yum install -y curl policycoreutils-python openssh-server 2. 安装lrzsz(如已经安装可忽略) yum -y install lrzsz 3. 下载rpm包 cd /usr/local wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gi…

spring security(二)--授权

零.前情提要 这篇文章主要借鉴B站三更大大关于spring security的教程,这篇文章的大部分内容也来自于那个教程,写这个的主要目的是记录加强印象,总结,并且在文章中我也有穿插自己的想法。 前面的文章【spring security教程&#…

java Spring Boot 将日志写入文件中记录

我们之前的一套操作来讲 日志都是在控制台上的 但 如果你的项目在正式环境上跑 运维人员突然告诉你说日志报错了,但你日志只在控制台上,那公司项目如果访问量很大 那你是很难在控制台上找到某一条日志的 这时 我们就可以用文件把它记下来 我们打开项目 …

python使用mitmproxy和mitmdump抓包在电脑上抓包(二)

在我的上篇文章中,主要记录如何安装mitmproxy和抓取https流量。参考链接: python使用mitmproxy和mitmdump抓包在电脑上抓包-CSDN博客 本篇主要使用python配合mitmdump来抓包和处理返回包,更加灵活,这也是mitmproxy(mitmdump)的最…

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

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

一维数组和二维数组的使用(一)

目录 导读1. 一维数组1.1 一维数组的创建1.2 数组的初始化1.3 一维数组的使用1.4 一维数组在内存中的存储 2. 二维数组2.1 二维数组的创建2.2 二维数组的初始化2.3 二维数组的使用2.4 二维数组在内存中的存储 博主有话说 导读 本篇主要讲解一维数组和二维数组的创建和使用&…

【Redis】redis基本数据类型详解(String、List、Hash、Set、ZSet)

目录 RedisString(字符串)List(列表)Hash(字典)Set(集合)ZSet(有序集合) Redis Redis有5种基本的数据结构,分别为:string(字符串)、list(列表)、set(集合)、hash(哈希&a…

【Django笔记】认证系统

使用Django 的认证系统实现用户信息验证 在前面使用migrate 命令进行数据迁移时候,生成了auth_user表 ,该表中存放了用户信息可以用来登录Django自带的Admin 管理后台。 创建Admin 后台管理账号 python manage.py createuperuser E:\data\python\djaongo_prj\gu…

看完这篇 教你玩转渗透测试靶机Vulnhub——Healthcare:1

Vulnhub靶机Healthcare:1渗透测试详解 Vulnhub靶机介绍:Vulnhub靶机下载:Vulnhub靶机安装:①:信息收集:②:漏洞发现SQL注入:③:SQL注入漏洞利用:④:反弹Shell…

【开发篇】七、RedisTemplate与StringRedisTemplate + Jedis与Lettcus

文章目录 1、RedisTemplate详解2、常用方法3、关于IDEA的报黄4、RedisTemplate和StringRedisTemplate的区别5、如何通用RedisTemplate和StringRedisTemplate6、Jedis7、Jedis的连接池8、封装Jedis工具类8、RedisTemplate底层实现技术切换 1、RedisTemplate详解 RedisTemplate是…

基于Java的大学生社团管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

二十七、[进阶]MySQL默认存储引擎InnoDB的简单介绍

1、MySQL体系结构 MySQL大致可以分为连接层、服务层、引擎层、存储层四个层,这里需要注意,索引的结构操作是在存储引擎层完成的,所以不同的存储引擎,索引的结构是不一样的。 (1)体系结构示意图 &#xff0…

【数据结构】抽象数据类型

🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 🎏数据类型 🎏抽象数据类型 结语 🎏数据类型 数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称. 数据类型(d…

【vue3】自定义hook函数

假期第三篇&#xff0c;对于基础的知识点&#xff0c;我感觉自己还是很薄弱的。 趁着假期&#xff0c;再去复习一遍 【vue3 】hook函数 hook本质上是一个函数&#xff0c;把setup中使用的Composition API进行了封装 假设需求是获取当前点击时鼠标的坐标 <template><…

Pycharm操作git仓库 合并等

菜单 Git CommitPushUpdate ProjectPullFetchMergreRebase 查询 查询分支 查询本地所有分支 # 查询本地分支 git branch# 查询远程分支 git branch -rPycharm查看当前分支 步骤&#xff1a; Git->Branches 哈喽&#xff0c;大家好&#xff0c;我是[有勇气的牛排]&…

网络正常,微信正常登录,谷歌浏览器无法正常打开(100%解决)

背景&#xff1a; 笔记本电脑&#xff0c;操作系统&#xff1a;windows10&#xff0c;网络&#xff1a;wifi/或者有线连接。 谷歌浏览器&#xff1a;最新版本&#xff1a;115.0.5790.171 可以正常使用微信&#xff0c;无法使用谷歌浏览器打开对应的网址。 解决办法&#xff1a;…

Charles 抓包工具使用详细介绍

1 前言 1.1 介绍 Charles是一款强大的网络抓包工具&#xff0c;主要用于分析和调试网络流量。它适用于多种操作系统&#xff0c;包括 Windows、macOS和linux。 Chaels可以捕获 http和https协议的请求和响应&#xff0c;帮助开发人员和测试人员了解应用程序与服务器支架的通信…

【2023双非保研】信管跨保计算机大类的记录(东南、川大、重大、东北、西电、南理工、杭高院、河海、东华、天大等)

以此篇博客记录我的保研之旅 目录 一、个人情况 二、夏令营 1、国科大杭高院&#xff08;线下&#xff09; 2、南信工&#xff08;线下&#xff09; 3、华中师范&#xff08;线上or线下&#xff09; 4、浙大软件&#xff08;线上&#xff09; 5、东华大学&#xff08;线…

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

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