【JDBC-1】jdbc编程六大步骤

article/2025/9/21 4:19:07

文章目录

    • jdbc编程步骤
      • 1.注册驱动
      • 2.获取数据库的连接
      • 3.获取数据库操作对象
      • 4.执行sql语句
      • 5.处理查询结果集
      • 6.释放资源

jdbc编程步骤

jdbc编程6步:1.注册驱动2.获取连接3.获取数据库操作对象4.执行sql5.处理查询结果集6.释放资源

1.注册驱动

注册驱动的作用:告诉jdbc程序,我们即将连接的是哪一种数据库
在这里插入图片描述
在这里插入图片描述

package ghh1.jdbc编程6步;import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;/*** 第一步:注册驱动* 注册驱动的作用:告诉jdbc程序,我们即将连接的是哪一种数据库*/
public class JDBCTest01 {public static void main(String[] args) {try {//1.注册驱动/*左边的是jdbc接口Driver右边是Mysql数据库中jar包中的实现类(对java.sql.Driver接口的实现)利用了向上转型*///1.1注册驱动对象//java.sql.Driver driver = new com.mysql.jdbc.Driver();//可以将左边的java.sql.Driver包导进来Driver driver = new com.mysql.jdbc.Driver();//1.2创建驱动对象DriverManager.registerDriver(driver);} catch (SQLException e) {e.printStackTrace();}}
}

2.获取数据库的连接

在这里插入图片描述

package ghh1.jdbc编程6步;import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;/*** 第二步:获取数据库连接对象* 程序执行到此步表JVM已经和3366接口服务建立连接,通道打开*/
public class JDBCTest02 {public static void main(String[] args){try {//1.注册驱动//1.1注册驱动对象Driver driver = new com.mysql.jdbc.Driver();//1.2创建驱动对象DriverManager.registerDriver(driver);//2.获取数据库连接String url = "jdbc:mysql://localhost:3366/bjpowernode";String user= "root";String password = "123";/*什么是url:统一资源定位符URL代表网络中的某个资源的绝对路径通过URL可以定位网络中的资源比如:http://www.baidu.comurl由哪几部分组成:协议,IP,端口号,资源名称jdbc:mysql://localhost:3366/bjpowernodejdbc:mysql://  协议localhost      IP地址3366           端口号bjpowernode    数据库实例名协议的作用:协议是通讯数据格式,提前制定好的规范,按照这个中特定的格式发送数据包对方接收到数据包之后按照这种规范解析数据包,获取有价值的数据IP地址的作用:定位计算机端口号的作用:定位服务*/Connection conn = DriverManager.getConnection(url,user,password);System.out.println(conn);/** 打印的结果:com.mysql.jdbc.JDBC4Connection@25f38edc* 打印的是Mysql驱动对java.sql.Connection接口的实现类的完整类名* 相当于Connection conn =com.mysql.jdbc.JDBC4Connection();* 左边是jdbc接口Connection即java.sql.Connection接口* 右边是Mysql驱动对java.sql.Connection接口的实现类的完整类名* 这里利用了向上转型** 但是jdbc程序员不需要关系Mysql具体的连接实现类* 只需要关心面向java.sql.Connection接口中的方法*//** 重点:* Connection对象是一个重量级的对象* 连接对象不能随便创建,最后使用完毕,必须手动关闭资源* Mysql支持的最多连接数量是100个*/} catch (SQLException e) {e.printStackTrace();}}
}

3.获取数据库操作对象

在这里插入图片描述

package ghh1.jdbc编程6步;import java.sql.*;public class JDBCTest03 {public static void main(String[] args) {try {//1.注册驱动Driver driver = new com.mysql.jdbc.Driver();DriverManager.registerDriver(driver);//2.获取连接String url = "jdbc:mysql://localhost:3366/bjpowernode";String user = "root";String password= "123";Connection conn = DriverManager.getConnection(url,user,password);//3.获取数据库操作对象Statement stmt = conn.createStatement();System.out.println(stmt);//一个连接对象可创建多个数据库操作对象Statement stmt2 = conn.createStatement();System.out.println(stmt2);/*** 打印的结果是Mysql驱动对java.sql.Statement接口的实现类的完整类名* com.mysql.jdbc.StatementImpl@506c589e* com.mysql.jdbc.StatementImpl@69d0a921* 相当于* Statement stmt1 = new com.mysql.jdbc.StatementImpl();* Statement stmt2 = new com.mysql.jdbc.StatementImpl();* 左边的是java.sql.Statement接口* 右边的是Mysql驱动对java.sql.Statement接口的实现类的完整类名* 这里利用了向上转型** 但是程序员只需要关心java.sql.Statement接口中的方法即可* 不需要关心具体实现类*/} catch (SQLException e) {e.printStackTrace();}}
}

4.执行sql语句

下面程序主要执行DML语句:insert update delete
在这里插入图片描述

package ghh1.jdbc编程6步;
import java.sql.*;public class JDBCTest04 {public static void main(String[] args) {try {//1.注册驱动Driver driver = new com.mysql.jdbc.Driver();DriverManager.registerDriver(driver);//2.获取连接String url = "jdbc:mysql://localhost:3366/bjpowernode";String user = "root";String password="123";Connection conn = DriverManager.getConnection(url,user,password);//3.获取数据库执行对象Statement stmt = conn.createStatement();//执行sql语句String sql = "insert into dept_bak(deptno,dname,loc) values(50,'销售部','北京')";//程序执行到此处,发送sql语句给数据库管理系统//数据库管理系统会将这条sql语句编译并且执行//该方法的返回值类型是int类型,表示影响底层数据库表中的记录总数int count = stmt.executeUpdate(sql);System.out.println(count);} catch (SQLException e) {e.printStackTrace();}}
}

在这里插入图片描述
将sql语句改为:

String sql = "update dept_bak set dname='市场部',loc='天津' where deptno=50";

在这里插入图片描述

 String sql = "delete from dept_bak where deptno=50";

在这里插入图片描述
以上的增删改DML比较简单,比较复杂的是查询语句,因为查询需要处理结果集

5.处理查询结果集

如果第四步执行的SQL语句是DQL语句,那么第五步需要处理查询结果集
如果不是的话,可以直接释放资源
在这里插入图片描述
根据查询结果集中字段的下标获取:
在这里插入图片描述

package ghh1.jdbc编程6步;
import java.sql.*;
public class JDBCTest05 {public static void main(String[] args) {try {//1.注册驱动Driver driver = new com.mysql.jdbc.Driver();DriverManager.registerDriver(driver);//2.获取连接Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3366/bjpowernode","root","123");//3.获取数据库操作对象Statement stmt = conn.createStatement();//执行sql语句String sql  = "select empno,ename,sal from emp";//程序执行到此处,发送SQL语句给数据库管理系统//数据库管理系统执行DQL语句//将执行之后的查询结果放到ResultSet这个结果集对象中了ResultSet rs = stmt.executeQuery(sql);//5.处理查询查询结果集/*** rs查询结果集中就封装了以下信息:+-------+--------+---------+| empno | ename  | sal     |+-------+--------+---------+|  7369 | SIMITH |  800.00 ||  7499 | ALLEN  | 1600.00 ||  7521 | WARD   | 1250.00 ||  7566 | JONES  | 2975.00 ||  7654 | MARTIN | 1250.00 ||  7698 | BLAKE  | 2850.00 ||  7782 | CLARK  | 2450.00 ||  7788 | SCOTT  | 3000.00 ||  7839 | KING   | 5000.00 ||  7844 | TURNER | 1500.00 ||  7876 | ADAMS  | 1100.00 ||  7900 | JAMES  |  950.00 ||  7902 | FORD   | 3000.00 ||  7934 | MILLER | 1300.00 |+-------+--------+---------+*//*** boolean hasMore = re.next();* next()方法的作用:*  1.将光标向前移动一行*  2.指向的当前行有记录,返回true*  3.指向的当前行没有记录,返回false*/while(rs.next()){//取当前光标指向的行中的数据//无论数据库表中字段的数据类型是什么,都以字符串的形式取出//以下根据查询结果集中字段的下标获取String empno =  rs.getString(1);//jdbc中所有的下标都是从1开始的String ename = rs.getString(2);String sal = rs.getString(3);System.out.println(empno+"..."+ename+"..."+sal);}} catch (SQLException e) {e.printStackTrace();}}
}

在这里插入图片描述
根据查询结果集中字段的名称获取:
在这里插入图片描述

	//以下是根据查询结果集中的字段名称获取String empno = rs.getString("empno");String ename = rs.getString("ename");String sal = rs.getString("sal");System.out.println(empno+"..."+ename+"..."+sal);

在这里插入图片描述
注意:是查询结果集中字段的下标,比如对查询结果集中字段重命名

package ghh1.jdbc编程6步;import java.sql.*;public class JDBCTest07 {public static void main(String[] args) {try {//1.注册驱动Driver driver = new com.mysql.jdbc.Driver();DriverManager.registerDriver(driver);//2.获取连接Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3366/bjpowernode","root","123");//3.获取数据库操作对象Statement stmt = conn.createStatement();//执行sql语句,将字段重命名String sql  = "select empno a,ename b,sal c from emp";//将执行之后的查询结果放到ResultSet这个结果集对象中了ResultSet rs = stmt.executeQuery(sql);//5.处理查询查询结果集while(rs.next()){String empno = rs.getString("a");String ename = rs.getString("b");String sal = rs.getString("c");System.out.println(empno+"..."+ename+"..."+sal);}} catch (SQLException e) {e.printStackTrace();}}
}

以字段特定的类型获取查询结果集:

    //以特定的数据类型取出数据//empno是int类型//ename是String类型//sal是double类型int empno = rs.getInt("a");String ename = rs.getString("b");double sal = rs.getDouble("c");System.out.println((empno+1)+"..."+ename+"..."+sal);

6.释放资源

释放资源的注意事项:

  1. 为了保证资源的释放,将释放资源的代码写到finally语句块中
  2. 需要关闭ResultSet,Statement,Connection
  3. 一个Connection可以创建多个Statement,一个Statement可以得出多个ResultSet,所以关闭的时候先关闭ResultSet,再关闭Statement,最后关闭Connection
package ghh1.jdbc编程6步;import javax.swing.plaf.nimbus.State;
import java.sql.*;public class JDBCTest09 {public static void main(String[] args) {Connection conn=null;Statement stmt=null;ResultSet rs = null;try {//1.注册驱动Driver driver = new com.mysql.jdbc.Driver();DriverManager.registerDriver(driver);//2.获取连接conn = DriverManager.getConnection("jdbc:mysql://localhost:3366/bjpowernode","root","123");//3.获取数据库操作对象stmt = conn.createStatement();//执行sql语句String sql = "selelct * from dept";rs = stmt.executeQuery(sql);//处理查询结果集while(rs.next()){String deptno =  rs.getString("deptno");String dname =  rs.getString("dname");String loc =  rs.getString("loc");System.out.println(deptno+"..."+dname+"..."+"loc");}} catch (SQLException e) {e.printStackTrace();}finally{if (rs != null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if (stmt != null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if (conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}
}

http://chatgpt.dhexx.cn/article/ghYnSXH8.shtml

相关文章

如何使用jetty

一直都听说jetty跟Tomcat一样,是一个web容器。之前做项目的时候,也使用过jetty,不过当时jetty是作为一个插件,跟maven集成使用的。那个时候,由于是第一次使用jetty,感觉jetty跟Tomcat并不一样,启…

BAT优秀工具

1、腾讯智图:图片压缩优化平台 地址:智图_图片压缩在线工具_在线制作webp 智图可以帮你把图片压缩到很小,但是还是很清晰!有很多网站限制图片上传的大小,用这个就可以!在线的,很方便&#xff01…

GifCam2.0使用

GifCam2.0使用 有时候我们需要制作一个gif,那么我们可以用GifCam 。 GifCam 是一款能够轻松录制gif的软件,它体积小、免安装。它可以给现有的gif增加帧数。编辑gif图片,如添加文字、删除某些帧、修改特定帧的延迟等。 下载地址:h…

荒野大镖客2-解压即玩

游戏名称:荒野大镖客2发行时间:2019年12月6日游戏详细介绍:https://store.steampowered.com/app/1174180/Red_Dead_Redemption_2/ (STEAM网站)不了解这是什么游戏的可以看一下版本介绍:该版本由EMPRESS小组…

火炬2 贴吧导航(大纲1.0)

火炬2 贴吧导航(大纲1.0) time/2020.7.25 前言 因前导航贴中部分链接失效或失时,为方便吧友查阅攻略及数据,故作此帖。 注:此贴仅作导航,不回复不解疑,有个人疑惑请按正常流程询问其他吧友。 …

MYSQL 5.7 分组 1055解决方法

1.免安装版 在根目录下创建 my.ini 将一下内容拷贝到my.ini,然后重启服务即可 [mysqld] sql_mode‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION’ 相信有些小伙伴在使用数据库的过程中会经常频繁的启动…

iSystem调试器系列文章—1.连接测试

iSystem调试器系列文章——1.连接测试 做嵌入式开发测试的人一般情况下都听过Lauterbach、iSystem、PLS这三个大名鼎鼎的调试器品牌。可惜的是博主在之前的工作中从未接触过这些大神级的调试器,只闻其声不见其人。今天有幸从厂家获取到了iSystem的IC5700调试器&…

小工具推荐

我们在使用计算机的过程中,总会有各种各样的需求,也许是为了颜值,也许是为了工作效率,有或是为了方便。这些需求系统本身没有提供相应的功能,或者系统提供的功能并不是那么好用。我们就渴望找一个好的工具代替。 本更新…

前端音视频之WebRTC初探

WebRTC Web Real-Time Communication 网页即时通信 WebRTC 于 2011 年 6 月 1 日开源,并在 Google、Mozilla、Opera 等大佬们的支持下被纳入 W3C 推荐标准,它给浏览器和移动应用提供了即时通信的能力。 WebRTC 优势及应用场景 优势 跨平台(Web、Window…

(常规更新)1.C++入门第一讲——编程如此简单

格言:自立才能自主,靠人更须靠己。有志之人立长志,无志之人常立志。千里之行,始于足下;艰难困苦,玉汝于成。少壮不努力,老大徒伤悲。✊✊✊ 📫 如果您觉得文章里有错误的地方&#x…

MySQL8.0的下载及安装 (8.0.15)

MySQL8.0的下载及安装 (一)1.下载MySQL8.0.15 (两种方式1.csdn下载(无积分联系我私发)2.官网下载) csdn下载链接:https://download.csdn.net/download/qq_42397270/19886950 1.访问MySQL官网:https://www…

JDK17解压版---安装与配置与查看版本

JDK17解压版下载地址:https://www.oracle.com/java/technologies/downloads/#jdk17-windows bin目录 :存放各种工具命令(如 javac、java、javap等)。 conf 目录:里面存放一些配置文件 。 include目录:存…

FastReport .NET 2023 Crack

FastReport .NET 2023 Crack  Blazor WebAssembly支持-为FastReport.NET Enterprise及更高版本的所有者添加了FastReport.Blazor.Wasm包。现在,您可以使用Razor组件在WebAssembly应用程序中显示报告。Blazor WebAssembly支持目前处于测试阶段。 能够打开另一个报告…

Total Software Deployment为您的企业网络管理软件部署

Total Software Deployment为您的企业网络管理软件部署 Total Software Deployment 可帮助您在本地网络上部署软件。它允许您同时在多台计算机上安装多个软件包。它包括软件库存管理、自动网络扫描和多种类型安装包的并发部署。 总体软件部署功能 轻松部署软件- 让 Total Softw…

MySQL绿色版安装教程

在windows上安装mysql数据库有时候会出现怎么都按照不上去的情况,特别是在卸载或者安装过程中终止之后在重新安装的时候,会出现莫名其妙的问题,接下来我们来简单的通过使用免安装版的MySQL避免这种问题.其中操作过程如下: 去Oracle官网下载MySQL的对应版本(https://dev.mysql.…

centos6.5 配置mysql5.6免安装版

1、从mysql官网下载mysql5.6 下载地址:http://dev.mysql.com/downloads/mysql/5.6.html#downloads 2、解压文件并移动到/usr/local/mysql #tar -xzvf mysql-5.6.30-linux-glibc2.5-x86_64.tar.gz #mv mysql-5.6.30-linux-glibc2.5-x86_64 /usr/local/mys…

艾诗娜:红女巫 Ashina: The Red Witch Build.10280376 官方中文 免安装【209M】

艾诗娜:红女巫是一款含有探索要素的故事冒险游戏。通过使用道具来解决谜题,并和众多角色对话来进一步深挖游戏的故事! 和艾诗一起来场妖怪界大冒险吧!在这个神秘的妖怪世界中充满着奇怪的生物、有趣的角色还有难忘的时刻&#xff…

Java SE(七)之泛型(泛型类,泛型接口,泛型方法)

文章目录 泛型概述1.泛型的引入2.泛型的定义3.泛型的好处4.泛型标记符 泛型类泛型方法泛型接口通配符与C模板类可变参数 泛型概述 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。 泛型的本质是参数化类…

C#的泛型方法

在 C# 语言中泛型方法是指通过泛型来约束方法中的参数类型,也可以理解为对数据类型设 置了参数。 如果没有泛型,每次方法中的参数类型都是固定的,不能随意更改。 在使用泛型后,方法中的数据类型则有指定的泛型来约束,…

java的泛型方法_Java中的泛型方法

泛型是什么意思在这就不多说了,而Java中泛型类的定义也比较简单,例如:public class Test{}。这样就定义了一个泛型类Test,在实例化该类时,必须指明泛型T的具体类型,例如:Test t new Test();&am…