实现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.释放资源
每个步骤都建立依赖的联系:关系从数据源对象中方法得来,预编译语句从关系的编译中的方法而来,只要记住这个规律,代码手到擒来,每一句代码实现的原因以及这个过程都是显而易见的!

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

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

相关文章

【数据挖掘】3σ原则识别数据中的异常值(附代码)

写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 路虽远,行则将至&#…

机关——用钥匙开对应的门

代码展示 玩家背包代码&#xff08;挂载到玩家身上&#xff09; using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> /// 玩家背包脚本&#xff0c;用来记录玩家道具 /// </summary> public class MyBag : MonoBeha…

03DDL语言的使用

03DDL语言的使用 第1关&#xff1a;创建数据库任务描述相关知识连接数据库创建数据库 答案 第2关&#xff1a; 创建表任务描述相关知识 答案 第3关&#xff1a;添加字段任务描述相关知识添加字段编程要求 答案 第4关&#xff1a;删除字段任务描述相关知识编程要求 答案 第5关&a…

pytorch学习笔记4

开启tensorboard 在terminal中输入tensorboard --logdir文件名 文件名中不能含有空格 tensorboard --logdirlogs --port6007#将端口调整为6007tensorboard --logdirlogs --port 0 自动分配一个端口&#xff0c;成功访问打开的时候如果发现没数据可以把logs换成文件夹的绝对路径…

【儿童节特辑】用AI创造音乐,变身小小音乐家!

在儿童节这个充满欢笑的日子里&#xff0c;让我们一起探索如何用AI技术为孩子们准备一份特别的礼物——一张由AI生成的音乐专辑。&#x1f3b5;✨ &#x1f3bc; 文字变旋律&#xff1a;开启音乐创作之旅 想象一下&#xff0c;只需一段文字&#xff0c;就能编织出一曲悠扬悦耳…

Python自动实时查询预约网站的剩余名额并在有余额时发邮件提示

本文介绍基于Python语言&#xff0c;自动、定时监测某体检预约网站中指定日期的体检余额&#xff0c;并在有体检余额时自动给自己发送邮件提醒的方法。 来到春招末期&#xff0c;很多单位进入了体检流程。其中&#xff0c;银行&#xff08;尤其是四大行&#xff09;喜欢“海检”…

Day44 动态规划part04

背包问题 01背包问题&#xff1a;每件物品只能用一次完全背包问题&#xff1a;每件物品可以使用无数次 01背包问题 暴力解法&#xff1a;每一件物品其实只有两个状态&#xff0c;取或者不取&#xff0c;所以可以使用回溯法搜索出所有的情况&#xff0c;那么时间复杂度就是 o…

Transformer从0到1的学习【还有2-10,别想太多】

1.高纬度介绍Transformer 1.分为编码Encoders和解码器Decoders&#xff1a;“我爱你”作为编码器Encoders的输入进行编码得到序列码后&#xff0c;作为解码器的输入得到输出即为&#xff0c;“I Love you”。 2.编码器和译码器的具体拆分&#xff1a; 左边的编码器Encoders的…

Pytorch实用教程:pytorch中nn.Linear()用法详解 | 构建多层感知机 | nn.Module的作用 | nn.Sequential的作用

文章目录 1. nn.Linear()用法构造函数参数示例使用场景2. 构建多层感知机步骤代码示例注意事项3. 继承自nn.Module的作用是什么?1. 组织网络结构2. 参数管理3. 模型保存和加载4. 设备管理不继承 `nn.Module` 的后果

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

个人主页 创作不易&#xff0c;感谢大家的关注&#xff01; 文章目录 前言 &#x1f3a1;一、插入排序&#x1f332;二、希尔排序&#x1f389;三、选择排序&#x1f380;四、冒泡排序&#x1f698;五、堆排序&#x1f6f5;六、快速排序1. Hoare版本2. 挖坑法3. 前后指针法4. 非…

详解 Spark 核心编程之 RDD 分区器

一、RDD 分区器简介 Spark 分区器的父类是 Partitioner 抽象类分区器直接决定了 RDD 中分区的个数、RDD 中每条数据经过 Shuffle 后进入哪个分区&#xff0c;进而决定了 Reduce 的个数只有 Key-Value 类型的 RDD 才有分区器&#xff0c;非 Key-Value 类型的 RDD 分区的值是 No…

头歌动态分区算法第2关:最佳适应算法

编程要求 空闲分区采用带头结点的双向链表来管理,主函数、链表初始化函数和打印函数已实现,只需要补充最佳适应算法分配内存的函数 best_fit以及内存回收的函数recycle()即可。 bool best_fit(int id,int m_size)//使用最佳适应算法给作业分配内存,id为作业号,m_size为作业…

大佬推荐的好用网盘工具

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 前段时间有大佬推荐了一款网盘工具seafile&#xff0c;自己搭建起来试用了一下&#xff0c;发现还挺好用的&#xff0c;这款工具…

【C++】C++11新特性:新的类功能、可变参数模板、STL容器中的empalce相关接口函数、lambda表达式、包装器(function、bind)

目录 一、新的类功能 1.1 移动构造函数和移动赋值运算符重载 1.2 强制生成默认函数的关键字default 1.3 禁止生成默认函数的关键字delete 1.4 其它的类功能 二、可变参数模板 三、STL容器中的empalce相关接口函数 四、lambda表达式 4.1 lambda的引入 4.2 lambda表达式…

openVPN+SmartDNS=openDNS or smartVPN?

正文共&#xff1a;777 字 11 图&#xff0c;预估阅读时间&#xff1a;1 分钟 我们现在已经熟练的掌握了openVPN的部署方式和配置方法&#xff08;带认证的openVPN连接/断开操作指南&#xff09;&#xff0c;还掌握了在CentOS系统部署SmartDNS的方法&#xff08;基于CentOS部署…

查看电脑品牌

查看电脑品牌是了解电脑基本信息的重要步骤&#xff0c;尤其在需要技术支持或升级硬件时&#xff0c;知道电脑的品牌极为关键。下面将详细介绍几种不同的方法来查看电脑品牌&#xff1a; 通过DirectX诊断工具查看品牌型号&#xff1a;使用快捷键WinR打开运行窗口&#xff0c;输…

如何使用 Apache 和 Nginx 创建临时和永久重定向

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 HTTP 重定向,或者 URL 重定向,是一种将一个域名或地址指向另一个的技术。重定向有许多用途,也有几种不同的重定向方式需要考虑。当一个站点需要将请求一个地址…

【网络安全】Web安全基础 - 第二节:前置基础知识- HTTP协议,握手协议,Cookie及Session

本章节主要介绍一些基础知识 d(^_^o) HTTP协议 什么是HTTP 超文本传输协议&#xff08;HyperText Transfer Protocol&#xff09;是一种用于分布式、协作式和超媒体信息系统的应用层协议。 HTTP是一个基于请求与响应&#xff0c;无状态的&#xff0c;应用层协议&#xff0c;…

100.网络游戏逆向分析与漏洞攻防-ui界面的设计-聊天功能的界面与设计

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 现在的代码都是依据数据包来写的&#xff0c;如果看不懂代码&#xff0c;就说明没看懂数据包…

Git常用命令1

1、设置用户签名 ①基本语法&#xff1a; git config --global user.name 用户名 git config --global user.email 邮箱 ②实际操作 ③查询是否设置成功 cat ~/.gitconfig 注&#xff1a;签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交…