JDBC实现CRUD(增删改查)

JDBC实现CRUD(增删改查)

第一节:JDBC简介
1.1简介

​ JDBC(Java DataBase Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

JDBC可以在各种平台上使用Java,如Windows,Mac OS和各种版本的UNIX。

JDBC库包括与数据库使用相关的API。

  • 连接数据库。
  • 创建SQL或MySQL语句。
  • 在数据库中执行SQL或MySQL查询。
  • 查看和修改生成的记录。
1.2JDBC体系结构

JDBC原理

	Java提供访问数据库规范称为JDBC,而生产厂商提供规范的实现类称为驱动。
没有驱动将无法完成数据库连接,也不能操作数据库,每个数据库厂商都需要提供
自己的驱动,用来连接自己公司的数据库,也就是说驱动一般都由数据库生成厂商
提供。

在这里插入图片描述

JDBC体系结构由两层组成:

  • JDBC:提供了应用程序到数据库连接规范。
  • JDBC驱动程序: 连接数据库的驱动程序的实现。

JDBC API使用驱动程序管理器来管理不同数据库的驱动程序

在这里插入图片描述

1.3 JDBC核心组件

DriverManager: 此类管理数据库驱动程序列表。使用通信协议将来自java应用程序的连接请求与适当的数据库驱动程序匹配。

Driver:此接口处理与数据库服务器的通信,我们很少会直接与Driver对象进行交互。而是使用DriverManager对象来管理这种类型的对象。

Connection:该接口具有用于连接数据库的所有方法。连接对象表示通信上下文,数据库的所有通信仅通过连接对象。

Statement:使用从此接口创建的对象将SQL语句提交到数据库。除了执行存储过程之外,一些派生接口还接受参数。

ResultSet:在使用Statement对象执行SQL查询后,这些对象保存从数据库检索的数据。它作为一个迭代器,允许我们移动其数据。

SQLException:此类处理数据库应用程序中发生的任何异常。

第二节:JDBC使用
2.1 使用步骤

构建JDBC应用程序涉及以下六个步骤:

  • 导入JDBC驱动包:需要下载包含数据库编程所需的JDBC的jar包。
  • 注册JDBC驱动程序:要求您初始化驱动程序,以便您可以打开与数据库的通信通道。
  • 创建连接:需要使用*DriverManager.getConnection()*方法创建一个Connection对象,该对象表示与数据库的物理连接。
  • 执行查询:需要使用类型为Statement的对象来构建和提交SQL语句到数据库。
  • 从结果集中提取数据:需要使用相应的*ResultSet.getXXX()*方法从结果集中检索数据。
  • 释放资源:需要明确地关闭所有数据库资源,而不依赖于JVM的垃圾收集。

(1)导入jar包,在项目下创建lib目录,把mysql的jdbc包放入此目录,并添加到build path中(idea使用add as library)。

(2)注册驱动

第一种方式(推荐写法):Class.forName()

注册驱动程序最常见的方法是使用Java的Class.forName()方法,将驱动程序的类文件动态加载到内存中,并将其自动注册

try {
   
    //对于mysql驱动在5之前为com.mysql.jdbc.Driver
    //对于mysql驱动在6之后为com.mysql.cj.jdbc.Driver
   Class.forName("com.mysql.jdbc.Driver");
}
catch(ClassNotFoundException ex) {
   
   System.out.println("Error: unable to load driver class!");
}

第二种方式:是使用静态DriverManager.registerDriver()方法。

try {
   
   Driver myDriver = new com.mysql.jdbc.Driver();
   DriverManager.registerDriver( myDriver );
}
catch(ClassNotFoundException ex) {
   
   System.out.println("Error: unable to load driver class!");
}
 * 1>驱动程序注册两次
 * 2>java程序依赖mysql驱动包

(3)获取连接

​ 3.1数据库URL配置

加载驱动程序后,可以使用DriverManager.getConnection()方法建立连接。

  • getConnection(String url)
  • getConnection(String url,Properties prop)
  • getConnection(String url,String user,String password)
RDBMS JDBC驱动程序名称 连接字符串格式
MySQL的 com.mysql.jdbc.Driver jdbc:mysql://hostname:3306 / databaseName
ORACLE oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@ hostname:port Number:databaseName
DB2 COM.ibm.db2.jdbc.net.DB2Driver jdbc:db2:hostname:port Number / databaseName
SYBASE com.sybase.jdbc.SybDriver jdbc:sybase:Tds: hostname:port Number / databaseName

​ 3.2 创建数据库连接对象

//连接字符串 characterEncoding=utf8采用编码格式 useSSL=false不适用SSL安全连接
//如果mysql驱动在6之后,存在时区问题,再后边加上serverTimezone=GMT%2B8
String URL = "jdbc:mysql://localhost:3306/emp?characterEncoding=utf8&useSSL=false";
String USER = "mysql用户名"
String PASS = "mysql密码"
Connection conn = DriverManager.getConnection(URL, USER, PASS);

(4)执行查询(暂不执行,下一章内容)

(5)处理结果(暂不处理,下一章内容)

(6)关闭数据库连接

为确保连接关闭,您可以在代码中提供一个“finally”块。finally块总是执行,不管是否发生异常。

要关闭上面打开的连接,你应该调用close()方法如下 -

conn.close();

第三节:JDBC执行SQL语句

​ 获得了连接后,需要和数据库进行交互。JDBC的Statement和PreparedStatement接口定义了如何发送SQL命令并从数据库接收数据的方法和属性。

接口 使用
Statement 用于对数据库进行通用访问。在运行时使用静态SQL语句时很有用。Statement接口不能接受参数。
PreparedStatement(推荐使用) 当您计划多次使用SQL语句时使用。PreparedStatement接口在运行时接受输入参数。
3.1 Statement

创建命令对象

在使用Statement对象执行SQL语句之前,需要使用Connection对象的createStatement()方法创建一个,如下例所示:

Statement stmt = null;
try {
   
   stmt = conn.createStatement( );
   . . .
}
catch (SQLException e) {
   
   . . .
}
finally {
   
   . . .
}

创建Statement对象后,您可以使用它来执行一个SQL语句,其中有三个执行方法之一。

  • boolean execute(String SQL):如果可以检索到ResultSet对象,则返回一个布尔值true; 否则返回false。使用此方法执行SQL DDL语句或需要使用真正的动态SQL时。
  • int executeUpdate(String SQL):返回受SQL语句执行影响的行数。使用此方法执行预期会影响多个行的SQL语句,例如INSERT,UPDATE或DELETE语句。
  • ResultSet executeQuery(String SQL):返回一个ResultSet对象。当您希望获得结果集时,请使用此方法,就像使用SELECT语句一样。

关闭Statement对象

​ 命令执行完毕后需要调用close()方法显式关闭Statement对象,以确保正确清理。

Statement stmt = null;
try {
   
   stmt = conn.createStatement( );
   . . .
}
catch (SQLException e) {
   
   . . .
}
finally {
   
   stmt.close();
}

案例操作1: 添加数据

public class JdbcDemo1 {
   
	public static void main(String[] args) {
   
		Connection connection=null;
		Statement stat=null;
		//2 注册驱动
		try {
   
			Class.forName("com.mysql.jdbc.Driver");
			//3打开连接,localhost表示本机的ip,3306为mysql的端口号,school为数据库名称,后边为账号密码
			connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/school", "root", "root");
			//4创建命令并执行
			stat=connection.createStatement();
			int result=stat.executeUpdate("insert into dept(deptno,dname,loc) values(80,'市场部','天津')");
			if(result>0){
   
				System.out.println("添加成功");
			}else{
   
				System.out.println("添加失败");
			}
			
		} catch (Exception e) {
   
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
   
			if(stat!=null){
   
				try {
   
					stat.close();
				} catch (SQLException e) {
   
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(connection!=null){
   
				try {
   
					connection.close();
				} catch (SQLException e) {
   
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
}

演示案例2:更新数据

public class JdbcDemo2 {
   
	public static void main(String[] args) {
   
		Connection connection=null;
		Statement stat=null;
		//2 注册驱动
		try {
   
			Class.forName("com.mysql.jdbc.Driver");
			//3打开连接
			connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/school", "root", "root");
			//4创建命令并执行
			stat=connection.createStatement(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值