JDBC(常用类与接口、实现数据库的增删查改)

 

目录

1.Connection接口常用方法

2.DriverMange类

 3.Statement接口

4.实现表的数据更新(增、改、删)

 5.实现数据查找(ResultSet接口)

 6.PreparedStatement 数据更新


1.Connection接口常用方法

用来与数据库连接的对象,只有获得了特定的数据库对象才能对数据库进行操作

方法描述
createStatement()创建一个 Statement 对象,用于执行 SQL 语句。
createStatement(int resultSetType,int resultSetConcurrency)根据给定的结果集类型和并发性创建一个 Statement 对象,用于执行 SQL 语句。
prepareStatement()创建一个 PreparedStatement 对象,用于执行带有参数的 SQL 语句。
isReadOnly()返回一个布尔值,指示数据库连接是否为只读模式。
setReadOnly()设置数据库连接的只读模式,以指示是否允许修改数据库。
commit()提交当前事务中所有挂起的更改。
rollback()回滚当前事务中的所有挂起的更改。
close()关闭数据库连接。

2.DriverMange类

这个类主要包含和数据库的交互方法

方法描述
getConnection(String url, String user, String password)获取与指定数据库的连接。传入数据库的URL、用户名和密码作为参数。
setLogonTimeout()设置在尝试连接到数据库时等待的最长时间,超过该时间将引发异常。
println(String message)打印消息到控制台或日志文件中。用于调试和记录信息。

案例代码:数据库的连接(基于MySQL)

数据库的连接与关闭

package com.company;import java.sql.Connection;
import java.sql.DriverManager;public class Main {public static void main(String[] args){final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";final String DATABASE_URL="jdbc:mysql://localhost:3306/mysqltest";final String DATABASE_USER ="mysql";final String DATABASE_PASSWORD ="xxxxxx";Connection conn = null;try {
//             通过反射加载mysql驱动Class.forName(DATABASE_DRIVER);
//             建立连接conn = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
//             输出连接对象信息System.out.println(conn);
//             关闭连接conn.close();}catch (Exception e){e.printStackTrace();}}
}

 


 3.Statement接口

该接口是java执行数据库的重要操作,在建立完成数据库连接的基础上,向数据库发送需要执行的SQL的语句

方法描述
execute(String sql)执行给定的 SQL 语句,返回一个布尔值表示是否执行成功。
executeQuery(String sql)执行给定的查询 SQL 语句,返回一个结果集 ResultSet 对象。
clearBatch()清除该 Statement 对象当前设置的批处理命令。
addBatch(String sql)将 SQL 语句添加到当前的批处理中。
close()关闭 Statement 对象。任何打开的结果集也将关闭。

1.在案例操作前先确保建立好一个列表

这里通过Datadrip工具也可以用其他的工具比如DBeaver、Navica可以t快速根据需求自动生成sql脚本,也可以通过sql语句自行创建。

创建一个Person表,定义了姓名,年龄,身份证,名族。并且设置了身份证为唯一的主码并且是唯一的。

具体sql语句如下:

create table Person
(name varchar(4) not null comment '姓名',age int null comment '年龄',ID int null comment '身份证',nation varchar(4) null comment '民族'
);create unique index Person_ID_uindexon Person (ID);alter table Personadd constraint Person_pkprimary key (ID);

4.实现表的数据更新(增、改、删)

 案例实现:实现插入sql信息

插入信息

姓名:王二  年龄:18 身份id:001 民族:汉族

SQL代码案例:

insert into person(name, age, ID, nation) VALUE ('王二',18 ,001 ,'汉族');

那么搭配JDBC实现数据库中表的插入代码如下:

package JavaWeb02;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;public class javaDemo {public static void main(String[] args)throws Exception {final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";final String DATABASE_URL="jdbc:mysql://localhost:3306/mysqltest";final String DATABASE_USER ="mysql";final String DATABASE_PASSWORD ="xxxxxx";String sql = "insert into person(name, age, ID, nation) VALUE ('王二',18 ,001 ,'汉族')";
//        加载驱动Class.forName(DATABASE_DRIVER);
//        建立连接Connection conn = null;conn = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
//        创建数据库操作对象Statement statement = conn.createStatement();int count = statement.executeUpdate(sql);System.out.println("更新行数"+count);
//      关闭数据库连接conn.close();}
}

 

在数据库中查询可以看到,确实是插入成功了

 已经会了插入就可以尝试其他操作,比如数据删除,数据修改等等只需要把sql内容改一下就行了

案例:数据修改

package JavaWeb03;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;public class javaDemo {public static void main(String[] args) throws Exception{final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";final String DATABASE_URL="jdbc:mysql://localhost:3306/mysqltest";final String DATABASE_USER ="mysql";final String DATABASE_PASSWORD ="xxxxxx";String sql = "update person set name='黄小龙',age=99 where name='王二'";
//        加载驱动Class.forName(DATABASE_DRIVER);
//        建立连接Connection coon = null;coon = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
//        创建数据库操作对象Statement statement = coon.createStatement();System.out.println("更新的行数"+statement.executeUpdate(sql));coon.close();}
}

案例:数据删除

package JavaWeb04;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;public class javaDemo {public static void main(String[] args) throws Exception{final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";final String DATABASE_URL="jdbc:mysql://localhost:3306/mysqltest";final String DATABASE_USER ="mysql";final String DATABASE_PASSWORD ="xxxxxxx";
//        想要执行的sql语句String sql ="delete from person where name='王二'";//        加载驱动Class.forName(DATABASE_DRIVER);
//        连接数据库Connection conn = null;conn = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
//        创建数据库操作对象Statement statement = conn.createStatement();statement.executeUpdate(sql);
//        关闭连接conn.close();}
}

 5.实现数据查找(ResultSet接口)

数据查询返回的值需要用ResultSet接口进行封装

 以下是接口ResultSet接口的常用方法:

方法名描述
next()将游标移动到结果集中的下一行,并返回是否还有更多行可用的布尔值。在循环中逐行处理结果集时使用。
getXxx(int columnIndex)根据列的索引获取当前行指定列的数据。columnIndex是从1开始计数的列索引。getXxx代表具体的数据类型,如getInt、getString等。返回指定列的数据,可以进行类型转换。
getXxx(String columnLabel)根据列的名称获取当前行指定列的数据。columnLabel是列的字符串形式名称。类似于getXxx(int columnIndex)方法,返回指定列的数据。
close()关闭结果集,释放与结果集相关的资源。在不再需要访问结果集时,应该调用此方法来关闭结果集,以便及时释放资源。

数据查询案例:

数据库内容:

 案例代码:

package JavaWeb05;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class javaDemo {public static void main(String[] args)throws Exception {final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";final String DATABASE_URL="jdbc:mysql://localhost:3306/mysqltest";final String DATABASE_USER ="mysql";final String DATABASE_PASSWORD ="xxxxxxx";String sql = "select name, age, ID, nation from person";//        加载驱动Class.forName(DATABASE_DRIVER);
//        建立连接Connection conn = null;conn = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
//        创建操作对象,并且对象使用的是执行查找语句的方法Statement statement = conn.createStatement();ResultSet rs = statement.executeQuery(sql);
//        需要按照定义的类型进行接收while (rs.next()){String name = rs.getString("name");int age = rs.getInt("age");int id = rs.getInt("id");String nation = rs.getString("nation");System.out.println("name="+name+" age="+age+" id="+id+" nation="+nation);}//        退出连接conn.close();rs.close();}
}


 6.PreparedStatement 数据更新

问题引入:如果要正常插入数据并且使用statement接口则代码会如下:

package JavaWeb06;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;public class javaDemo {public static void main(String[] args)throws  Exception {final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";final String DATABASE_URL="jdbc:mysql://localhost:3306/mysqltest";final String DATABASE_USER ="mysql";final String DATABASE_PASSWORD ="xxxxxx";String name ="汪心";int id = 100;String nation = "汉族";int age = 32;String sql = "insert into person(name, age, ID, nation)VALUE("+name+","+age+","+id+","+nation+")";//        加载驱动Class.forName(DATABASE_DRIVER);
//        连接Connection conn = null;conn = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
//        创建数据操作对象Statement statement = conn.createStatement();statement.executeUpdate(sql);
//        关闭对象conn.close();}
}

可以看到,如果用statement接口,那么会需要一个完整的sql语句,而sql语句需要通过拼接起来,非常麻烦,所以引入了PreparedStatement

Preparedstatement的常用方法如下:

方法描述
executeUpdate()执行 INSERT、UPDATE 和 DELETE 等更新操作,并返回更新的行数。
executeQuery()执行 SELECT 查询操作,并返回结果集。
setXxx(index, value)通过索引设置参数值,其中 Xxx 表示数据类型,如 setIntsetString 等。
setXxx(parameterName, value)通过参数名设置参数值,其中 Xxx 表示数据类型,如 setIntsetString 等。
setNull(index, dataType)设置参数为空值。
getGeneratedKeys()获取生成的键。

Preparedstatement与Statement相比在编写sql语句的时候可以用"?"进行占位符的设计,在通过conn.prepareStatement(sql语句)创建对象时候,将sql作为参数传入进去,对于每一位的?占位符都可以通过对象.set类型(第几个占位符,类型值)

以下案例代码实现通过Preparedstatement向数据库插入一条数据

插入案例代码:

package JavaWeb07;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;public class javaDemo {public static void main(String[] args)throws Exception {final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";final String DATABASE_URL="jdbc:mysql://localhost:3306/mysqltest";final String DATABASE_USER ="mysql";final String DATABASE_PASSWORD ="xxxxxx";String name ="汪心";int id = 100;String nation = "汉族";int age = 32;String sql ="insert into person(name, age, ID, nation)VALUES"+"(?,?,?,?)";//        加载驱动Class.forName(DATABASE_DRIVER);
//        建立连接Connection conn = null;conn = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
//        创建数据操作对象PreparedStatement preparedStatement = conn.prepareStatement(sql);preparedStatement.setString(1,name);preparedStatement.setInt(2,age);preparedStatement.setInt(3,id);preparedStatement.setString(4,nation);int count = preparedStatement.executeUpdate();System.out.println("本次更新的行数"+count);
//        关闭连接conn.close();}
}

 

案例 数据查询:

package JavaWeb08;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;public class javaDemo {public static void main(String[] args)throws  Exception {final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";final String DATABASE_URL="jdbc:mysql://localhost:3306/mysqltest";final String DATABASE_USER ="mysql";final String DATABASE_PASSWORD ="xxxxxxx";String sql ="select name, age, ID, nation from person";//        加载驱动Class.forName(DATABASE_DRIVER);
//        建立连接Connection conn = null;conn = DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASSWORD);
//        创建数据操作对象PreparedStatement preparedStatement = conn.prepareStatement(sql);ResultSet rs = preparedStatement.executeQuery();while (rs.next()){
//            ResultSet通过占位符的位置获取信息String name = rs.getString(1);int age  = rs.getInt(2);int id = rs.getInt(3);String nation = rs.getString(4);System.out.println("name="+name+" age="+age+" id="+id+" nation="+nation);}
//        关闭连接conn.close();rs.close();}
}

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

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

相关文章

【Spring】Spring AOP 初识及实现原理解析

博主简介:想进大厂的打工人博主主页:xyk:所属专栏: JavaEE进阶 目录 文章目录 一、初识AOP 1.1 什么是AOP? 1.2 AOP的组成 1.2.1 切面(Aspect) 1.2.2 切点(Pointcut) 1.2.3 连接点&…

blender基础认识(选项开关、工具栏、视图等)

文章目录 引言一、大纲选项开关和保存启动文件1. 大纲选项1. 禁用选中2. 视图影藏3. 视图禁用4. 渲染禁用 2. 保存启动文件 二、工具栏和侧边栏1. 左侧工具栏2. 右侧工具栏 三、视图1. 视角2. 缩放3. 拖拽4. 摄像机视角5. 切换正交视图6. 局部视图7. 显示隐藏 四、添加删除物体…

【DMA】如何保证 DMA 和 cache 的一致性

一方面,当 CPU 要从cache 读取数据时,会先检查cache是否命中,如果命中就直接返回,此时便不再访问内存;另一方面,DMA 在 向内存写入数据。这样一来就造成了DMA 传输的内容和cache中缓存的内容不一致。 DMA 向…

关于echarts遇到的一些问题

1.echarts监听legend,动态设置legend属性无效 动态更改legend中的icon, myChart.setOption(option)失效,但是设置局部就生效 myChart.on(legendselectchanged, function (params) {if (params.selected[params.name]) {data1[dat…

C++ 多态性——纯虚函数与抽象类

抽象类是一种特殊的类,它为一个类族提供统一的操作界面。抽象类是为了抽象和设计的目的而建立的。可以说,建立抽象类,就是为了通过它多态地使用其中的成员函数。抽象类处于类层次的上层,一个抽象类自身无法实例化,也就…

VUE+view table.exportCsv()导出.csv文档时如何防止数据格式为科学计数

当使用table.exportCsv()方法导出数据时,出现科学计数法问题,像电话号码,身份证号码等,当数据大于15位后面的会用0替代。 针对这一问题,解决方法如下:就是再数字前加上制表符“\t”注意双引号,…

前端技术基础-css

前端技术基础-css【了解】 一、css理解 概念:CSS:C(cascade) SS(StyleSheet) ,级联样式表。作用:对网页提供丰富的视觉效果,进行美化页面(需要在html页面基础上)样式规则:样式1:值1;样式2&…

0基础学习VR全景平台篇 第79篇:全景相机-泰科易如何直播推流

泰科易科技是中国的一家研发全景相机的高科技公司,前不久,在2020世界VR产业大会上发布了新一代5G VR直播影像采集终端--360starlight。以其出色的夜景成像效果和一“部”到位的直播方案重新定义了VR慢直播相机,对行业具有高度借鉴意义。 本文…

【工具插件类教学】电脑端移动端缩放大图自适应Simple Zoom

目录 简介 1.创建Canvas并设置 2.使用预制体Zoom 3.商店地址 简介 特点: •易于使用和高度可定制。 •支持鼠标(桌面)和触摸(移动)。 •指定最小和最大缩放的限制。 •缩放指针(鼠标/手指)或屏幕上预定义的自定义位置。 •变焦时使用夹紧/弹性变焦类型。 •定义缩…

MySQL插入数据的方法

插入数据方法: 1.insert into 表 values(value1, value2, value3....) 2.insert into 表 (字段1, 字段3, 字段5) values(value1, value2, value3) 3.insert into 表 [(字段1, 字段2, 字段3....)] values(value1, val…

【CSS】网格布局(简单布局、网格合并、网格嵌套)

文章目录 CSS网格布局(Grid Layout)1. 简单布局2. 网格合并3. 网格嵌套4. 总结 CSS网格布局(Grid Layout) CSS网格布局(Grid Layout)是一种强大且灵活的CSS布局系统,允许开发者以网格形式组织和…

Spring源码解析(八):bean后置处理器CommonAnnotationBeanPostProcessor

Spring源码系列文章 Spring源码解析(一):环境搭建 Spring源码解析(二):bean容器的创建、默认后置处理器、扫描包路径bean Spring源码解析(三):bean容器的刷新 Spring源码解析(四):单例bean的创建流程 Spring源码解析(五)&…

opencv基础-34 图像平滑处理-双边滤波cv2.bilateralFilter()

双边滤波(BilateralFiltering)是一种图像处理滤波技术,用于平滑图像并同时保留边缘信息。与其他传统的线性滤波方法不同,双边滤波在考虑像素之间的空间距离之外,还考虑了像素之间的灰度值相似性。这使得双边滤波能够有…

数据结构初阶--二叉树的顺序结构之堆

目录 一.堆的概念及结构 1.1.堆的概念 1.2.堆的存储结构 二.堆的功能实现 2.1.堆的定义 2.2.堆的初始化 2.3.堆的销毁 2.4.堆的打印 2.5.堆的插入 向上调整算法 堆的插入 2.6.堆的删除 向下调整算法 堆的删除 2.7.堆的取堆顶元素 2.8.堆的判空 2.9.堆的求堆的…

[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序

1.今天开发了一套服务程序,使用的是Odbc连接MySql数据库, 在我本机用VS打开程序时,访问一切正常,当发布出来装在电脑上,连接数据库时提示: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定…

VoxWeekly|The Sandbox 生态周报|20230731

欢迎来到由 The Sandbox 发布的《VoxWeekly》。我们会在每周发布,对上一周 The Sandbox 生态系统所发生的事情进行总结。 如果你喜欢我们内容,欢迎与朋友和家人分享。请订阅我们的 Medium 、关注我们的 Twitter,并加入 Discord 社区&#xf…

Zebec Protocol 将进军尼泊尔市场,通过 Zebec Card 推动该地区金融平等

流支付正在成为一种全新的支付形态,Zebec Protocol 作为流支付的主要推崇者,正在积极的推动该支付方案向更广泛的应用场景拓展。目前,Zebec Protocol 成功的将流支付应用在薪酬支付领域,并通过收购 WageLink 将其纳入旗下&#xf…

C#实现SqlServer数据库同步

实现效果: 设计思路: 1. 开启数据库及表的cdc,定时查询cdc表数据,封装sql语句(通过执行类型,主键;修改类型的cdc数据只取最后更新的记录),添加到离线数据表; 2. 线程定时查询离线数据表&#xf…

有哪些常用的设计素材网站?

素材网站可以是设计师和创意人员的灵感来源。这些网站收集了各种类型的平面设计图片,包括标志、海报、网站设计、包装设计、插图等。在本文中,我将推荐15个平面设计图素材网站,以帮助您找到新的想法和灵感。 1.即时设计资源社区 即时设计资…

SpringBoot 热部署

文章目录 前言一、spring-boot-devtools添加热部署框架支持settings 开启项目自动编译开启运行中热部署使用Debug启动 二、IDEA 自带 HowSwap 功能设置 Spring Boot 启动类等待项目启动完成点击热加载按钮存在的问题 三、JRebel 插件【推荐】安装插件使用插件 前言 在日常开发…