Java JDVC编程

news2024/11/26 3:53:26

1、Java的数据库编程:JDBC

JDBC(Java Database Connectivity)是Java中用来与数据库进行交互的一种标准API(应用程序编程接口)。它为开发人员提供了一种统一的方式来访问各种类型的数据库管理系统(DBMS),如 MySQL, Oracle, SQL Server, PostgreSQL 等。

通过 JDBC,Java 应用程序可以执行 SQL 语句来查询、更新或管理关系型数据库中的数据。JDBC API 定义了一系列的接口和类,这些接口和类通常由数据库供应商提供的驱动程序实现。不同的数据库可能需要不同类型的驱动程序。

2、使用 JDBC 进行数据库操作的基本步骤:  

2.1 加载驱动

在使用 JDBC 之前,需要先加载合适的数据库驱动程序。

在项目中创建文件夹lib,并将依赖包mysql-connector-java-5.1.47.jar复制到lib中,右键依赖包

点击 add as libarary...

2.2 建立连接

Connection接口实现类由数据库提供,获取Connection对象通常有两种方式:

DriverManager(驱动管理类)的静态方法获取:

// 加载JDBC驱动程序
Class.forName("com.mysql.jdbc.Driver");
// 创建数据库连接
Connection connection = DriverManager.getConnection(url);

DataSource(数据源)对象获取。实际应用中会使用DataSource对象。

 //1、初始化一个数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root"); 
        ((MysqlDataSource) dataSource).setPassword("123456");

setUrl()  , setUser() , setPassword()

setUrl()

setUrl() 方法通常用于配置 Java 数据源(DataSource)对象,以便指定与数据库建立连接所需的 URL。这个 URL 是 JDBC(Java Database Connectivity)连接字符串,它包含了数据库服务器的位置、端口、数据库名以及可能的一些其他的连接参数。

参数说明:

  • jdbc:mysql:// 表示使用 MySQL 驱动程序。
  • 127.0.0.1:3306 是 MySQL 数据库的默认端口地址。
  • db_test 是要连接的数据库的名字。
  • ?characterEncoding=utf8&useSSL=false 是一些额外的参数,比如设置字符编码为 UTF-8 并且禁用 SSL 加密。

setUser()

setUser() 方法通常是在配置 Java 数据源 (DataSource) 对象时使用的方法之一,用于设置数据库连接的用户名。这个方法通常与 setPassword() 方法一起使用,以便完整地配置数据库连接所需的认证信息。

参数说明:

    root  : 一个字符串,表示用于连接数据库的用户名

setPassword()

setPassword() 方法通常是在配置 Java 数据源 (DataSource) 对象时使用的方法之一,用于设置数据库连接的密码。这个方法与 setUser() 方法一起使用,以便完整地配置数据库连接所需的认证信息。

参数说明:

  • password:一个字符串,表示用于连接数据库的密码。

以上两种方式的区别是:

 1. DriverManager类来获取的Connection连接,是无法重复利用的,每次使用完以后释放资源 时,通过connection.close()都是关闭物理连接。

2. DataSource提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接 是可以复用的,每次使用完数据库连接,释放资源调用connection.close()都是将 Conncetion连接对象回收。

2.3 创建Statement和PreparedStatement对象

使用 Connection 对象创建 Statement 或 PreparedStatement 对象。

 //2、与数据库服务器建立连接
        Connection connection = dataSource.getConnection();

2.4 执行SQL语句

通过 Statement 或 PreparedStatement 对象执行 SQL 查询、插入、更新等操作。

插入操作:

        //编写SQL
        String sql = "insert  into student0 values (?,?);";
        PreparedStatement statement = connection.prepareStatement(sql); //4、预编译
        statement.setInt(1, id); // 第一个 ? = 1
        statement.setString(2, name);// 第二个 ? = name

        //打印拼接后的SQL
        System.out.println(statement);

 查询操作:

        //3、构造sql
        String sql = "select * from student0";
        PreparedStatement statement = connection.prepareStatement(sql);


        //4、打印拼接后的SQL
        System.out.println(statement);

2.5 处理结果集

执行插入操作:

        //执行SQL
        int ret = statement.executeUpdate();
        System.out.println("ret = " + ret);

 执行查询操作:

需要通过 ResultSet 对象来处理返回的数据。

//ResultSet就表示查询的结果集合(临时表) 此处就需要针对表进行遍历
        ResultSet resultSet = statement.executeQuery();
 //遍历结果集合
        //通过next() 可获得临时表中的每一行数据,如果获取到最后一行之后,返回false
        while (resultSet.next()) {
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println("id = " + id + ", name = " + name);
        }

2.6 关闭资源

最后,确保所有打开的资源都被正确关闭,包括 ResultSet、Statement 和 Connection。

完整代码:

插入数据:


import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class ConnectDemo {
    public static void main(String[] args) throws SQLException {
        Scanner scan = new Scanner(System.in);
        //1、初始化一个数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("123456");

        //2、与数据库服务器建立连接
        Connection connection = dataSource.getConnection();

        //3、编写SQL
        System.out.println("请输入学生姓名:");
        String name = scan.next();
        System.out.println("请输入学生的学号:");
        int id = scan.nextInt();

        
        String sql = "insert  into student0 values (?,?);";
        PreparedStatement statement = connection.prepareStatement(sql); //4、预编译
        statement.setInt(1, id); // 第一个 ? = 1
        statement.setString(2, name);// 第二个 ? = name

        //4、打印拼接厚的SQL
        System.out.println(statement);

        //5、执行SQL
        int ret = statement.executeUpdate();
        System.out.println("ret = " + ret);


        //6、释放资源
        statement.close();
        connection.close();
    }
}


查询数据:

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

public class ConnectDemo2 {
    public static void main(String[] args) throws SQLException {
        Scanner scan = new Scanner(System.in);
        //1、初始化一个数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("123456");

        //2、与数据库服务器建立连接
        Connection connection = dataSource.getConnection();

        //3、构造sql
        String sql = "select * from student0";
        PreparedStatement statement = connection.prepareStatement(sql);


        //4、打印拼接后的SQL
        System.out.println(statement);

        //5、执行sql
        //ResultSet就表示查询的结果集合(临时表) 此处就需要针对表进行遍历
        ResultSet resultSet = statement.executeQuery();


        //6.遍历结果集合
        //通过next() 可获得临时表中的每一行数据,如果获取到最后一行之后,返回false
        while (resultSet.next()) {
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println("id = " + id + ", name = " + name);
        }
    }
}

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

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

相关文章

火锅店管理系统

TOC springboot260火锅店管理系统 第1章 绪论 1.1选题动因 当前的网络技术,软件技术等都具备成熟的理论基础,市场上也出现各种技术开发的软件,这些软件都被用于各个领域,包括生活和工作的领域。随着电脑和笔记本的广泛运用&am…

(24)(24.3) MSP OSD(二)

文章目录 前言 3 OSD面板项目配置 4 使用SITL测试OSD 5 使用任务规划器配置布局 6 视频 前言 ArduPilot 支持 MSP OSD 协议,该协议允许在 DJI 护目镜上显示飞行数据,就像许多自动驾驶仪中的外部 MAVLink OSD 或内部集成模拟 OSD 一样。如果配置了 …

世界顶级思想家起名大师颜廷利:金融离不开银行,灵魂离不开引航

在《升命学说》一书中,山东济南的杰出人物、被广泛认为是最有影响力的哲学家之一的颜廷利教授,提出了一系列深奥而又实用的生命哲学。这些理念不仅是对传统文化的传承,也是对现代社会的深刻洞察。 世界伟大人民的哲学家思想家教育家,山东籍当代文化名人颜廷利教授提出,生命的本…

winApi与QtApi的共享内存通信

目的 就是A程序是QT的程序用的QT的接口读取共享内存,B程序是WinApi创建的共享内存,两个程序进行共享内存; 其间还有信号量,信号量,统一用的winApi的信号量。 就是下边这种情况: 下边的这个例子,就针对两块重点,进行分析: 1、QT侧的共享内存与win Api的共享内存如何…

音频剪辑新纪元:探索2024年人人都在用的音乐编辑工具

当你计划为视频添加旁白或投身有声书录制领域时,音乐剪辑软件便成为了不可或缺的关键工具。挑选一款既简单易上手又功能全面的音频编辑软件,将极大地加速并优化你创作理想音频文件的过程。 1.福昕音频剪辑 链接直达>>https://www.foxitsoftware.…

OJ题——二叉树(前序遍历)

🍬个人主页:Yanni.— 🌈数据结构:Data Structure.​​​​​​ 🎂C语言笔记:C Language Notes 计算结点数 首先得算出这个结点有多少,不然数组的空间无法开辟出来。 利用递归算法,…

案例精选 | 某省级第二人民医院恶意外连监测与治理项目

某省级第二人民医院,是某省卫健委直属三级甲等医疗机构,一所集医疗、科研、教学、预防、保健为一体的大型现代化综合医院。医院设施设备先进,‌技术服务领先,‌现有开放床位1400余张,临床医技科室90余个。并且&#xf…

漏洞复现-K26-1开源-证书查询系统-任意文件读取

1 产品简介 某开源的证书查询系统不少平台在使用 2 漏洞概述 攻击者可以通过构造恶意的请求来利用该漏洞,从而读取或下载他们本来无权访问的文件,如密码、私钥、证书等,会提供攻击者更多可用信息,提高被入侵的风险。 3 复现环…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第五篇 文件系统构建篇-第七十九章 Ubuntu20文件系统

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

如何进行数据中心的负载测试规划和设计

负载测试是数据中心规划和设计的重要组成部分,它可以帮助评估系统在高负载条件下的性能表现。以下是进行数据中心负载测试规划和设计的步骤: 1. 确定目标:首先,需要明确负载测试的目标。这可能包括评估系统的最大处理能力&#xf…

2024年省市县乡镇村行政边界矢量数据分享,数据获取在文末

今天给大家分享的是【2024乡镇区划矢量边界数据】!数据更新自2024年6月,同上一年对比乡镇数量有所调整。 现阶段的我国行政区划 行政区划的划分确实是为了更有效地进行行政管理和服务,使得国家的治理能够更加有序和高效。 行政区划的合理设定…

将ios 无线投屏至windows 10

尝试通过wsa安装乐播安桌盒子版, 没有成功,有帖为证, 但是却给win10带来了wsa的特性, 有帖为证: https://blog.csdn.net/weixin_62598385/article/details/141260431 尝试通过wsa安装乐播安桌盒子版, 没有成…

深入理解指针(五)

一、一维数组传参的本质 首先从一个问题开始&#xff0c;我们之前都是在函数外部计算数组的元素个数&#xff0c;那我们可以把数组传给一个函数后&#xff0c;在函数内部求数组的元素个数吗&#xff1f; 我们来看一下下面的代码&#xff1a; #include<stdio.h> void te…

springboot+JTA+atomikos多数据源分布式事务管理

一、项目需求 1、同时操作两个数据库&#xff0c;一个在本地服务器&#xff0c;一个在云服务器。 2、数据库数据是同步的&#xff0c;两个数据库同时做update、insert等操作时&#xff0c;无论哪个数据库操作失败&#xff0c;要求两个数据库数据同时回滚。 3、两个数据库均为SQ…

整理 酷炫 Flutter 优质 布局、交互 开源App

xtimer-flutter-app Flutter 计时器应用 项目地址&#xff1a;https://github.com/pedromassango/xtimer-flutter-app 项目Demo&#xff1a;https://download.csdn.net/download/qq_36040764/89631382

<数据集>骑行头盔识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;5026张 标注数量(xml文件个数)&#xff1a;5026 标注数量(txt文件个数)&#xff1a;5026 标注类别数&#xff1a;3 标注类别名称&#xff1a;[helmet, without_helmet, two_wheeler] 序号类别名称图片数框数1helm…

CCleaner Pro v6.26.11169 中文绿色便携版免安装 下载 Windows缓存清理 磁盘清理 注册表清理 大文件查找

可以清理系统和软件缓存&#xff0c;清理注册表&#xff0c;磁盘分析进行大文件查找 下载地址(资源制作整理不易&#xff0c;下载使用需付费&#xff0c;不能接受请勿浪费时间下载) 链接&#xff1a;https://pan.baidu.com/s/1XLi-J1h-G5xx8QBwXeFMcg?pwd2fen 提取码&#xf…

美股涨跌互现,半导体与科技股受关注

美股市场表现 昨夜&#xff0c;美股三大股指表现不一。道琼斯工业平均指数下跌0.36%&#xff0c;纳斯达克综合指数上涨0.21%&#xff0c;标准普尔500指数持平。科技股表现突出&#xff0c;其中英伟达股价上涨超过4%。债市方面&#xff0c;美国十年期国债收益率下跌至3.905%&am…

大语言模型(LLM)的SIO解构

引言: 大语言模型&#xff08;LLM&#xff09;作为现代人工智能领域的重要突破&#xff0c;已经在自然语言处理&#xff08;NLP&#xff09;中展现出了卓越的能力。这些模型通过深度学习算法和大规模数据训练&#xff0c;在多个语言任务中表现出接近人类的理解与生成能力&#…

七、2 ADC数模转换器有关函数介绍(Keil5)

函数介绍 &#xff08;1&#xff09;ADCCLK的配置函数&#xff08;在rcc.h中&#xff09; &#xff08;2&#xff09;ADC的库函数&#xff08;在adc.h中&#xff09;