JDBC连接数据库详解~

news2024/11/20 19:41:34

课前导读:

本文章有关JDBC连接数据库的操作,其中涉及了编译器idea的使用,其中连接的数据库为MySQL数据库,通过博主自己的学习和总结写出了下面的文章。


目录

课前导读:

一、JDBC简介

二、JDBC连接操作

三、源码提供以及注释信息

总结:


一、JDBC简介

我们没有官方的解释,jdbc就是很多个Java圈子里的大佬通过约定API定义操作数据库的标准,然后个个不同数据库厂商提供相应的驱动jar包来加载API文档来进行编译器和数据库的连接。驱动jar包相当于API的具体实现,只要掌握了JDBC这套API操作,无论操作哪个数据库,代码都是不变的,基本相同。

JDBC屏蔽了不同数据库原生API之间的差异,使用同一套API接口来规范所有数据库的编程操作。

大概就是这个图的意思

 但是官网下载驱动jar包很麻烦,于是可以取中央仓库下载jar包

中央仓库:Maven Repository: Search/Browse/Explore (mvnrepository.com)

 搜索mysql

点击Java连接选项

下载自己数据库对应版本的jar包

 下载jar包

 

 打开文件夹

 


二、JDBC连接操作

1、创建项目,创建lib包

2、将jar包复制进lib包中

3、右键jar包选中add as library点击,然后ok。 

 

4、创建Java项目进行jdbc代码编写(具体实现看代码中的注释部分)

  (1)通过jar包中的datasouce方法进行数据源的获取,固定格式记住,后面时mysql还是其他的根据所连接数据库类型进行选择。

  (2)通过datasource的向下转型调用子类方法进行路径、用户名和密码的配置。

 url:"jdbc:mysql://127.0.0.1:3306/java_106_1?characterEncoding=utf8&useSSL=false"

固定连接格式:3306后面写的是你所连接的mysql数据库中的具体数据库名,characterEncoding意思是使用utf8字符集,useSSL=false是指关闭网络协议,否则会报错。

  (3)通过getconnection方法获取数据库连接,此处一定要选java.sql接口,不是那个jdbc接口。

 

  (4)定义字符串动态写入sql,?是占位符

  (5)创建statement对象接收上面的数据库连接。

 (6)通过Java的输入进行动态sql编写,通过statement的setint,setString方法把数据写入到sql中,这里的1,2就是指第几个问号,从1开始数。

  (7)执行sql语句

用statement的executeupdate方法来执行sql,用ret接收收影响行数,打印受影响行数。

  (8)释放资源:先执行的后释放,先释放近的。 

  (9)如果执行sql语句是查询语句时,就需要遍历结果集,如果时增删改语句就和上面一样,只需要改动sql语句。 


 

三、源码提供以及注释信息

 增加语句连接:

package src;

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 JDBCInsertDemo {
    public static void main(String[] args) throws SQLException {
        //JDBC连接数据库增加数据操作
        Scanner in=new Scanner(System.in);
        //1.获取数据源
        DataSource dataSource=new MysqlDataSource();
        //1.1配置路径,用户名和密码
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java_106_1?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");

        //2.获取数据库连接,抛异常给jvm处理,如果遇到异常直接终止程序
        Connection connection=dataSource.getConnection();

        //3.动态写入增加sql语句到student表中
        String sql="insert into student values(?,?)";
        //3.1创建statement对象,接收连接.
        PreparedStatement statement=connection.prepareStatement(sql);
        //写入sql数据
        int id=in.nextInt();
        //多写一行line防止下面输入字符串时遇到int的回车退出。
        in.nextLine();
        String name=in.nextLine();
        //默认第一个问号从1开始,这里的1,2就是上面创建sql语句时问号的位置。
        statement.setInt(1,id);
        statement.setString(2,name);

        //4.执行sql语句
        int ret=statement.executeUpdate();
        System.out.println(ret);

        //5.释放资源,先创建的后释放,后创建的先释放
        statement.close();
        connection.close();
    }
}

修改语句连接:

package src;

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 JDBCUpdateDemo {
    public static void main(String[] args) throws SQLException {
        //JDBC连接数据库修改操作,相比添加操作只需要修改sql语句
        Scanner in=new Scanner(System.in);
        //1.获取数据源
        DataSource dataSource=new MysqlDataSource();
        //1.1配置路径,用户名和密码
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java_106_1?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");

        //2.获取数据库连接,抛异常给jvm处理,如果遇到异常直接终止程序
        Connection connection=dataSource.getConnection();

        //3.动态写入增加sql语句到student表中
        String sql="update student set id=?,name=? where id=?";
        //3.1创建statement对象,接收连接.
        PreparedStatement statement=connection.prepareStatement(sql);
        //写入sql数据
        System.out.println("请输入你修改后的新id:");
        int newid=in.nextInt();
        //多写一行line防止下面输入字符串时遇到int的回车退出。
        in.nextLine();
        System.out.println("请输入你修改后的新name:");
        String newname=in.nextLine();
        System.out.println("请输入你要修改的原id位置:");
        int id=in.nextInt();
        //默认第一个问号从1开始,这里的1,2就是上面创建sql语句时问号的位置。
        statement.setInt(1,newid);
        statement.setString(2,newname);
        statement.setInt(3,id);

        //4.执行sql语句
        int ret=statement.executeUpdate();
        System.out.println(ret);

        //5.释放资源,先创建的后释放,后创建的先释放
        statement.close();
        connection.close();
    }
}

删除语句连接:

package src;

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 JDBCDeleteDemo {
    public static void main(String[] args) throws SQLException {
        //JDBC连接数据库删除操作,相比修改操作只需要改sql语句
        Scanner in=new Scanner(System.in);
        //1.获取数据源
        DataSource dataSource=new MysqlDataSource();
        //1.1配置路径,用户名和密码
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java_106_1?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");

        //2.获取数据库连接,抛异常给jvm处理,如果遇到异常直接终止程序
        Connection connection=dataSource.getConnection();

        //3.动态写入增加sql语句到student表中
        String sql="delete from student where id=?";
        //3.1创建statement对象,接收连接.
        PreparedStatement statement=connection.prepareStatement(sql);
        //写入sql数据
        System.out.println("请输入你删除的id:");
        int newid=in.nextInt();
        //多写一行line防止下面输入字符串时遇到int的回车退出。
        //默认第一个问号从1开始,这里的1,2就是上面创建sql语句时问号的位置。
        statement.setInt(1,newid);

        //4.执行sql语句
        int ret=statement.executeUpdate();
        System.out.println(ret);

        //5.释放资源,先创建的后释放,后创建的先释放
        statement.close();
        connection.close();
    }
}

查询语句连接:

package src;

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 JDBCSeleteDemo {
    public static void main(String[] args) throws SQLException {
        //JDBC连接数据库修改操作,相比添加操作只需要修改sql语句
        Scanner in=new Scanner(System.in);
        //1.获取数据源
        DataSource dataSource=new MysqlDataSource();
        //1.1配置路径,用户名和密码
        ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java_106_1?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");

        //2.获取数据库连接,抛异常给jvm处理,如果遇到异常直接终止程序
        Connection connection=dataSource.getConnection();

        //3.动态写入增加sql语句到student表中
        String sql="select * from student";
        //3.1创建statement对象,接收连接.
        PreparedStatement statement=connection.prepareStatement(sql);

        //4.执行sql语句,使用resultset结果集接收query的值,遍历结果集输出查询内容
        //!!注意!!增删改用statement.executeUpdate,查询用executeQuery
        ResultSet resultSet =statement.executeQuery();
        //通过next来遍历,直到没有就跳出循环
        while(resultSet.next()){
            //接收遍历得到的数据
            //此处接收的名字要和数据库的字段名一一对应.
            int id=resultSet.getInt("id");
            String name=resultSet.getString("name");
            System.out.println(id+" "+name);
        }

        //5.释放资源,先创建的后释放,后创建的先释放
        statement.close();
        connection.close();
    }
}


总结:

本次JDBC连接主要是针对MySQL数据库的连接,我们需要勤加联系这些代码,因为它都是一个固定的模板,我们只要掌握了,就可以随时拿出来用,这也是我们网页开发连接服务器和客户端的重要工具,也算是网页开发的基础内容,我们需要特别熟悉!

所有成功的开始还得基于牢靠的基础,努力学习,坚持编码,编程伴随每一天!

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

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

相关文章

数素数

目录 1013 数素数 输入格式: 输出格式: 输入样例: 输出样例: 代码长度限制: 时间限制: 内存限制: 思路: 1.判断素数 1.2素数判断代码: 2.数组存素数 2.2存素数代码: 3.输出Pm到Pn的全部素数 3.2代码 总代码: 总结: 题目…

Web大学生网页作业成品 bootstrap响应式网站开发 基于HTML+CSS+JS+Bootstrap制作火锅美食网站(4页)

🎀 精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

非零基础自学计算机操作系统 第1章 操作系统概述 1.4 操作系统的分类 1.4.3 实时操作系统 1.4.4 通用操作系统 1.4.5 单用户操作系统

非零基础自学计算机操作系统 文章目录非零基础自学计算机操作系统第1章 操作系统概述1.4 操作系统的分类1.4.3 实时操作系统1.4.4 通用操作系统1.4.5 单用户操作系统第1章 操作系统概述 1.4 操作系统的分类 1.4.3 实时操作系统 所谓实时,是指系统能够对外部请求做…

R语言多重比较方法

假设检验的基本原理是小概率原理,即我们认为小概率事件在一次试验中实际上不可能发生。 多重比较的问题 当同一研究问题下进行多次假设检验时,不再符合小概率原理所说的“一次试验”。如果在该研究问题下只要有检验是阳性的,就对该问题下阳性…

c#入门-静态引用,扩展方法

静态引用 声明静态引用 引用命名空间时,可以在using后面加static修饰符。 然后把要引用的命名空间改为带命名空间的一个具体的类。 这称为静态引用。 using static System.Int32; using static System.Console; int a Parse(ReadLine());静态引用的效果 静态引…

VRC改模从入门到入门

第一步入门 从unity开始 bilibili超细心的unity入门教程 虽然视频很长,但是从p1看到p41就行,脚本部分完全不需要看,因为vrc上传会过滤掉不是他们的脚本的。 unity下载一定要下载2019.4.31f1版本,哔哩哔哩教程有下载unity对应版本…

基于Android的外卖App系统设计

基于Android的外卖App系统设计 摘要 随着智能手机的快速普及,智能手机操作系统市场风生水起。为了让智能手机用户能够随时随地查询互联网所提供的服务,一种高效的办法就是将应用系统的功能拓展到手机终端上,让手机能够通过移动网以及互联网…

CentOS 安装 mysql 8.0

目录 下载 安装步骤 上传 解压安装 参考资料 补充报错解决 下载 MySQL :: Download MySQL Community Serverhttps://dev.mysql.com/downloads/mysql/ 安装步骤 上传 使用xshell,连接服务器,用 rz命令接收下载的文件(该命令使用 yum…

Linux 文件属性

Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。 为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。 在 Linux 中我们通常使用以下两个命…

LeetCode Hot 100~Day1

目录 两数之和 两数相加 无重复字符的最长子串 最长回文子串 盛最多水的容器 删除链表的倒数第n个节点 合并两个有序链表 有效的括号 两数之和 题目链接:1.两数之和 示例 输入:nums [2,7,11,15], target 9 输出:[0,1] 解释…

ADI Blackfin DSP处理器-BF533的开发详解33:数字信号处理详解-FFT(含源代码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 FFT(Fast Fourier Transformation),即为快速傅氏变换,是离散傅氏变换的快速算法&#x…

web前端期末大作业:JavaScript大作业——福五鼠动漫网页制作(6页)带轮播图效果 学生个人单页面网页作业 学生网页设计成品 静态HTML网页单页制作

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

R语言大数据分析纽约市的311万条投诉统计可视化与时间序列分析

介绍 本文并不表示R在数据分析方面比Python更好或更快速,我本人每天都使用两种语言。这篇文章只是提供了比较这两种语言的机会。 本文中的 数据 每天都会更新,我的文件版本更大,为4.63 GB。 CSV文件包含纽约市的311条投诉。它是纽约市开放…

MySQL 数据库 C/C++ 常用函数

🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊! &…

火爆出圈的OpenAI模型ChatGPT体验

1、ChatGPT简要介绍 ChatGPT是一种高效的语言模型,全称为"聊天式自动回复生成技术"(Chat-based Automatic Reply Generation Technology),用于预测人类语言的后续内容。它是基于OpenAI的GPT-3模型构建的,具…

XCIE-HUAWEI-超级完整的BGP-1

XCIE-HUAWEI-超级完整的BGP-1 声明,内容对比前面的可能差一点,因为这个BGP我是会的,但是华为的特性啥的不太会 所以相对来说可能没那么详细,不过应该也够的了,要看思科的翻我的文章去有思科的 先说一个东西 面试会问…

S7-200SMART实现MODBUS TCP通信(客户端+服务器)的具体方法和步骤示例

S7-200SMART实现MODBUS TCP通信(客户端+服务器)的具体方法和步骤示例 STEP7-Micro/WIN SMART 从V2.4 版本开始,软件中直接集成 Modbus TCP 库指令,安装软件后,Modbus TCP 指令位于 STEP7-Micro/WIN SMART 项目树中“指令”文件夹的“库”文件夹中。 如下图Modbus TCP库指令…

R语言曲线回归:多项式回归、多项式样条回归、非线性回归数据分析

最近我们被客户要求撰写关于曲线回归的研究报告,包括一些图形和统计输出。本文将使用三种方法使模型适合曲线数据:1)多项式回归;2)用多项式样条进行B样条回归;3) 进行非线性回归。在此示例中&am…

微信小程序 | 一比一复刻世界杯点球大战

📌个人主页:个人主页 ​🧀 推荐专栏:小程序开发成神之路 --【这是一个为想要入门和进阶小程序开发专门开启的精品专栏!从个人到商业的全套开发教程,实打实的干货分享,确定不来看看? …

Codeforces Round #837 (Div. 2) Hossam and Friends

原题链接:https://codeforces.com/contest/1771/problem/B 题意 :你总共有n个朋友编号1~n,其中m对互不认识,求1~n区间中没有互不认识的子段的总个数。 思路:总字段个数为每个编号前面的编号个数(包括自己…