JDBC基础-演示完整步骤

本文全文参考 https://www.bilibili.com/video/BV12b411K7Zu

二.演示完整步骤

2.1 准备工作
  • 导入JDBC依赖
2.2 加载并注册驱动
  • 1.Class.forName( )
  • 因为 Driver 接口的驱动程序类都包含了静态代码块,在这个静态代码块中,会调用 DriverManager.registerDriver() 方法来注册自身的一个实例,所以可以换一种方式来加载驱动。(即只要想办法让驱动类的这段静态代码块执行即可注册驱动类,而要让这段静态代码块执行,只要让该类被类加载器加载即可)
    在这里插入图片描述
  • 调用 Class 类的静态方法 forName(),向其传递要加载的 JDBC 驱动的类名
//通过反射,加载与注册驱动类,解耦合(不直接依赖)
Class.forName("com.mysql.jdbc.Driver");
  • 2.服务提供者框架(例如:JDBC的驱动程序)自动注册
2.3 获取数据库连接
  • 可以通过 DriverManager 类建立到数据库的连接Connection:
  • DriverManager 试图从已注册的 JDBC 驱动程序集中选择一个适当的驱动程序。
public static Connection getConnection(String url) 
public static Connection getConnection(String url,String user, String password)
public static Connection getConnection(String url,Properties info)其中Properties info通常至少应该包括 "user""password" 属性
  • JDBC URL 用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接。JDBC URL的标准由三部分组成,各部分间用冒号分隔。
  • jdbc:<子协议>:<子名称>
    • 协议:JDBC URL中的协议总是jdbc
    • 子协议:子协议用于标识一个数据库驱动程序
    • 子名称:一种标识数据库的方法。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息
      在这里插入图片描述
  • MySQL的连接URL编写方式:
    • jdbc:mysql://主机名称:mysql服务端口号/数据库名称?参数=值&参数=值
    • jdbc:mysql://localhost:3306/testdb
    • jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf8(如果JDBC程序与服务器端的字符集不一致,会导致乱码,那么可以通过参数指定服务器端的字符集)
    • jdbc:mysql://localhost:3306/testdb?user=root&password=123456
2.4 操作或访问数据库
  • 数据库连接被用于向数据库服务器发送命令和 SQL 语句,并接受数据库服务器返回的结果。
  • 其实一个数据库连接就是一个Socket连接。
  • java.sql 包中有 3 个接口分别定义了对数据库的调用的不同方式:
    • Statement:用于执行静态 SQL 语句并返回它所生成结果的对象。
      • PrepatedStatement:SQL 语句被预编译并存储在此对象中,然后可以使用此对象多次高效地执行该语句。
        • CallableStatement:用于执行 SQL 存储过程
Statement
  • 通过调用 Connection 对象的 createStatement() 方法创建该对象
  • 该对象用于执行静态的 SQL 语句,并且返回执行结果
  • Statement 接口中定义了下列方法用于执行 SQL 语句:
    • int excuteUpdate(String sql):执行更新操作INSERT、UPDATE、DELETE
    • ResultSet excuteQuery(String sql):执行查询操作SELECT
ResultSet
  • 通过调用 Statement 对象的 excuteQuery() 方法创建该对象
  • ResultSet 对象以逻辑表格的形式封装了执行数据库操作的结果集,ResultSet 接口由数据库厂商实现
  • ResultSet 对象维护了一个指向当前数据行的游标,初始的时候,游标在第一行之前,可以通过 ResultSet 对象的 next() 方- 法移动到下一行
  • ResultSet 接口的常用方法:
    • boolean next()
    • getXxx(String columnLabel):columnLabel使用 SQL AS 子句指定的列标签。如果未指定 SQL AS 子句,则标签是列名称
    • getXxx(int index) :索引从1开始
增删改查示例代码:
public class TestConnection {
	//增删改
	@Test
	public void testUpdate() throws  Exception {
		//步骤1:注册驱动(为了让mysql的实现类加载到内存可以使用)
		
//		DriverManager.registerDriver(new Driver());
		Class.forName("com.mysql.jdbc.Driver");
	
		//步骤2:获取连接
		Properties properties  = new Properties();//配置文件要求里面必须有连接参数和配置参数
	
		properties.load(new FileInputStream("src\\druid.properties"));
		DataSource ds =	DruidDataSourceFactory.createDataSource(properties);
		
		Connection connection = ds.getConnection();
		
		//步骤3:执行增删改查操作
		//①获取执行sql语句的命令对象
		Statement statement = connection.createStatement();
		
		//②执行sql语句
//		statement.executeQuery(sql);//执行查询语句
//		statement.executeUpdate(sql)//执行增删改语法,返回受影响行数
//		statement.execute(sql)//执行任何sql语句
		
		int update = statement.executeUpdate("delete from admin where id =1");
		
		//③处理结果
		System.out.println(update>0?"成功":"失败");
		
		//步骤4:关闭连接(释放资源)
		
		statement.close();
		connection.close();
	}
	//查询
	@Test 
	public void testQuery() throws Exception {

		//1.注册驱动
		Class.forName("com.mysql.jdbc.Driver");		
		//2.获取连接
		Properties  pro = new Properties();
		pro.load(new FileInputStream("src\\druid.properties"));
		DataSource ds = DruidDataSourceFactory.createDataSource(pro);
		Connection connection = ds.getConnection();
		
		//3.执行查询
		//①获取执行sql的命令对象
		Statement statement = connection.createStatement();
		
		//②执行sql	
		ResultSet set = statement.executeQuery("select name bname,sex gender,borndate born from beauty");
		while(set.next()) {		
			String name = set.getString("bname");
			char gender = set.getString("gender").charAt(0);
			Date date = set.getDate("born");
	//		String date = set.getString("born");	
			System.out.println(name+"\t"+gender+"\t"+date);
		}
		
		//4.关闭
		set.close();
		statement.close();
		connection.close();	
	}	
}

在这里插入图片描述

2.5 释放资源
  • ConnectionStatementResultSet都是应用程序和数据库服务器的连接资源,使用后一定要关闭,可以在finally中关闭
  • 演示未关闭后果:
import java.sql.Connection;
import java.sql.DriverManager;

public class TestConnectionClose {
	public static void main(String[] args) throws Exception{
		//1、加载与注册驱动
		Class.forName("com.mysql.jdbc.Driver");
		
		//2、获取数据库连接
		String url = "jdbc:mysql://localhost:3306/test";
		
		//my.ini中max_connections=10
		for (int i = 0; i < 15; i++) {
			Connection conn = DriverManager.getConnection(url,"root", "123456");
			System.out.println(conn);
			//没有关闭,资源一直没有释放
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值