我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JDBC技术

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JDBC技术

一、JDBC简介

  JDBC,Java Ddatabase Connection,Java数据库连接。

  Sun公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC。

JDBC技术

JDBC技术


什么是驱动?两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信。


如果没有JDBC,Java程序员需要面向各个数据库驱动接口编程,开发复杂;sun公司提供一套统一JDBC接口规范,Java程序只需要使用JDBC就可以操作任何数据库,JDBC实现类由各个数据库厂商提供。


1.组成JDBC的2个包:java.sql和javax.sql。

DriverManger驱动管理类、Connection连接接口、Statement(PreparedStatement、CallableStatement)数据库操作、ResultSet结果集。

2.开发jdbc应用需要以上2个包外,还需要导入相应JDBC的数据库实现。


二、JDBC快速入门

创建一个user表

create table user(
    id int primary key auto_increment,
    username varchar(20) unique not null,
    password varchar(20)  not null,
    email varchar(40) not null
);
package cn.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import com.mysql.jdbc.Driver;

public class Test1 {
	public static void main(String[] args) throws Exception {
		//加载数据库驱动
		DriverManager.registerDriver(new Driver());
		//获取连接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "root");
		//创建用于向数据库发送SQL的Statement对象,并发送SQL
		Statement stat = conn.createStatement();
		//从结果集中取出数据
		String sql = " select * from user ";
		ResultSet rs = stat.executeQuery(sql);
		while(rs.next()){
			System.out.println(rs.getInt(1)+","+rs.getString(2)+","+rs.getString(3)+","+rs.getString(4));
		}
		//断开数据库的连接,并释放相关资源
		rs.close();
		conn.close();
		
	}
}


三、JDBC编程步骤

JDBC技术


四、JDBC访问数据库的流程

JDBC技术

五、JDBC API详解


5.1DriverManager类

  jdbc程序中的DriverManager用于加载驱动,并创建和数据库的连接,这个API的常用方法:

DriverManager.registerDriver(new Driver);
DriverManager.getConnection(url,username,password);

 注意,在实际开发中并不推荐采用registerDriver方法注册驱动,原因有二:

    1)查看Driver的源代码可以看出,如果采用此种方式,会导致驱动程序注册两次,也就是在内存中会有两个Driver对象。

package com.mysql.jdbc;

import java.sql.DriverManager;
import java.sql.SQLException;

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
	static {
		try {
			DriverManager.registerDriver(new Driver());
		} catch (SQLException E) {
			throw new RuntimeException("Can't register driver!");
		}
	}
}

    2)程序依赖MySQL的API,脱离MySQL的jar包,程序将无法编译,将来程序切换底层数据库将会非常麻烦。


  推荐方式:class.forName("com.mysql.jdbc.Driver");

    采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要依赖具体的驱动,使得程序的灵活性更高。


同样,在开发中也不建议采用具体的驱动类型指向getConnection方法返回的Connection对象。


5.2数据库URL

URL用于标识数据库的位置,程序员通过URL地址告诉JDBC程序连接那个数据库,URL的写法为:

JDBC技术

常用数据库URL的地址的写法:

oracle  jdbc:oracle:thin:@localhost:1521:sid
mysql    jdbc:mysql://localhost:3306/sid

常用属性:useUnicode=true&characterEncoding=UTF-8


5.3Connection连接接口

应用一:获取SQL的操作对象

Statement stat = conn.createSteatement() 该对象可以将SQL发送给数据库进行执行
PreparedStatement pstmt = conn.prepareStatement(String sql) 对SQL语句进行预编译,防止SQL注入
CallableStatement cstmt = conn.prepareCall(String sql) 该对象可以调用数据库中存储过程


应用二:对数据库事务进行管理

conn.setAutoCommit(boolean flag) 设置事务是否自动提交
conn.commit()    提交数据库事务
conn.rollback()    回滚数据库事务


5.4Statement 用于将SQL发送给数据库,获取操作结果

  jdbc程序中的Statement对象用于向数据库发送SQL语句,Statement对象常用方法::

executeQuery(String sql) 用于向数据发送查询语句
executeUpdate(String sql) 用于向数据库发送insert、update或delete语句
execute(String sql) 用于向数据库发送任意SQL语句
addBatch(String sql) 把多条SQL语句放到一个批处理中
executeBatch() 向数据库发送批处理执行


5.5ResultSet

  jdbc程序中采用的ResultSet用于代表SQL语句的执行结果。ResultSet封装执行结果的时候,采用类似于表格的方式。ResultSet对象维护了一个指向表格数据行的游标,初始化的时候,游标在第一行之前,调用next()方法,可以使得游标指向具体的数据行,进而调用方法获取该行数据。

  resultSet既然用于封装执行结果,所以该对象提供的大部分方法都是用获取数据的get方法:

    获取任意类型的数据

getObject(int index) 
getObject(String columnName)

   获取指定类型的数据

getString(int index)

getString(String columnName)


5.6释放资源

  jdbc程序运行完毕后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet、Statement和Connection对象。

  特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。

  为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。


六、JDBC完成CRUD示例

增加:

private static void create() throws Exception {
		//加载数据库驱动
		Class.forName("com.mysql.jdbc.Driver");
		//获取连接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "root");
		//创建用于向数据库发送SQL的Statement对象,并发送SQL
		Statement stat = conn.createStatement();
		String sql = " insert into user (username,password,email) values('哈哈','haha','hah@163.com') ";
		int rows = stat.executeUpdate(sql);
		if(rows > 0){
			System.out.println("执行增加完毕");
		}
		
		//断开数据库的连接,并释放相关资源
		conn.close();
	}

删除

private static void delete() throws Exception {
		//加载数据库驱动
		Class.forName("com.mysql.jdbc.Driver");
		//获取连接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "root");
		//创建用于向数据库发送SQL的Statement对象,并发送SQL
		Statement stat = conn.createStatement();
		String sql = " delete from user where username = '哈哈'; ";
		int rows = stat.executeUpdate(sql);
		if(rows > 0){
			System.out.println("执行删除完毕");
		}
		
		//断开数据库的连接,并释放相关资源
		conn.close();

	}

修改

private static void update() throws Exception {
		//加载数据库驱动
		Class.forName("com.mysql.jdbc.Driver");
		//获取连接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "root");
		//创建用于向数据库发送SQL的Statement对象,并发送SQL
		Statement stat = conn.createStatement();
		String sql = " update user set email = '123@163.com' where id = 1 ";
		int rows = stat.executeUpdate(sql);
		if(rows > 0){
			System.out.println("执行修改完毕");
		}
		
		//断开数据库的连接,并释放相关资源
		conn.close();
		
	}

查询

//加载数据库驱动
		Class.forName("com.mysql.jdbc.Driver");
		//获取连接
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "root");
		//创建用于向数据库发送SQL的Statement对象,并发送SQL
		Statement stat = conn.createStatement();
		//从结果集中取出数据
		String sql = " select * from user ";
		ResultSet rs = stat.executeQuery(sql);
		while(rs.next()){
			System.out.println(rs.getInt(1)+","+rs.getString(2)+","+rs.getString(3)+","+rs.getString(4));
		}
		//断开数据库的连接,并释放相关资源
		rs.close();
		conn.close();


七、DAO模式

  DAO模式(Data Access Object 数据库访问对象),在持久成通过DAO将数据源操作完全封装起来,业务层通过Java对象,完成对数据源操作。

JDBC技术

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JDBC技术

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

2024-04-02

MySQL与JDBC之间的SQL预编译技术讲解

目录先说一下SQL预编译的好处吧下面贴上mysql官方文档截图两种实现进行基准js测试客户端实现是否存在SQL注入风险呢?总结先说一下SQL预编译的好处吧减少每次执行语句时解析语句的开销。 通常,数据库应用程序处理大量几乎相同的语句,只对
2022-11-15

Spring Boot、Druid、MyBatis Plus和Sharding JDBC分表技术详解

我们使用了Druid、MyBatis Plus和Sharding JDBC来实现分表功能。其中,Druid是一个高性能的数据库连接池,MyBatis Plus是一个基于MyBatis的ORM框架,Sharding JDBC是一个分库分表中间

Mysql数据分片技术(二)——轻量分库分表框架Sharding-jdbc实例

1. 初识shardingJdbc2. sharding-jdbc四种配置方式3. YAML配置方式及mysql环境准备4. sharding-jdbc分库分表实例测试5. 轻量的sharding-jdbc在我目前工作项目的集成方案1. 初识shardingJ

	Mysql数据分片技术(二)——轻量分库分表框架Sharding-jdbc实例
2016-04-27

数据库零基础入门教程-JDBC核心技术精讲视频教程

JDBC简介 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高
数据库零基础入门教程-JDBC核心技术精讲视频教程
2020-01-10

java中JDBC技术连接Mysql实现增删改查超级详细的教程

文章目录 一、JDBC基本介绍1.简单介绍2.准确介绍 二、IDEA项目中导入Mysql驱动jar包三、使用java程序连接Mysql数据库进行增删改查操作1.创建Mysql数据库连接2.实现增加记录3.实现删除记录4.实现修改
java中JDBC技术连接Mysql实现增删改查超级详细的教程
2023-12-23

JDBC 技术 | Java连接MySQL数据库(四万字零基础保姆级超全详解)

文章目录 前言一. JDBC概述1. JDBC 概念2. JDBC 本质3. JDBC 的好处 二. JDBC 快速入门1. 编写Java 程序步骤2. 在IDEA 中的操作流程3. 正式编写 Java程序 三. JDBC
JDBC 技术 | Java连接MySQL数据库(四万字零基础保姆级超全详解)
2023-12-23

高效掌握JDBC技术(二)| 掌握ORM思想 | 定义连接数据库的工具类

✅作者简介:C/C++领域新星创作者、CSDN内容合伙人,喜欢学习后端语言的大学生 ✨精品专栏:C++面向对象核心 🔥系列专栏:JDBC技术 📃推荐一款模拟面试、刷题神器👉注册免费刷题
2023-08-16

技术选型,不是技术造型

技术团队应该具备半个月重写 ElasticSearch 的能力。自己造轮子比使用开源软件更靠谱。

JavaWeb——JDBC

内容索引1. JDBC基本概念2. 快速入门3. 对JDBC中各个接口和类详解JDBC:1. 概念:Java DataBase Connectivity Java 数据库连接, Java语言操作数据库* JDBC本质:其实是官方(sun公司)定义的一套操作所
JavaWeb——JDBC
2016-05-23

mysql-jdbc

mysql-jdbcJava通过jdbc连接远程数据库并执行最简单的sql查询获取数据。更多jdbc介绍,请参考官方文档准备假设远端有一个数据库mydb和一张简单的表student:创建Java工程: 接下来创建一个jdbc demo工程,这里使用idea,e
mysql-jdbc
2016-10-25
2023-10-27

网络安全技术之入侵检测技术与入侵防御技术

  网络安全技术中,防火墙是所有保护网络的方法中最能普遍接受的方法,能阻挡外部入侵者,但对内攻击无能为力;同时,防火墙并不是坚不可摧的,即使是是某些防火墙本身也会引起一些安全问题。入侵检测系统是防火墙的合理补充,它帮助系统对付网络攻击,拓展了系统管理员的安全管理能力(包括安全审计、监视、进攻识别和响应),提高了信息安全
网络安全技术之入侵检测技术与入侵防御技术
2024-04-18

Impala Jdbc

首先要引入ImpalaJDBC41.jar包。可以网上找,也可以直接下面的地址下载。 链接:https://pan.baidu.com/s/1MTJ0Wn1pwEmtXwp-_E4gIw  提取码:j00u  public static void main(S
Impala Jdbc
2014-11-16

编程热搜

目录