JDBC在java代码中的使用

news2025/1/11 14:21:40
声明

对于数据库的增删改查,在使用jdbc的过程中分二类,查(DQL)语句和增,删,改(DML语句)

他们的整体都分为以下五部分,只是DQL语句多了数据的处理部分。

在使用之前需要导入相关的jar包

 

1,加载驱动器(非必要,但是建议手动加载养成好习惯)

2,创建连接

3,创建会话

4,执行会话

5,关闭会话

1,数据库操作插入语句(增)

操作前数据

jdbc:mysql://localhost:3306/huohua257?serverTimezone=Asia/Shanghai代表的含义是jdbc:操作的是那个数据库(mysql,orcale 等数据库)//你要连接的数据的地址,这里是本地所以就是localhost:端口号/数据库的名称/占位符 时区(时区不能少)

 public static void main(String[] args) {
        try {
//            增
//            1,加载驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
//            2,创建连接 localhost 与127.0.0.1 都是本地连接地址
            String url= "jdbc:mysql://localhost:3306/huohua257?serverTimezone=Asia/Shanghai";
            String user="root";
            String password="123456";
            Connection connection= DriverManager.getConnection(url,user,password);
//            3,创建会话
            String sql="insert into  t_people values(null,'李四2',null)";
            PreparedStatement ps=connection.prepareStatement(sql);

//            4,执行回话
            ps.executeUpdate();

//            关闭回话
            ps.close();
            connection.close();


        }catch (Exception e){
            e.printStackTrace();
        }

    }

2,数据库操作删除语句(删除)

刚刚展示的插入语句只是最基础的,没有对使用占位符来让我们用户输入来决定插入什么信息,这次删除使用占位符来指定删除信息

在sql语句中使用?占位符,

  try {
//        第一步加载驱动类
        Class.forName("com.mysql.cj.jdbc.Driver");
//        第二步创建连接 导入的java.sql的包
        String url= "jdbc:mysql://localhost:3306/huohua257?serverTimezone=Asia/Shanghai";
        String user="root";
        String password="123456";
        Connection  connection= DriverManager.getConnection(url,user,password);
//        第三部 书写sql 并创建会话
        String sql="delete from t_people where pid=? ";
        PreparedStatement ps=connection.prepareStatement(sql);
//        1代表第一个参数 x 代表参数的内容
        ps.setInt(1,14);
//        第四部 执行会话
        ps.executeUpdate();
//        第五步关闭连接
        ps.close();
        connection.close();

    } catch (Exception e) {
       e.printStackTrace();
    }
}

操作前数据操作成功后数据

 3,数据操作修改语句(改)

  try {
        //    第一步加载驱动器
        Class.forName("com.mysql.cj.jdbc.Driver");
//        2,创建连接
        String url= "jdbc:mysql://localhost:3306/huohua257?serverTimezone=Asia/Shanghai";
        String user="root";
        String password="123456";
        Connection connection= DriverManager.getConnection(url,user,password);
//        3,书写sql 创建会话
        String sql="update t_people set name='zhangsan' where pid=?";
        PreparedStatement ps= connection.prepareStatement(sql);
        ps.setInt(1,1);

//        4,执行绘画
        ps.executeUpdate();
//        5,关闭会话与连接
        ps.close();
        connection.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

修改前数据

修改后数据 

4,数据操作查找内容(查)

查找和其余部分有些不同

1,普通查找不使用占位符

   public static void main(String[] args) {
        try {
//            加载驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
//            创建连接
            String url= "jdbc:mysql://localhost:3306/huohua257?serverTimezone=Asia/Shanghai";
            String user="root";
            String password="123456";

            Connection connection= DriverManager.getConnection(url,user,password);
//       书写sql并创建会话
            String sql="select *from t_people";
            PreparedStatement ps=connection.prepareStatement(sql);
//            接收并处理结果
          ResultSet rs= ps.executeQuery();
//          拿到结果后用迭代器遍历
            while(rs.next()){
                int id=rs.getInt("pid");
                String pname=rs.getString("name");
                String bir=rs.getString("birthday");
                System.out.println(id+"\t"+pname+"\t"+bir+"\t");
            }
            rs.close();
            ps.close();
            connection.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

接收处理结果的原理就是把他们放到一个类似set的集合中依靠迭代器遍历得到全部内容

2,使用占位符的情况

public static void main(String[] args) {
    Scanner scanner=new Scanner(System.in);
    System.out.println("输入要查询的人物名称");
    String name=scanner.nextLine();
//    1,加载驱动
    try {
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url= "jdbc:mysql://localhost:3306/huohua257?serverTimezone=Asia/Shanghai";
        String user="root";
        String password="123456";
        Connection connection= DriverManager.getConnection(url,user,password);

        String sql="select *from  t_people where name=?";
        PreparedStatement ps=connection.prepareStatement(sql);
        ps.setString(1,name);
       ResultSet rs= ps.executeQuery();
       while(rs.next()){
       int id=rs.getInt("pid");
       String pname= rs.getString("name");
       String bir=rs.getString("birthday");
        System.out.println(id+" "+pname +" "+bir);}
rs.close();
ps.close();
connection.close();

    } catch (Exception e) {
        e.printStackTrace();
    }

}

3,不使用占位符使用字符串拼接 

不要使用会造成sql注入问题这里 只是演示要知道有这种情况

public static void main(String[] args) {
    Scanner scanner=new Scanner(System.in);
    System.out.println("输入要查询的人物名称");
    String name=scanner.nextLine();
//    1,加载驱动
    try {
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url= "jdbc:mysql://localhost:3306/huohua257?serverTimezone=Asia/Shanghai";
        String user="root";
        String password="123456";
        Connection connection= DriverManager.getConnection(url,user,password);
        String sql="select *from  t_people where name='"+name+"'";
//        String sql="select *from  t_people where name=?";
        PreparedStatement ps=connection.prepareStatement(sql);
//        ps.setString(1,name);
       ResultSet rs= ps.executeQuery();
       while(rs.next()){
       int id=rs.getInt("pid");
       String pname= rs.getString("name");
       String bir=rs.getString("birthday");
        System.out.println(id+" "+pname +" "+bir);}
rs.close();
ps.close();
connection.close();

    } catch (Exception e) {
        e.printStackTrace();
    }

}

 如果我们正常输入就可以正常查询,但是存在特殊情况

 特殊情况

没有输入表的内容依旧查出来了全部的内容,早期我们的某些软就就存在这个弊端,qq早期就是这种情况

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

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

相关文章

首屏优化之:import 动态导入

前言 前面我们聊过可以通过不太的 script 属性比如 defer,async 来实现不同的加载效果,从而实现首屏优化,没看的朋友可以看一下:。 今天我们来聊一下动态导入之 import,当然 import 动态导入也不是一把梭的&#xff…

我们需要提高人工智能产品经理的标准

如何停止指责“模型”并开始构建成功的人工智能产品 产品经理负责决定开发什么,并对决策结果负责。这适用于所有类型的产品,包括由人工智能驱动的产品。然而,在过去十年中,产品经理将人工智能模型视为黑匣子是一种常见做法&#x…

如何在 CI/CD 过程中实施高效的自动化测试和部署

文章目录 摘要引言选择适合的 CI/CD 工具常见 CI/CD 工具选择依据 配置自动化构建和测试流程Jenkins示例 制定测试策略单元测试集成测试系统测试 确保部署环境的稳定性蓝绿部署 未来展望总结参考资料 摘要 在持续集成(CI)和持续交付(CD&…

SemanticKernel/C#:实现接口,接入本地嵌入模型

前言 本文通过Codeblaze.SemanticKernel这个项目,学习如何实现ITextEmbeddingGenerationService接口,接入本地嵌入模型。 项目地址:https://github.com/BLaZeKiLL/Codeblaze.SemanticKernel 实践 SemanticKernel初看以为只支持OpenAI的各…

(24)(24.2) Minim OSD快速安装指南(一)

文章目录 前言 1 概述 2 基本接线图 3 关键冷却条件的可选设置 4 固件可用于MinimOSD 5 MWOSD 前言 MinimOSD “屏幕显示”是一个小型电路板,它从你的自动驾驶仪中提取遥测数据,并将其覆盖在你的第一人称视图监视器上(First Person View)。Minim …

发布包到npm

目录 注册npm账号 创建包 登录npm 上架包 更新包 删除包 注册npm账号 首先注册npm账号:npm | Sign Up (npmjs.com) 创建包 可以在桌面上新建一个文件夹:文件夹名随便起,但是别跟npm已经上架的包名重复了 可以通过下面的指令查看&…

【小记】这也算是经验分享了吧~

最近在进行跳槽的一些准备,从简历制作、投递简历、准备面试、视频面试、线下面试、接受录取、辞职准备,每一个过程都超级紧张刺激 大学的时候就有一些制作PPT的经验,靠这个收入了一点点,进而对于office这一系列的操作还是比较熟悉…

韶音Open Fir Air好用吗?南卡、韶音、漫步者三款开放式耳机无广避坑测评!

近期,我注意到后台有许多小伙伴向我咨询如何挑选合适的开放式耳机。市场上开放式耳机品牌琳琅满目,它们在音质表现、佩戴舒适度以及综合性能上均展现出各自的独特魅力与差异。对于追求耳朵极致舒适体验的朋友而言,选择一款合适的开放式耳机显…

从零开始搭建监控系统 (三) 指标采集

从零开始搭建监控系统 (三) 指标采集 背景 Node Exporter就可以用来采集机器的各项指标,从而监控机器的状态。 如果机器上运行了一些小脚本,想要对其进行监控但又不想用上一些在代码里做信息采集的SDK那么重,比如只是单纯想要监控该脚本是…

【C语言】红黑树

红黑树 1.二叉查找树 首先要了解的是二叉查找树,也称为二叉排序树,优点是在节点均匀分布的情况下,查找效率更高,缺点是,如果节点分布在一侧,查找时间就会约等于数组从头到尾的去查找。 二叉查找树的子树…

24/8/8算法笔记 决策回归树

from sklearn.tree import DecisionTreeRegressor from sklearn import tree import numpy as np import matplotlib.pyplot as plt 创建数据 X_train np.linspace(0,2*np.pi,40).reshape(-1,1)#训练数据就是符合要求的二维数据 #二维:[[样本一].[样本二]&#x…

服务器数据恢复—Raid5阵列热备盘上线过程中断导致阵列崩溃的数据恢复案例

服务器数据恢复环境&故障: 两组分别由4块SAS硬盘组建的raid5磁盘阵列,ext3文件系统lvm结构。 磁盘阵列中一块硬盘离线,热备盘自动上线替换离线硬盘并开始同步数据。在热备盘同步数据的过程中该组raid中另外一块硬盘出现故障掉线&#xff…

Docker最佳实践(六):安装Nacos

大家好,欢迎各位工友。 本篇呢我们就来演示一下如何在Docker中部署nacos容器,市面上的教程多多少少都有点小坑,博主磕磕绊绊测试了好几次,才算解决此问题。 1. 拉取Nacos镜像 首先,拉取对应版本的Nacos镜像文件。可以…

【ACM出版,EI稳定检索】第四届信号处理与通信技术国际学术会议(SPCT 2024)

第四届信号处理与通信技术国际学术会议(SPCT 2024) 2024 4th International Conference on Signal Processing and Communication Technology 重要信息 大会官网:www.icspct.com 大会时间:2024年12月27-29日 大会地点&#xff1a…

Nodejs实现图片加水印 【使用jimp】

Nodejs实现图片加水印 【使用jimp】 先看效果 我们将使用jimp实现图片加上水印,可以结合路由进行用户上传后处理该图片生成带水印的图片返回个用户 const path require("path"); const jimp require("jimp");/*** 给一张图片加水印* para…

【C语言篇】自定义类型:联合体和枚举详细介绍

文章目录 联合体联合体类型的声明联合体的特点联合体和结构体对比联合体大小的计算判断大小端 枚举枚举类型的声明枚举类型的优点枚举的使用 联合体 联合体类型的声明 像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。 但是编…

第10章 无持久存储的文件系统 (1)

目录 前言 10.1 proc文件系统 10.1.1 /proc 内容 本专栏文章将有70篇左右,欢迎关注,查看后续文章。 前言 即存在于内存中的文件系统。如: proc: sysfs: 即/sys目录。 内容不一定是ASCII文本,可能是二进…

Delaunay三角化重要性质,最小角最大化

欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击。 最大化最小角 推论 有点集P是一般点集(没有多点共线,没有4点共圆),那么该点集的delauney三角后的最小角不小于其他非de…

HTML5+CSS3笔记(Xmind格式):第五天

Xmind鸟瞰图: 简单文字总结: HTML5CSS3知识总结: canvas坐标: 画图的基本步骤: 1.创建画布 2.获取画布 3.开始路径规划 4.规定画笔颜色 5.规定画笔粗细 6.开始作…

OLAP与OLTP:数据处理系统的两种核心架构

目录 一、什么是OLAP? 二、什么是OLTP? 三、OLAP与OLTP的主要区别 四、结论 在数据管理和分析的领域中,OLAP(在线分析处理)和OLTP(在线事务处理)代表了两种重要的数据处理模式。它们在功能、目标…