实现JDBC编程

JDBC编程

JDBC —> java database connectivity 即java数据连接,
是执行sql语句的javaAPI(application programming interface),所谓的数据库是一类软件,就会提供对应的API,数据库有很多种,不同的数据库提供对应的API是不一样的,而这个API有java.sql.* 和 javax.sql.*包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库统一访问.


文章目录

  • JDBC编程
  • 一、提示
  • 二:实现编程
    • 1.实现数据源对象
    • 2.和数据库服务器建立连接
    • 3.构建sql语句
    • 4.把sql发送到服务器上并执行
    • 5.释放资源
  • 总结


数据库是一种"客服端–服务器"的结构,服务器往往会处理多个客服端的请求,前面我们通过cmd的形式以sql代码发送至服务器,服务器需要进行的操作是先检查该代码的正确性再执行 而这种方式会增大服务器的工作量,于是就出现用代码来完成客服端与服务器的连接—JDBC编程

一、提示

优点:
1.Java语言访问数据库操作完全面向抽象接口编程
2.开发数据库应用不用限定在特定数据库厂商的API
3.程序的可移植性大大增强

准备工作:
在这里插入图片描述
在idea项目中创建文件夹lib,并把该文件复制到lib中,再配置该jar包到本项目的依赖中:通过右键lib找到把该文件添加到位库,进而才能识别这是个"库"

二:实现编程

1.实现数据源对象

DataSource dataSource = new MysqlDataSource();//向上转型

DataSource 是个接口描述了数据从哪里来,数据库的位置,要使用该接口的方法就需要使用实现该接口的子类
设置对象的属性
1.数据库服务器的位置
2.访问服务器的用户名
3.访问服务器的密码

((MysqlDataSource) dataSource).setUrl("");
//描述jdbc的用途是给mysql使用的 
((MysqlDataSource) dataSource).setUser("");
//root ->  mysql自带的用户 管理员用户 权限最高!
((MysqlDataSource) dataSource).setpassword("");

其中url的格式为:
ip地址(描述mysql服务器在那个主机上)+端口号(区分一个主机的应用程序)+数据库名+‘?’+额外参数(解释说明这次数据库的连接)+'&'关闭加密

2.和数据库服务器建立连接

方法依然是数据源里面的,不过返回值的类型是Connection对象

Connection connection = dataSource.getConnection();

注意:
1.使用该方法的时候,数据库可能会出现未知的问题,所以需要处理异常
在方法上声名该异常 或者使用 try …catch…
2.此处连接成功的原因是必须要保证访问的数据库IP/端口号/数据库名/相关参数/用户密码

3.构建sql语句

比如,添加一个学生

String str = "insert into student values(1,"张三")";
PrapredStatemet statement = connection.prepareStatement(sql);

PrapredStatemet :“预编译的语句”:用来解析该语句的准确性
同时注意方法依然是上一个connect对象里的方法,用来编译sql语句同时返回PrapredStatement对象

4.把sql发送到服务器上并执行

法一:直接添加数据
完成上一个操作后就需要把该语句发送到服务器上并执行该语句
此时就要用到方法
举例

//最关键的操作
statement.executeUpdate();
返回值是整型,也就是在数据库上真正修改的代码的行数

在命令行,执行成功返回的数字在这里插入图片描述
除此之外,以上是用来增删改的一系列的操作在最关键的操作是
statement.executeUpdate(); 是正在和数据库服务器进行网络通信的
但是我们要在idea中进行查询某些数据的时候,有许多不同
此时方法是

ResultSet resultset = statement.executeQuery();
不出意外,返回的数据类型是"结果集合"故需要遍历,与迭代器的方法类似
 		while(resultSet.next()){
            System.out.println(resultSet.getInt("id"));
            System.out.println(resultSet.getString("name"));
        }

栗子:

public class Test_jdbc2 {
    public static void main(String[] args) throws SQLException {
        //1.创建数据源
        DataSource dataSource = new MysqlDataSource();
        // 三个准备工作
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java112?characterEncoding=utf8&useSSL=false");

        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("liusan11");
        //2.连接数据数据库服务器

        Connection connection = dataSource.getConnection();

        //3.构建sql语句
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);

        ResultSet resultSet = statement.executeQuery();
       
        //遍历结果集合
        while(resultSet.next()){
            System.out.println(resultSet.getInt("id"));
            System.out.println(resultSet.getString("name"));
        }

        //关闭资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}

法二:通过控制台添加数据

public class jdbc3 {
    public static void main(String[] args) throws SQLException {
        //0.输入操作
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入id :");
        int id = scan.nextInt();
        System.out.println("请输入名字 :");
        String name = scan.next();
        //1.创建数据源 并设置3个属性
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java112?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("liusan11");
        //2.获取连接对象
        Connection connection = dataSource.getConnection();
        //3.构造sql语句
        String sql = "insert into student values(?,?)";//? 表示占位符
        PreparedStatement statement = connection.prepareStatement(sql);
        //匹配占位符的顺序和类型 方法同样!
        statement.setInt(1,id);
        statement.setString(2,name);
        //4.发送到服务器
        int n = statement.executeUpdate();
        System.out.println(n);
        //5.释放资源
        statement.close();
        connection.close();
    }
}

5.释放资源

statement.close();
connection.close();
resultSet.close();

这里必须要保证顺序与先前的相反!

总结

大概就这样了,本节内容主要就是通过java代码来实现客服端和服务器的通信,重点在于实现代码编程可以分以下几个步骤
1.创建数据源对象 2.建立客服端和服务器的关系3.创建sql代码并发送到服务器执行4.释放资源
每个步骤都建立依赖的联系:关系从数据源对象中方法得来,预编译语句从关系的编译中的方法而来,只要记住这个规律,代码手到擒来,每一句代码实现的原因以及这个过程都是显而易见的!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

找不到msvcr100.dll如何修复,分享几种有效的修复方法

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“找不到msvcr100.dll”。这个错误通常发生在运行某些程序时,系统无法找到所需的动态链接库文件。这个问题可能会给用户带来困扰,但是幸运的是,有一些简单…

【常见的六大排序算法】插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序

个人主页 创作不易,感谢大家的关注! 文章目录 前言 🎡一、插入排序🌲二、希尔排序🎉三、选择排序🎀四、冒泡排序🚘五、堆排序🛵六、快速排序1. Hoare版本2. 挖坑法3. 前后指针法4. 非…

【PPT】修改新建文本框默认字体

【PPT】修改新建文本框默认字体

图文并茂带你理解Java的代理模式

目录 Java的代理模式1、什么是代理模式?2、静态代理和动态代理3、JDK动态代理的局限性4、使用CGLIB代理机制完成未实现接口的类的代理5、JDK动态代理和CGLIB动态代理对比6、JDK动态代理为什么只能代理实现接口的类? Java的代理模式 1、什么是代理模式&a…

【Git】git合并分支指定内容到主分支

git合并分支指定内容到主分支 在现实开发中,往往需要合并分支内容,如下图: 我们平时在其他分支修改了部分代码,如何将分支部分代码合并到主分支上面呢? 合并步骤: 1、切换当前到主分支 git checkout m…

Java-----String类

1.String类的重要性 经过了C语言的学习,我们认识了字符串,但在C语言中,我们表示字符串进行操作的话需要通过字符指针或者字符数组,可以使用标准库中提供的一系列方法对字符串的内容进行操作,但这种表达和操作数据的方…

函数的创建和调用

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 提到函数,大家会想到数学函数吧,函数是数学最重要的一个模块,贯穿整个数学学习过程。在Python中,函数…

Flutter开发效率提升1000%,Flutter Quick教程之对组件进行拖拽与接收

1,首先,所有可以选择的组件,都在左边的组件面板里。从里面点击任何一个,按住左键,向右边的手机面板上进行拖拽即可。 2,拖拽后,我们要选择一个接收组件。什么时候可以接收组件,就是当…

小柴带你学AutoSar系列一、基础知识篇(4)编译

小柴带你学AutoSar总目录https://blog.csdn.net/qianshang52013/article/details/138140235?spm1001.2014.3001.5501 Flechazohttps://www.zhihu.com/people/jiu_sheng 编译真的很重要!了解一下机器是如何工作的吧。当然啦!通过学习这篇文章还可以学习…

【Go语言精进之路】构建高效Go程序:掌握变量、常量声明法则与iota在枚举中的奥秘

🔥 个人主页:空白诗 文章目录 引言一、变量1.1 基础知识1.2 包级变量的声明形式深入解析📌 声明并同时显式初始化📌 声明但延迟初始化📌 声明聚类与就近原则 1.3 局部变量的声明形式深入探讨📌 延迟初始化的…

【原创教程】MES服务器与成品打标机控制说明

1 实现的功能及应用的场合 MES即制造执行系统(manufacturing execution system,简称MES),即在加强MRP计划的执行功能,把MRP计划同车间作业现场控制,通过执行系统联系起来。 MES是一个生产管理智能化的一个系统,是用于生产时记录数据、产量等信息的智能管理系统。 该项…

go语言基于Gin集成后台管理系统开发定时任务管理cron/v3好用又好看

系统目前是支持两种定时类型,一种是函数类型,一种是接口类型,来支持多样的业务;时间周期可视化选择,方便设定执行周期。框架UI漂亮,添加管理定时任务设置简单,客户都可以做自己调整执行时间周期…

LLC开关电源开发:第一节,LLC原理概述

第一节,LLC原理概述文章目录 一、LLC概述二、LLC电路拓扑1.电路拓扑2.电路工作原理3.电路原理分析 总结 一、LLC概述 LLC电路,是一种通过控制开关频率(频率调节)来实现输出电压恒定的谐振电路,它包括一个电感L、一个电…

transfomer中attention为什么要除以根号d_k

简介 得到矩阵 Q, K, V之后就可以计算出 Self-Attention 的输出了,计算的公式如下: A t t e n t i o n ( Q , K , V ) S o f t m a x ( Q K T d k ) V Attention(Q,K,V)Softmax(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)Softmax(dk​ ​QKT​)V 好处 除以维…

算法每日一题(python,2024.05.31)

题目来源(力扣. - 力扣(LeetCode),简单) 解题思路: 二次遍历,第一次遍历用哈希表记录每个字母的出现次数,出现一次则将它的value值赋为True,将它的下标赋为key值&#x…

leetcode74搜索二维矩阵

题目 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 fa…

LeetCode-47 全排列Ⅱ

LeetCode-47 全排列Ⅱ 题目描述解题思路代码说明 题目描述 给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 示例 : 输入:nums [1,1,2]输出: [[1,1,2], [1,2,1], [2,1,1]] b站题目解读讲的不好&…

充电宝哪个牌子好?怎么选充电宝?压箱底充电宝购买指南大全!

充电宝作为我们日常生活中不可或缺的便携式电源之一,市场上品牌众多、种类繁多。对于消费者来说,如何选择适合自己的充电宝成为一个值得重视的问题。有的充电宝厂家为节省成本“偷工减料”,使用劣质电池,以次充好、参数造假等现象…

Win10安装TensorRT

目录 什么是TensorRT 下载TensorRT 安装TensorRT 拷贝文件 安装whl文件 验证是否安装成功 什么是TensorRT TensorRT是由Nvidia推出的C语言开发的高性能神经网络推理库,是一个用于生成部署的优化器和运行时引擎。和cudnn类似,但它不支持训练&#xff…

Mysql(一)查询Sql是如何执行的

Hello,大家好我是极客涛😎,我最近在整理Mysql相关的知识点,所以准备开启一个Mysql的主线任务,大概耗时3周左右,整个节奏还是由浅入深,主要包括Mysql的架构、事务实现、索引组织形式、SQL优化、日…