JavaSE23——JDBC

news2024/10/7 2:20:01

JDBC

一、什么是 JDBC?

JDBC 是 Java Database Connectivity 的缩写,它是 Java 语言用于与关系型数据库进行连接和交互的一种标准接口。

JDBC 提供了一种统一的方式,使得 Java 应用程序能够通过标准的 API 与各种不同的数据库进行通信,而不需要关注具体数据库的实现细节。通过 JDBC,开发人员可以使用 Java 语言来执行 SQL 查询、更新数据库内容以及管理数据库事务。

JDBC API库包含下面提到的每个任务,都是与数据库相关的常用用法。

  • 制作到数据库的连接。
  • 创建SQL或MySQL语句。
  • 执行SQL或MySQL查询数据库。
  • 查看和修改所产生的记录。

从根本上来说,JDBC是一种规范,它提供了一套完整的接口,允许便携式访问到底层数据库,因此可以用Java编写不同类型的可执行文件,例如:

  • Java Application
  • Java Applets
  • Java Servlets
  • Java ServerPages (JSPs)
  • Enterprise JavaBeans (EJBs)

所有这些不同的可执行文件就可以使用JDBC驱动程序来访问数据库,这样可以方便的访问数据。

JDBC具有ODBC一样的性能,允许Java程序包含与数据库无关的代码。

在这里插入图片描述

使用 JDBC,开发人员可以通过编写 Java 代码来连接数据库并执行各种操作,从而实现与数据库的交互。JDBC 提供了灵活且可扩展的接口,可以适用于不同的关系型数据库,如MySQL、Oracle、SQL Server等。

二、常见的JDBC组件

  1. Driver接口
  • 实现数据库驱动程序的接口,又厂商负责实现并提供,开发者只需引入驱动不同数据库的jar包。
  1. DriverManager类
  • 用于加载JDBC驱动程序,并建立与数据库的连接。

  • 有两个重要的静态方法:

    方法功能
    void registerDriver (Driver driver)用于加载数据库驱动程序。
    Connection getConnection(String url, String user, String password)连接数据库并返回连接对象。
  1. Connection接口

    方法功能
    Statement createStatement ()获取一个陈述器对象
    PreparedStatement prepareStatement (String sql)获取一个SQL预编译的陈述器
    CallableStatement prepareCall (String sql)获取SQL操作的储存过程
    DatabaseMetaData getMetaData()获取数据库元数据的对象。
  2. Statement接口

    方法功能
    boolean execute (String sql)可执行任何SQL语句,有结果集时为true,否则为false。
    ResultSet executeQuery (String sql)执行select语句,返回结果集
    int executeUpdate (String sql)执行insert、update、delete语句,返回受影响行数
  3. ResultSet接口

  • 用于存放和解析结果集,对象初始化时游标在第一行,调用next()方法换行。

  • 数据获取方法

    方法功能
    getXXX (int index)以索引方式获取某字段的数据。
    getXXX (String field)以字段名获取某字段的数据。
  • 游标操作方法

    方法功能
    void next()游标移动到下一行
    void previout ()游标移动到上一行
    void absolute (int row)游标移动到指定行
    void afterLast ()游标移动到尾行之后
    void beforeFirst ()游标移动到首行之前
    void last ()游标移动到尾行

    1. PreparedStatement接口

实际开发中往往需要将程序的变量作为SQL语句的参数,PreparedStatement是Statement的子接口,可预编译SQL语句,用占位符“?”代替参数进行预编译,之后在用 setXXX()方法给参数赋值。示例:

String sql = "insert into tab_user(id, name, birthday) value(?, ?, ?)";
PreparedStatement ps = connection.preparedStatement(sql);
ps.setInt(1, 101);            //第一个参数是字段索引,第二个是数据。
ps.setString(2, "King");
ps.setDate(3, "2023-1-1");
ps.executeUpdate();

三、实现JDBC的基本步骤

  1. 将数据库驱动的 jar包(mysql-connector-java.jar)放到 lib目录,并右键引用 jar包,确认MySQL服务正在运行。

  2. 加载并注册驱动,有两种方式:

    Class.forName(“com.mysql.jdbc.Driver”);

    该方法作用是加载并初始化一个指定的类。

    DriverManager.registerDriver(new com.mysql.jdbc.Driver() );

    由于Driver对象源码中默认存在一段静态代码自动执行Class.forName("driverName") ,所以此方法会使驱动重复注册。

  3. 连接数据库时,其中参数 URL=“jdbc:mysql://hostName:port/databaseName?parameter”;

    jdbc:mysql:// 是规定格式;
    hostName:port 是主机地址和端口号;
    databaseName 是MySQL服务中必须已经存在的一个数据库对象的名称。
    ?parameter 用来设置一些参数,主要必须设置三个字符集参数,否则会报警。

四 JDBC 完整实现代码

pom.xml

    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.4</version>
        </dependency>
        
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

DBUtil.java

package com.lenovo.util;

import java.sql.*;
import java.util.List;

public class DBUtil {
    //mysql地址
    public static final String url = "jdbc:mysql://192.168.246.105:3306/bigdata2004?" +
            "useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";
    //用户名
    public static final String username = "root";
    //密码
    public static final String pwd = "123456";

    public static Connection connection; //null
    ResultSet resultSet;
    static {
        //加载驱动器
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }


    //连接mysql
    public static void getConnection() {
        try {
            if (connection == null) {
                connection = DriverManager.getConnection(url, username, pwd);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    //查询数据库中的数据
    public ResultSet executeQuery(String sql, List<Object> params) {
        getConnection();
           
        //预加载  select * from user  where id = ?  and username = ? and passworod = ?
        // sql占位符  从1开始计数
        try {
            PreparedStatement pstmt = connection.prepareStatement(sql);
            if (params != null && params.size() > 0) {
                for (int i = 0; i < params.size(); i++) {
                    pstmt.setObject(i + 1, params.get(i));
                }
            }
            resultSet = pstmt.executeQuery();

        } catch (SQLException e) {
            e.printStackTrace();
        }
        return resultSet;

    }

    // TODO 释放资源
}

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

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

相关文章

GoLong的学习之路(二十二)进阶,语法之并发(go最重要的特点)(channel的主要用法)

这一章是接上一章内容继续&#xff0c;上一章说到协程也就是goroutine&#xff0c;如何使用它&#xff0c;这一张是讲一种数据结构。当然这个章节的数据结构非常重要。可以说这个数据结构就是为了方便协程&#xff0c;才制作出来的。 单纯地将函数并发执行是没有意义的。函数与…

AWK语言第二版 3.4 Unicode数据 3.5 基本图表 3.6 总结

3.4 Unicode数据 啤酒是不分国界的饮料&#xff0c;与之相称的是&#xff0c;啤酒的名字中也使用了很多非ASCII字符。下面的 Awk 程序 charfreq 统计了输入中每个不同的 Unicode 代码点&#xff08;code point&#xff09;的出现次数。&#xff08;代码点通常是一个字符&#…

Deep Freeze冰点还原2024中文免费版恢电脑数据恢复工具

相信大家都认同更新日志&#xff1a;支持Win 10功能更新&#xff0c;Win更新的恢复升级&#xff0c;将系统驱动器从深度冻结保护中排除&#xff0c;全支持NVME驱动器&#xff0c;支持ISCSI驱动器。人所共知的是集成性和兼容性&#xff1a;Deep Freeze 冰点可兼容多种硬盘驱动器…

vulnhub打靶日记:接口和传参的信息收集技巧

目录 总结 边界突破 信息收集 主机发现 端口扫描&#xff0c;服务探测 web渗透 目录扫描 参数爆破 php封装器写入文件尝试 ssh爆破 内网渗透 提权 免费领取安全学习资料包&#xff01; 靶机&#xff1a;https://download.vulnhub.com/evilbox/EvilBox---One.ova 攻…

Vue路由重定向

一、Vue路由-重定向 1.问题 网页打开时&#xff0c; url 默认是 / 路径&#xff0c;如果未匹配到组件时&#xff0c;会出现空白 2.解决方案 重定向 → 匹配 / 后, 强制跳转 /home 路径 3.语法 { path: 匹配路径, redirect: 重定向到的路径 }, 比如&#xff1a; { path:/ …

idea 2023 设置启动参数、单元测试启动参数

找到上方的editconfigration&#xff0c; 如下图&#xff0c;如果想在启动类上加&#xff0c;就选择springboot&#xff0c;如果想在单元测试加&#xff0c;就选择junit 在参数栏设置参数&#xff0c;多个参数以空格隔开 如果没有这一栏&#xff0c;就选择就可以了。 然后&…

JavaScript爬虫程序爬取游戏平台数据

这次我用一个JavaScript爬虫程序&#xff0c;来爬取游戏平台采集数据和分析的内容。爬虫使用了爬虫IP信息&#xff0c;爬虫IP主机为duoip&#xff0c;爬虫IP端口为8000。以下是每行代码和步骤的解释&#xff1a; // 导入所需的库 const axios require(axios); const cheerio …

为什么说亚马逊、Lazada、虾皮等跨境平台测评很重要?

在亚马逊、shopee、Lazada的生态系统中&#xff0c;给店铺测评是一个重要的环节&#xff0c;优质的评论可以给潜在的买家对于产品质量更加信任&#xff0c;其次对于提高产品的销售跟排名也可以起到关键的作用 为什么测评重要&#xff1f; 1. 提高页面权重 一般页面有三个部分…

fmx windows 下 制作无边框窗口最小化最大化并鼠标可拖移窗口

1,最顶端 放一个rectangle 置顶 ,此区域后面实现鼠标拖动 移动窗口,可在上面放置最大,最小,关闭按钮 2,窗口边框模式 设置 none 3,rectangel mousemove事件 uses Winapi.Windows,Winapi.Messages,FMX.Platform.Winprocedure TfrmMain.Rectangle1MouseMove(Sender: TObje…

今天分享5的款软件,你曾经用过几款?

​ 分享是一种博爱的心境&#xff0c;学会分享&#xff0c;就学会了生活&#xff0c;今天分享的五款软件&#xff0c;是否有你曾经使用过的软件呢&#xff1f; 1.虚拟桌面——Dexpot ​ Dexpot是一款免费的虚拟桌面软件&#xff0c;可以让您在Windows系统上创建和管理多个桌面…

C++容器—— set 和 multiset

一、set 1.介绍 1. 与map/multimap不同&#xff0c;map/multimap中存储的是真正的键值对&#xff0c;set中只放value&#xff0c;但在底层实际存放的是由构成的键值对。 2. set中插入元素时&#xff0c;只需要插入value即可&#xff0c;不需要构造键值对。 3. set中的元素不…

STM32 堆栈空间分布

参考 运行时访问__initial_sp和__heap_base 无RTOS时的情况 在以上配置的情况下&#xff0c;生成工程。在工程的startup.s文件中&#xff0c;由如下代码&#xff1a; Stack_Size EQU 0x400AREA STACK, NOINIT, READWRITE, ALIGN3 __Stack_top ; 自己添加 Stack_Mem…

Mysql数据库 10.SQL语言 储存过程 中 流程控制

存储过程中的流程控制 在存储过程中支持流程控制语句用于实现逻辑的控制 一、分支语句 语法&#xff1a;if-then-else 1.单分支语句 语法 if conditions then ——SQL end if; if conditions then——SQLend if; ——如果参数a的值为1&#xff0c;则添加一条班级信息 …

windows系统远程桌面连接centos7系统

1. 安装 GNOME 桌面环境&#xff08;如果尚未安装&#xff09; yum groupinstall "GNOME Desktop" 2. 安装 VNC Server yum install tigervnc-server 3. 设置 vnc 账号密码 vncpasswd root root 是账号&#xff0c;接下会提示两次输入密码 4. 安装 xrdp 检查…

Java智慧工地云平台监控管理系统源码

随着科技的发展&#xff0c;让人们也愈发了解可视化操作所带来的优势。智慧工地的诞生&#xff0c;相当于为建筑施工带来了一套较为完整的数字化流程&#xff0c;能够完善施工环节中的各部分内容。 智慧工地是指利用先进的信息技术&#xff0c;将传感器、互联网、人工智能等技术…

<a>标签的download属性部分浏览器无法自动识别文件后缀

问题 最近开发中遇到的问题&#xff0c;文件名中含有点和逗号字符&#xff0c;当使用a标签的download属性下载内容时&#xff0c;如果不指定后缀&#xff0c;部分浏览器无法自动识别文件后缀。如下图所示&#xff1a; 定义用法 download 属性定义了下载链接的地址。 href 属性…

注册虾皮买家号需要哪些资料?

注册虾皮买家号其实是很简单的&#xff0c;使用相应国家的手机号及对应的环境就可以注册了的&#xff0c;如果想要账号更方便使用&#xff0c;也可以绑定邮箱进行认证。 而如果想要使用shopee买家通系统进行自动化的注册&#xff0c;那么对于资料就有一定的要求了。 1、手机号…

vue上传宝塔退出页面404

当我们将vue上传到服务器上点击退出时出现页面404时。 如何解决&#xff1a; 1.如果是element plus框架时&#xff1a; 找到layouts文件里面的components文件下Avatar中的index.vue. 2.添加重新加载&#xff1a;location.reload(); 如果是其他的框架同上 。

Spring Boot中使用Spring Data JPA访问MySQL

Spring Data JPA是Spring框架提供的用于简化JPA&#xff08;Java Persistence API&#xff09;开发的数据访问层框架。它通过提供一组便捷的API和工具&#xff0c;简化了对JPA数据访问的操作&#xff0c;同时也提供了一些额外的功能&#xff0c;比如动态查询、分页、排序等。 …

C#,数值计算——偏微分方程,谱方法的微分矩阵的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 谱方法的微分矩阵 /// Differentiation matrix for spectral methods /// </summary> public class Weights { public Weights() { …