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.hqwc.cn/news/59554.html

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

相关文章

Vue3+Vite+Pinia+Naive后台管理系统搭建之九:layout 动态路由布局

前言 如果对 vue3 的语法不熟悉的,可以移步Vue3.0 基础入门,快速入门。 github 开源库:Vue3-Vite-Pinia-Naive-Js gitee 开源库:Vue3-Vite-Pinia-Naive-Js 1. 管理系统页面结构 由 menu,面包屑,用户…

【Linux进程篇】进程概念(2)

【Linux进程篇】进程概念(2) 目录 【Linux进程篇】进程概念(2)进程状态Linux对进程的说法linux中的信号 进程状态查看Z(zombie)——僵尸进程僵尸进程的危害 孤儿进程 进程优先级基本概念查看系统进程PRI (优先级priori…

wireshark 安装和使用

wireshark,世界上最受欢迎的网络协议分析器。是一个网络流量分析器,或“嗅探器”,适用于Linux、macOS、*BSD和其他Unix和类Unix操作系统以及Windows。它使用图形用户界面库Qt以及libpcap和npcap作为数据包捕获和过滤库。 wireshark&#xff…

解决Vs Code工具开发时 保存React文件时出现乱码情况

Vs Code工具开发时 保存React文件时出现乱码情况 插件库搜索:JS-CSS-HTML Formatter 把这个插件禁用或者卸载就解决保存时出现乱码的问题了; 如果没有解决,再看下面方案! 出现乱码问题通常是因为文件的编码格式不正确。您可以尝试以下解决方法: 确认文件编码格式&a…

【瑞吉外卖】Git部分学习

Git简介 Git是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。通过Git仓库来存储和管理这些文件,Git仓库分为两种: 本地仓库:开发人员自己电脑上的Git仓库 远程仓库:远程服务器上的Git仓库…

回归预测 | MATLAB实现POA-CNN-LSTM鹈鹕算法优化卷积长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现POA-CNN-LSTM鹈鹕算法优化卷积长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现POA-CNN-LSTM鹈鹕算法优化卷积长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现POA-CNN…

创建Springboot+vue3项目

项目概述创建springboot项目加入mybatis-plus支持1.加入依赖代码2.创建数据库实例3.yml文件的配置4.编写测试代码5.测试结果 创建vue项目报错错误一错误二错误三 项目概述 后端:Springboot、mybatis-plus、java 前端:nodejs、vue脚手架、element-ui 数据…

idea打开多个项目需要开多个窗口(恢复询问弹窗)

【版权所有,文章允许转载,但须以链接方式注明源地址,否则追究法律责任】【创作不易,点个赞就是对我最大的支持】 前言 仅作为学习笔记,供大家参考 总结的不错的话,记得点赞收藏关注哦! 使用…

安卓证书生成教程

1.下载安装JDK文件(如已安装请跳过) 根据电脑系统版本下载JDK版本文件 下载地址:[https://www.oracle.com/java/technologies/downloads/](https://www.oracle.com/java/technologies/downloads/) 如果电脑上安装过JDK文件可以跳过2.生成密钥…

Celery嵌入工程的使用

文章目录 1.config 1.1 通过app.conf进行配置1.2 通过app.conf.update进行配置1.3 通过配置文件进行配置1.4 通过配置类的方式进行配置2.任务相关 2.1 任务基类(base)2.2 任务名称(name)2.3 任务请求(request)2.4 任务重试(retry) 2.4.1 指定最大重试次数2.4.2 设置重试间隔时间…

【数据结构】单链表

🔥博客主页:小王又困了 📚系列专栏:数据结构 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、什么是链表 1.1链表的概念及结构 1.2单链表的结构 二、链表的实现 …

Elasticsearch官方测试数据导入

一、数据准备 百度网盘链接 链接:https://pan.baidu.com/s/1rPZBvH-J0367yQDg9qHiwQ?pwd7n5n 提取码:7n5n文档格式 {"index":{"_id":"1"}} {"account_number":1,"balance":39225,"firstnam…