jdbc的入门

news/2024/11/29 2:29:36/

JDBC的基本介绍

JDBC即Java DataBase Connectivity(Java数据库连接),是Java语言访问数据库的一种标准方法。JDBC提供了一组API,用于连接不同类型的数据库并执行SQL语句,以便与数据库进行交互。

JDBC API包括两部分:一是JDBC驱动程序API,它提供了连接数据库、执行SQL查询和更新语句、处理结果集等功能;二是JDBC管理器API,它提供了管理驱动程序、连接池和数据源等功能。

JDBC连接数据库的基本步骤如下:

  1. 加载JDBC驱动程序。

  2. 建立连接。

  3. 创建Statement对象(但是一般不会使用Statement,因为Statement会存在sql注入的问题)

  4. 执行SQL语句。

  5. 处理结果集。

  6. 关闭连接。

JDBC有两种类型的驱动程序:基于JDBC-ODBC桥的驱动程序和本地协议驱动程序。基于JDBC-ODBC桥的驱动程序通过ODBC驱动程序连接数据库,而本地协议驱动程序通过网络连接数据库。

JDBC连接池是一组连接对象的缓存,可以有效地提高应用程序对数据库的访问性能。JDBC数据源是连接池的管理器,它负责提供连接、管理连接池和维护连接的状态。

代码演示:

package com.jdbc.myjdbc;/*** 我们规定的jdbc接口(方法)*/
public interface JdbcInterface {//连接public Object getConnection() ;//crudpublic void crud();//关闭连接public void close();
}package com.jdbc.myjdbc;/*** mysql 数据库实现了jdbc接口 [模拟] 【mysql厂商开发】*/
public class MysqlJdbcImpl implements  JdbcInterface{@Overridepublic Object getConnection() {System.out.println("得到 mysql 的连接");return null;}@Overridepublic void crud() {System.out.println("完成 mysql 增删改查");}@Overridepublic void close() {System.out.println("关闭 mysql 的连接");}
}package com.jdbc.myjdbc;/*** 模拟oracle数据库实现 jdbc*/
public class OracleJdbcImpl implements  JdbcInterface {@Overridepublic Object getConnection() {System.out.println("得到 oracle的连接 升级");return null;}@Overridepublic void crud() {System.out.println("完成 对oracle的增删改查");}@Overridepublic void close() {System.out.println("关闭 oracle的连接");}
}package com.jdbc.myjdbc;public class TestJDBC {public static void main(String[] args) throws Exception {//完成对mysql的操作JdbcInterface jdbcInterface = new MysqlJdbcImpl();jdbcInterface.getConnection(); //通过接口来调用实现类[动态绑定]jdbcInterface.crud();jdbcInterface.close();//完成对oracle的操作System.out.println("==============================");jdbcInterface = new OracleJdbcImpl();jdbcInterface.getConnection(); //通过接口来调用实现类[动态绑定]jdbcInterface.crud();jdbcInterface.close();}}

JDBC的好处

  1. 平台无关性:JDBC屏蔽了具体数据库的实现细节,使得Java应用程序可以轻松访问任何支持JDBC标准的关系型数据库,同时避免了针对不同数据库实现的不同代码编写的麻烦。

  2. 安全性:JDBC提供了一种安全的方法来访问和操作数据库。Java SE平台提供了各种机制来保护应用程序和数据,比如访问控制和代码签名等。

  3. 高性能:JDBC支持连接池,连接池可以缓存一些已经连接的数据库连接,这样可以避免重复连接数据库所消耗的时间和资源,提高了数据库的访问效率和应用程序的性能。

  4. 可扩展性:JDBC提供了灵活的API,可以扩展和定制实现,以支持更多的数据库功能和特性。

  5. 成熟稳定:JDBC是Java SE平台的一部分,经过多年发展和实践,已经成为Java应用程序与数据库交互的标准和最佳实践之一。

JDBC程序编写步骤

1.注册驱动 - 加载Driver 类

2获取连接 - 得到Connection

3.执行增删改查 - 发送SQL 给mysql执行

4.释放资源 - 关闭相关连接

代码演示:

package com.jdbc;import com.mysql.jdbc.Driver;import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;/*** 第一个jdbc程序 完成体验的操作*/
public class Jdbc01 {public static void main(String[] args) throws SQLException {//前置工作: 在项目下创建一个文件夹比如 libs// 将 mysql.jar 拷贝到该目录下,点击 add to project ..加入到项目中//1. 注册驱动Driver driver = new Driver(); //创建driver对象//2. 得到连接// 解读//(1) jdbc:mysql:// 规定好表示协议,通过jdbc的方式连接mysql//(2) localhost 主机,可以是ip地址//(3) 3306 表示mysql监听的端口//(4) hsp_db02 连接到mysql dbms 的哪个数据库//(5) mysql的连接本质就是前面学过的socket连接String url = "jdbc:mysql://localhost:3306/hsp_db02";//将 用户名和密码放入到Properties 对象Properties properties = new Properties();//说明 user 和 password 是规定好,后面的值根据实际情况写properties.setProperty("user", "root");// 用户properties.setProperty("password", "yjw"); //密码Connection connect = driver.connect(url, properties);//3. 执行sql//String sql = "insert into actor values(null, '刘德华', '男', '1970-11-11', '110')";//一定要注意是不是sql语句中 的一个逗号写成了中文的逗号//String sql = "update actor set name='周星驰' where id = 1";String sql = "delete from actor where id = 1";//statement 用于执行静态SQL语句并返回其生成的结果的对象Statement statement = connect.createStatement();int rows = statement.executeUpdate(sql); // 如果是 dml语句,返回的就是影响行数System.out.println(rows > 0 ? "成功" : "失败");//4. 关闭连接资源statement.close();connect.close();}
}

获取数据库连接的五种方式

代码演示:

package com.jdbc;import com.mysql.jdbc.Driver;
import org.junit.jupiter.api.Test;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;/*** 分析java 连接mysql的5中方式*/
public class JdbcConn {//方式1@Testpublic void connect01() throws SQLException {Driver driver = new Driver(); //创建driver对象String url = "jdbc:mysql://localhost:3306/hsp_db02";//将 用户名和密码放入到Properties 对象Properties properties = new Properties();//说明 user 和 password 是规定好,后面的值根据实际情况写properties.setProperty("user", "root");// 用户properties.setProperty("password", "yjw"); //密码Connection connect = driver.connect(url, properties);System.out.println(connect);}//方式2@Testpublic void connect02() throws ClassNotFoundException, IllegalAccessException, InstantiationException, SQLException {//使用反射加载Driver类 , 动态加载,更加的灵活,减少依赖性Class<?> aClass = Class.forName("com.mysql.jdbc.Driver");Driver driver = (Driver) aClass.newInstance();String url = "jdbc:mysql://localhost:3306/hsp_db02";//将 用户名和密码放入到Properties 对象Properties properties = new Properties();//说明 user 和 password 是规定好,后面的值根据实际情况写properties.setProperty("user", "root");// 用户properties.setProperty("password", "yjw"); //密码Connection connect = driver.connect(url, properties);System.out.println("方式2=" + connect);}//方式3 使用DriverManager 替代 driver 进行统一管理@Testpublic void connect03() throws IllegalAccessException, InstantiationException, ClassNotFoundException, SQLException {//使用反射加载DriverClass<?> aClass = Class.forName("com.mysql.jdbc.Driver");Driver driver = (Driver) aClass.newInstance();//创建url 和 user 和 passwordString url = "jdbc:mysql://localhost:3306/hsp_db02";String user = "root";String password = "yjw";DriverManager.registerDriver(driver);//注册Driver驱动Connection connection = DriverManager.getConnection(url, user, password);System.out.println("第三种方式=" + connection);}//方式4: 使用Class.forName 自动完成注册驱动,简化代码//这种方式获取连接是使用的最多,推荐使用@Testpublic void connect04() throws ClassNotFoundException, SQLException {//使用反射加载了 Driver类//在加载 Driver类时,完成注册/*源码: 1. 静态代码块,在类加载时,会执行一次.2. DriverManager.registerDriver(new Driver());3. 因此注册driver的工作已经完成static {try {DriverManager.registerDriver(new Driver());} catch (SQLException var1) {throw new RuntimeException("Can't register driver!");}}*/Class.forName("com.mysql.jdbc.Driver");//创建url 和 user 和 passwordString url = "jdbc:mysql://localhost:3306/hsp_db02";String user = "root";String password = "yjw";Connection connection = DriverManager.getConnection(url, user, password);System.out.println("第4种方式~ " + connection);}//方式5 , 在方式4的基础上改进,增加配置文件,让连接mysql更加灵活@Testpublic void connect05() throws IOException, ClassNotFoundException, SQLException {//通过Properties对象获取配置文件的信息Properties properties = new Properties();properties.load(new FileInputStream("src\\mysql.properties"));//获取相关的值String user = properties.getProperty("user");String password = properties.getProperty("password");String driver = properties.getProperty("driver");String url = properties.getProperty("url");Class.forName(driver);//建议写上Connection connection = DriverManager.getConnection(url, user, password);System.out.println("方式5 " + connection);}
}

练习

代码演示:

要求:

1.创建 news 表
2.使用jdbc 添加 5条数据
3.修改id = 1的记录,将content 改成 一个新的消息
4.删除id = 3 的记录

package com.jdbc;import com.mysql.jdbc.Driver;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;/*
1.创建 news 表
2.使用jdbc 添加 5条数据
3.修改id = 1的记录,将content 改成 一个新的消息
4.删除id = 3 的记录*/
public class JdbcTest {public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {//使用properties 读取配置文件信息Properties properties = new Properties();properties.load(new FileInputStream("src\\Tsetmysql.properties"));//获取相关的值String user = properties.getProperty("user");String password = properties.getProperty("password");String url = properties.getProperty("url");String driver = properties.getProperty("driver");Class.forName(driver);//String sql="create table news (id int , content varchar(32))";//String sql = "insert into news values(5,'a')";//String sql = "delete from news where id = 5";String sql = "update news set content = 'b' where id = 1";Connection connection = DriverManager.getConnection(url, properties);Statement statement = connection.createStatement();int rows = statement.executeUpdate(sql);System.out.println(rows > 0 ? "成功" : "失败");}
}


http://www.ppmy.cn/news/104968.html

相关文章

华硕天选4R FA617原装Windows11原厂预装系统工厂模式恢复安装带 ASUSRecevory 一键还原22H2版本

华硕天选4R FA617X原装Windows11原厂预装系统工厂模式恢复安装带ASUSRecevory一键还原 文件地址&#xff1a;https://pan.baidu.com/s/1Pq09oDzmFI6hXVdf8Vqjqw?pwd3fs8 提取码:3fs8 华硕工厂恢复系统 &#xff0c;安装结束后带隐藏分区以及机器所有驱动软件 需准备一个16…

算法基础学习笔记——⑬高斯消元\组合计数\容斥原理

✨博主&#xff1a;命运之光 ✨专栏&#xff1a;算法基础学习 目录 ✨高斯消元 ✨组合计数 &#x1f353;通过预处理逆元的方式求组合数: &#x1f353;Lucas定理: &#x1f353;分解质因数法求组合数&#xff1a; 前言&#xff1a;算法学习笔记记录日常分享&#xff0c;需…

SpringCloud(1)

文章目录 1.认识微服务1.0.学习目标1.1.单体架构1.2.分布式架构1.3.微服务1.4.SpringCloud1.5.总结 1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&…

《深入理解计算机系统(CSAPP)》第7章 链接 - 学习笔记

写在前面的话&#xff1a;此系列文章为笔者学习CSAPP时的个人笔记&#xff0c;分享出来与大家学习交流&#xff0c;目录大体与《深入理解计算机系统》书本一致。因是初次预习时写的笔记&#xff0c;在复习回看时发现部分内容存在一些小问题&#xff0c;因时间紧张来不及再次整理…

【技术解决方案】(多级)缓存架构最佳实践

凌晨三点半了&#xff0c;太困了&#xff0c;还差一些&#xff0c;明天补上… 因为自己最近做的项目涉及到了缓存&#xff0c;所以水一篇缓存相关的文章&#xff0c;供大家作为参考&#xff0c;若发现文章有纰漏&#xff0c;希望大家多指正。 缓存涉及到的范围颇广&#xff0c…

关于Dubbo的一些面试题

基础知识 为什么要用 Dubbo&#xff1f; 随着服务化的进一步发展&#xff0c;服务越来越多&#xff0c;服务之间的调用和依赖关系也越来越 复杂&#xff0c;诞生了面向服务的架构体系(SOA)&#xff0c;也因此衍生出了一系列相应的技术&#xff0c; 如对服务提供、服务调用、连接…

Ubuntu20.04安装VMware player16.2.4,不弹出安装界面的问题

1.先在官网上下载VMware player16.2.4进行下载&#xff0c;Ubuntu20.04对VMware player16.2.4进行安装 2.安装完成后&#xff0c;应该会有如图下的弹窗界面&#xff0c;但是我没有 解决方法&#xff1a; 点击Ubuntu的VMware player的程序图标&#xff0c;弹窗报错:"Comma…

2023北京老博会,第十届中国国际老年产业博览会8月举办

大会主题&#xff1a;关爱社会老年身心健康&#xff0c;推动老龄产业快速发展&#xff1b; ——北京&#xff0c;8月28日&#xff0c;第10届中国&#xff08;北京&#xff09;国际老年产业博览会将在北京亦创国际会展中心盛大启幕。本次展会由中国老年保健协会、日中介护学会、…