浅谈JDBC,JDBC实现的几大步骤

article/2025/9/21 4:11:37

前言

当我们学完数据库之后总觉得数据库和java之间是没有联系的,但是我们还是要去学数据库是为了什么呐?现在就来了,现在我就来给大家讲讲怎么将数据库和java进行联系,我们也可以用数据库代替以前的IO流来存东西了。

 JDBC

概述

JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,(java.sql,javax.sql)使用这些类库可以以一种标准的方法、方便地访问数据库资源。

JDBC为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节问题。

JDBC的目标是使Java程序员使用JDBC可以连接任何**提供了JDBC驱动程序**的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。

JDBC程序编写步骤

 

获取数据库连接

要素一:Driver接口实现类

我们在链接数据库之前我们需要一个Driver接口的实现类,但是我们的java中又没有自带这个包所以我们需要往我们的工程文件中添加一个MySQL的jar包才能使用相关的东西。

我们在idea中的操作是这样的:

先找到项目的添加的地方

 

再点如图的加号

 

然后点第一个

 

我们就可以从我们保存的目录中导入需要的包了

要素二:URL

JDBC URL 用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接。  我以MySQL为例我们常用的就是入下的样子

 

要素三:用户名和密码

user,password可以用“属性名=属性值”方式告诉数据库

可以调用 DriverManager 类的 getConnection() 方法建立到数据库的连接

前面的三步就是我们需要获取连接必要的三部。

实现代码:

	//1.加载配置文件InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");Properties pros = new Properties();pros.load(is);//2.读取配置信息String user = pros.getProperty("user");String password = pros.getProperty("password");String url = pros.getProperty("url");String driverClass = pros.getProperty("driverClass");//3.加载驱动Class.forName(driverClass);//4.获取连接Connection conn = DriverManager.getConnection(url,user,password);System.out.println(conn);

 其中,配置文件声明在工程的src目录下:【jdbc.properties】

user=root
password=abc123
url=jdbc:mysql://localhost:3306/test
driverClass=com.mysql.jdbc.Driver

而我们使用配置文件的好处就是:

①实现了代码和数据的分离,如果需要修改配置信息,直接在配置文件中修改,不需要深入代码 ②如果修改了配置信息,省去重新编译的过程。

 

使用PreparedStatement实现查询操作

当我们获得了连接之后我们就需要进行操作了,首先我们需要一个同用的查询

// 通用的针对于不同表的查询:返回一个对象 (version 1.0)public <T> T getInstance(Class<T> clazz, String sql, Object... args) {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {// 1.获取数据库连接conn = JDBCUtils.getConnection();// 2.预编译sql语句,得到PreparedStatement对象ps = conn.prepareStatement(sql);// 3.填充占位符for (int i = 0; i < args.length; i++) {ps.setObject(i + 1, args[i]);}// 4.执行executeQuery(),得到结果集:ResultSetrs = ps.executeQuery();// 5.得到结果集的元数据:ResultSetMetaDataResultSetMetaData rsmd = rs.getMetaData();// 6.1通过ResultSetMetaData得到columnCount,columnLabel;通过ResultSet得到列值int columnCount = rsmd.getColumnCount();if (rs.next()) {T t = clazz.newInstance();for (int i = 0; i < columnCount; i++) {// 遍历每一个列// 获取列值Object columnVal = rs.getObject(i + 1);// 获取列的别名:列的别名,使用类的属性名充当String columnLabel = rsmd.getColumnLabel(i + 1);// 6.2使用反射,给对象的相应属性赋值Field field = clazz.getDeclaredField(columnLabel);field.setAccessible(true);field.set(t, columnVal);}return t;}} catch (Exception e) {e.printStackTrace();} finally {// 7.关闭资源JDBCUtils.closeResource(conn, ps, rs);}return null;}

获取连接的封装:

   public static Connection getConnection()throws Exception{InputStream is =Connectiontest.class.getClassLoader().getResourceAsStream("jdbc.properties");Properties pros=new Properties();pros.load(is);String user=pros.getProperty("user");String password=pros.getProperty("password");String url=pros.getProperty("url");String driverName=pros.getProperty("driverName");Class.forName(driverName);Connection conn=DriverManager.getConnection(url,user,password);return conn;}

关闭流的操作:

 public static void closeResource(Connection conn, Statement ps,ResultSet rs){try{if(ps!=null)ps.close();}catch (SQLException e){e.printStackTrace();}try{if(conn!=null)conn.close();}catch (SQLException e){e.printStackTrace();}try{if(rs !=null)rs.close();}catch (SQLException e){e.printStackTrace();}}

 查询的样子:

 System.out.println("请输入需要查询的用户名称:");Scanner sc=new Scanner(System.in);String a=sc.next();String sql="select employee_id id,first_name name from employees where first_name=? ";employees instance = getInstance(employees.class, sql, a);System.out.println(instance);

 而其中的那个employees是我们需要查询的表所对应的实体类,实体类里面的属性和表中的列名相对应。

使用PreparedStatement实现增、删、改操作

由于增删改的操作都差不多所以可以由一个通用的来实现:

//通用的增、删、改操作(体现一:增、删、改 ; 体现二:针对于不同的表)public void update(String sql,Object ... args){Connection conn = null;PreparedStatement ps = null;try {//1.获取数据库的连接conn = JDBCUtils.getConnection();//2.获取PreparedStatement的实例 (或:预编译sql语句)ps = conn.prepareStatement(sql);//3.填充占位符for(int i = 0;i < args.length;i++){ps.setObject(i + 1, args[i]);}//4.执行sql语句ps.execute();} catch (Exception e) {e.printStackTrace();}finally{//5.关闭资源JDBCUtils.closeResource(conn, ps);}}

获取流和上面的查找一样,只有关闭流会少一个如下:

 public static void closeResource(Connection conn, Statement ps){try{if(ps!=null)ps.close();}catch (SQLException e){e.printStackTrace();}try{if(conn!=null)conn.close();}catch (SQLException e){e.printStackTrace();}}

 操作实现:

String sql1="delete from employees where employee_id=?";update(sql1,101);

总结

总的JDBC的常规操作就是以上的,首先我们需要导入我们需要的包,然后就是进行获取连接,然后得到连接之后我们就需要进行各种操作。希望对大家有所帮助。

 


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

相关文章

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

文章目录 jdbc编程步骤1.注册驱动2.获取数据库的连接3.获取数据库操作对象4.执行sql语句5.处理查询结果集6.释放资源 jdbc编程步骤 jdbc编程6步&#xff1a;1.注册驱动2.获取连接3.获取数据库操作对象4.执行sql5.处理查询结果集6.释放资源1.注册驱动 注册驱动的作用&#xff…

如何使用jetty

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

BAT优秀工具

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

GifCam2.0使用

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

荒野大镖客2-解压即玩

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

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

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

MYSQL 5.7 分组 1055解决方法

1.免安装版 在根目录下创建 my.ini 将一下内容拷贝到my.ini&#xff0c;然后重启服务即可 [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这三个大名鼎鼎的调试器品牌。可惜的是博主在之前的工作中从未接触过这些大神级的调试器&#xff0c;只闻其声不见其人。今天有幸从厂家获取到了iSystem的IC5700调试器&…

小工具推荐

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

前端音视频之WebRTC初探

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

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

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

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

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

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

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

FastReport .NET 2023 Crack

FastReport .NET 2023 Crack  Blazor WebAssembly支持-为FastReport.NET Enterprise及更高版本的所有者添加了FastReport.Blazor.Wasm包。现在&#xff0c;您可以使用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 下载地址&#xff1a;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】

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

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

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

C#的泛型方法

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