Java-数据库连接(JDBC小白教学)

news2024/9/24 23:30:45

!文章最后附有完整代码!

目录

🔖JDBC概述

🔖JDBC连接数据库

🔖添加数据(insert)

🔖修改数据(Update)

🔖删除数据(delete)

🔖查询数据(Select)

🔖关闭与数据库的链接通道

💡PreparedStatement和Statement 区别


🔖JDBC概述

 ⦁  JDBC全称Java DataBase Connection 即Java数据库连接

 ⦁  Java程序可以连接不同的数据库,但是,不同的数据库具体的连接细节有些不同,所以连接数据库的细节就需要由数据库的开发商去实现,而Java开发商只需设计出一系列连接数据库的接口规范即可,然后由不同的数据库开发商去实现。

2fe3802b565d4cbc924ef998cd04acec.png

//Java中提供一个连接数据库的接口规范   
interface oper{
      insert();
      delete();
      select();
      update();
   }
//oracle可以实现Java中提供的接口
  oracle implements oper{
  insert(){   }//在此接口中定义自己的功能 
  delete(){   } 
  select(){   } 
  update(){   }
  }

//mysql也可以实现Java中提供的接口
 mysql implements oper{
  insert(){   }//定义属于mysql的功能
  delete(){   }
  select(){   }
  update(){   }
 }

🔖JDBC连接数据库

① 在项目添加  mysql-connector-java-8.0.16.jar  文件

    该文件是由mysql官方开发实现的,包含具体连接数据库的功能代码   

② 加载驱动类  Class.forName("com.mysql.cj.jdbc.Driver");

//加载驱动类
Class.forName("com.mysql.cj.jdbc.Driver");

③ 建立与数据库的连接,获得连接对象

//加载驱动类
Class.forName("com.mysql.cj.jdbc.Driver");


//建立与数据库的连接,获得连接对象
String url="jdbc:mysql://127.0.0.1:3306/test?serverTimezone=Asia/Shanghai";

String user ="root";//账户

String dbpassword="root";//密码

Connection connection = DriverManager.getConnection(url, user, dbpassword);

🎉 就此,Java程序与数据库的连接就完成了,而我们所要连接的数据库名写在如下图的地方

     < 例如我连接的就是我的 test数据库 >
2e908b10eca745b3bf207ffcaac98731.png
 


🔖添加数据(insert)

 // //预先编译sql语句
 PreparedStatement ps = connection.prepareStatement("insert into score (id,name,subject,score)values (?,?,?,?)");
  ps.setObject(1,1 );
  ps.setObject(2, "小李");
  ps.setObject(3, "数学");
  ps.setObject(4, 88);
  ps.executeUpdate();  //用于执行查询语句 返回一个集合

 💡添加数据成功!

f4d58d2e13cd46f49326f2dd5dce8220.png

?占位符,表示此处需要接收一个参数

🔖修改数据(Update)

PreparedStatement ps = connection.prepareStatement("update score set score=? where id=?");
ps.setObject(1, 95);
ps.setObject(2, 1);
ps.executeUpdate();

 💡修改数据成功!

b7194828b64a4032a518f96cc0972f4a.png


🔖删除数据(delete)

PreparedStatement ps =  connection.prepareStatement("delete from score where id=?");
ps.setObject(1,1);
ps.executeUpdate();

💡删除数据成功!

ee4b7641a39643f4883aeb38c3335228.png


🔖查询数据(Select)

PreparedStatement ps =connection.prepareStatement("Select name,subject,score from score where id=?");
 ps.setObject(1, 2);

 ResultSet rs = ps.executeQuery();

 while (rs.next()){
  System.out.println( rs.getString("name"));
  System.out.println(rs.getString("subject"));
  System.out.println(rs.getString("score"));
  }

💡查询结果:

2528cfa0491d4318b4520368b389df66.pnga18585a71055496dbe3455cd354accdb.png


🔖关闭与数据库的链接通道

            //关闭数据库连接
            ps.close();
            connection.close();

💡PreparedStatement和Statement 区别

相同点: 都是向数据库发送sql

Statement:   将参数直接拼接到sql中,要拼接字符串,写起来麻烦,,安全性差,可以在参数中拼接 or 1=1进行攻击,删除表中所有数据

PreparedStatement : 先用 ?占位,然后通过setObject方法赋值,,写起来不用拼接字符串,,安全可靠,并且会在赋值时进行检测,可以防止sql注入攻击。

完整代码:

package chatproject;

import java.sql.*;

public class Demo {
    public static void main(String[] args) {

        try {
            //加载驱动类
            Class.forName("com.mysql.cj.jdbc.Driver");

            //建立与数据库的连接,获得连接对象
            String url="jdbc:mysql://127.0.0.1:3306/test?serverTimezone=Asia/Shanghai";
            String user ="root";
            String dbpassword="root";
            Connection connection = DriverManager.getConnection(url, user, dbpassword);

            //发送sql
            //插入数据
            /*PreparedStatement ps = connection.prepareStatement("insert into score (id,name,subject,score)values (?,?,?,?)");
            ps.setObject(1,1 );
            ps.setObject(2, "小李");
            ps.setObject(3, "数学");
            ps.setObject(4, 88);
            ps.executeUpdate();  //用于执行查询语句 返回一个集合*/
            //修改数据
           /* PreparedStatement ps = connection.prepareStatement("update score set score=? where id=?");
            ps.setObject(1, 95);
            ps.setObject(2, 1);
            ps.executeUpdate();*/
            //删除数据
           /* PreparedStatement ps =  connection.prepareStatement("delete from score where id=?");
            ps.setObject(1,1);
            ps.executeUpdate();*/
            //查询数据
            PreparedStatement ps =connection.prepareStatement("Select name,subject,score from score where id=?");
            ps.setObject(1, 2);
            ResultSet rs = ps.executeQuery();
            while (rs.next()){
                System.out.println( rs.getString("name"));
                System.out.println(rs.getString("subject"));
                System.out.println(rs.getString("score"));
            }

            //关闭数据库连接
            ps.close();
            connection.close();
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }


    }
}

 ▐ 结语:

       希望这篇关于Java数据库连接方式的介绍能对大家有所帮助,欢迎大佬们留言或私信与我交流~~学海漫浩浩,我亦苦作舟!大家一起学习,一起进步!

本人微信: g2279605572


a6771da335744e72a4d4e585664c2409.png

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

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

相关文章

边缘计算教学实训解决方案

一、引言 随着物联网、5G通信技术的快速发展&#xff0c;边缘计算作为云计算的延伸和补充&#xff0c;正逐渐成为支撑智能物联网、实时数据分析等领域的重要技术。唯众旨在为职业院校设计一套全面的边缘计算教学实训体系&#xff0c;通过理论与实践相结合的方式&#xff0c;培…

深度剖析MyBatis的二级缓存

二级缓存的原理 MyBatis 二级缓存的原理是什么&#xff1f; 二级缓存的原理和一级缓存一样&#xff0c;第一次查询会将数据放到 缓存 中&#xff0c;然后第二次查询直接去缓存读取。但是一级缓存是基于 SqlSession 的&#xff0c;二级缓存是基于 mapper 的 namespace 的。也就是…

webhook 和 API:你了解吗

Webhooks 是许多 API 的补充。通过设置 webhook 系统&#xff0c;系统 B 可以注册接收有关系统 A 某些更改的通知。当更改发生时&#xff0c;系统 A 推送 更改到系统 B&#xff0c;通常是以发出 HTTP POST 请求的形式。 Webhooks 旨在消除或减少不断轮询数据的需要。但根据我的…

如何购买RAKsmart的国外高防服务器?

随着互联网的快速发展&#xff0c;网络安全问题日益凸显&#xff0c;特别是对于拥有在线业务的企业或个人来说&#xff0c;选择一款高防服务器显得尤为关键。美国RAKsmart作为知名的服务器提供商&#xff0c;其高防服务器因其卓越的性能和安全性&#xff0c;受到了广大用户的青…

一步一步带你做网络工程

网络工程怎么做 一、网络设备交换机的应用&#xff1a; 要求&#xff1a;在此接入交换机S3700&#xff0c;上划分两个vlan&#xff0c;vlan10和vlan20分别有两个PC&#xff0c;按拓扑图完成要求&#xff1a; 划分vlan添加端口 sys [Huawei]sys S1 [S1]undo in e [S1]undo t…

【全开源】JAVA同城圈子达人交友系统源码支持微信小程序+微信公众号+H5+APP

同城达人 精准匹配&#xff1a;系统通过用户填写的个人信息和兴趣爱好&#xff0c;运用智能算法进行精准匹配&#xff0c;推荐合适的同城朋友。多种互动方式&#xff1a;提供在线聊天、语音通话、视频交流等多种互动方式&#xff0c;让用户能够随时随地与朋友保持联系。本地生…

人工智能AI聊天chatgpt系统openai对话创作文言一心源码APP小程序功能介绍

你提到的是一个集成了多种智能AI创作能力的系统&#xff0c;它结合了OpenAI的ChatGPT、百度的文言一心&#xff08;ERNIE Bot&#xff09;以及可能的微信WeLM&#xff08;或其他类似接口&#xff09;等。这样的系统确实能够极大地提高创作效率&#xff0c;并且在各种场景下为用…

SpringBoot接收参数的19种方式

https://juejin.cn/post/7343243744479625267?share_token6D3AD82C-0404-47A7-949C-CA71F9BC9583

秋招算法——AcWing101——拦截导弹

文章目录 题目描述思路分析实现源码分析总结 题目描述 思路分析 目前是有一个笨办法&#xff0c;就是创建链表记录每一个最长下降子序列所对应的节点的链接&#xff0c;然后逐个记录所有结点的访问情况&#xff0c;直接所有节点都被访问过。这个方法不是很好&#xff0c;因为需…

【Qt】Qt组件设置背景图片

1. 方法1&#xff08;paintEvent方式&#xff09; 使用paintEvent()实现 1. .h文件中添加虚函数 protected:void paintEvent(QPaintEvent *event) override;添加虚函数方法&#xff1a; 选中父类&#xff0c;点击鼠标右键点击重构点击 Insert Virtual Funtion of Base Class…

小朋友台灯什么品牌好,分享最好的台灯品牌排行榜

小朋友台灯什么品牌好&#xff1f;台灯作为我们日常生活中重要的桌面照明工具&#xff0c;对于办公族的工作和学生的学习都扮演着关键角色。长期使用质量不佳的台灯可能会对我们的视力健康造成不利影响&#xff0c;尤其是对于眼睛尚在发育阶段的青少年来说&#xff0c;这种影响…

5G技术相关部分图解

1、面向5G商用网络的全系列解决方案 面向5G商用网络的全系列解决方案涵盖了从核心网到接入网的各个方面&#xff0c;确保网络的高性能、高可靠性和高安全性 2、2\3\4\5G带宽图解 G带宽的提升将推动许多新型应用的发展&#xff0c;并提供更快速、更可靠的移动通信体验。然而…

一个panic问题引起对percpu变量的思考

1 问题引入 最近在分析一个panic问题时&#xff0c;发现panic现场无法与log对应起来。 先贴log: <1>[ 180.089084] Unable to handle kernel NULL pointer dereference at virtual address 00000001 <1>[ 180.099551] pgd 8bbde651 <1>[ 180.107775] …

AXI UART 16550 IP核简介

AXI UART 16550 IP核实现了PC16550D UART的硬件和软件功能&#xff0c;该UART可以在16450和16550 UART模式下工作。 一、 功能 AXI UART 16550 IP核执行从AXI主设备接收的字符的并行到串行转换&#xff0c;以及从调制解调器或串行外设接收的字符的串行到并行转换。它支持发送…

GPT3.5、GPT4、GPT4o的性能对比

理论总结 随着版本的升级,模型在参数数量、语言理解能力、生成文本质量、多模态能力、推理能力等方面均有显著提升。GPT-4.0作为最新改进版,提供了最先进的功能和性能。 实际对比 1.1.GPT3.5 1.2.GPT4 1.3.GPT4o 在语义理解上,无差别。 下面测试下代码能力。 测试问题 我…

uni-app:音频播放 uni.createInnerAudioContext()

uni.createInnerAudioContext() 创建并返回内部 audio 上下文 innerAudioContext 对象 简单实现音频播放&#xff1a; let innerAudioContext uni.createInnerAudioContext(); innerAudioContext.src ../../../../static/ok.MP3;//音频地址 innerAudioContext.play(); inn…

Pikachu 靶场 SQL 注入通关解析

前言 Pikachu靶场是一种常见的网络安全训练平台&#xff0c;用于模拟真实世界中的网络攻击和防御场景。它提供了一系列的实验室环境&#xff0c;供安全专业人士、学生和爱好者练习和测试他们的技能。 Pikachu靶场的目的是帮助用户了解和掌握网络攻击的原理和技术&#xff0c;…

【案例】使用Vue实现拖拽课表

效果展示 效果说明 点击左侧的课程并进行拖拽&#xff0c;拖拽到要开设本课程的地方然后松手&#xff0c;即可将本节课设置为当前所拖拽的科目并且背景色为当前科目的背景色&#xff0c;当多次拖拽到同一节课的时候将会实现后者覆盖前者的效果。 效果实现代码 第一步&#x…

波场TRON超级代表候选名单“迎新” 携手谷歌云打造更可靠基础设施

来自波场TRON DAO的信息显示,谷歌云已加入波场TRON区块链上的超级代表候选名单。分析人士认为,这将为波场TRON网络提供更加稳定和可靠的区块生成和交易打包服务,有助于进一步加强波场TRON网络的安全性和稳定性,推动区块链技术的发展和创新。此举也将提高波场TRON在加密货币领域…