java中级内容——JDBC

软件架构方式介绍:
在这里插入图片描述
在这里插入图片描述

一、JDBC概述

JDBC (Java DataBase Connection) 是通过JAVA访问数据库

1.1 数据的持久化

  • 持久化(persistence)把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各种关系数据库来完成。
  • 持久化的主要应用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。

1.2 Java中的数据存储技术

在Java中,数据库存取技术可分为如下几类:

  • JDBC直接访问数据库
  • JDO (Java Data Object )技术
  • 第三方O/R工具,如Hibernate, Mybatis 等

JDBC是java访问数据库的基石,JDO、Hibernate、MyBatis等只是更好的封装了JDBC。

二、获取数据库连接

五种数据库连接方式:

package connection;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

import org.junit.Test;

import com.mysql.jdbc.JDBC42CallableStatement;

public class ConnectionTest {

	// 方式一
	@Test
	public void testConnection1() throws SQLException {
		System.out.println("方法一:");
		// java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库
		// 厂商提供不同的实现。下面是mysql对Driver这个接口的具体实现类,存放在com.mysql.jdbc包中,这个类所在的jar
		// 包需要我们导入,导入的是5.1.7版本的。
		// 创建的dirver对象就是实现了Driver接口的mysql的具体实现对象,创建该对象的时候就会 加载与注册JDBC驱动
		Driver driver = new com.mysql.jdbc.Driver();
		System.out.println("成功加载驱动");

		// 用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接。
		// ?useSSL=false&serverTimezone=UTC&characterEncoding=utf8
		String url = "jdbc:mysql://localhost:3306/test";

		// 将用户名和密码封装在properities中
		Properties info = new Properties();
		info.setProperty("user", "root");
		info.setProperty("password", "730136");

		Connection connection = driver.connect(url, info);

		System.out.println(connection);
	}

	// 上面的程序new com.mysql.jdbc.Driver();出现了第三方的API,我们只想通过JDBC使用数据库,并不  想牵连到数据库和JDBC之间的关系
	// 方式二:如下的程序中不出现第三方的API,使得程序有更好的可移植性
	@Test
	public void testConnection2() throws Exception {
		System.out.println("方法二:");
		// 1.加载与注册驱动,通过反射动态获取实现获取Driver的实现类对象
		// 目的都是创建类的实例,所以最终效果是一样的。反射的效率不高,但是为什么还需要反射呢,这是因为反射有更大的灵活性。
		//有了反射我们就可以将需要创建的类的信息写入配置文件,这样在程序运行时动态指定需要创建哪个类的实例。
		Class clazz = Class.forName("com.mysql.jdbc.Driver");
		Constructor constructor = clazz.getConstructor();
		// 通过构造器实例化
		Driver driver = (Driver) constructor.newInstance();
//		Driver driver = (Driver) clazz.getDeclaredConstructor().newInstance();
		System.out.println("成功加载驱动");

		// 2.提供要连接的数据库地址
		String url = "jdbc:mysql://localhost:3306/test";

		// 3.将用户名和密码封装在properities中
		Properties info = new Properties();
		info.setProperty("user", "root");
		info.setProperty("password", "730136");

		// 4.创建连接
		Connection connection = driver.connect(url, info);

		System.out.println(connection);

	}
//	@Test
//	public void testConnection4() throws Exception {
//		//1.获取Driver接口实现类对象,使用反射实现
//		Class clazz = Class.forName("com.mysql.jdbc.Driver");
//		Class clazz = Class.forName("com.mysql.jdbc.Driver()");  注意书写规范!!!!!!!多一个括号
//		System.out.println("1");
//		//使用反射的方式创建一个对象
//		//构造器
//		Constructor constructor = clazz.getConstructor();
//		System.out.println("2");
//		//通过构造器实例化
//		Driver driver = (Driver) constructor.newInstance(); 
//		System.out.println("3");
//		System.out.println("成功加载驱动");
//		//2.提供要连接的数据库
//		String url = "jdbc:mysql://localhost:3306/test";
//		
//		//3.将用户名和密码封装在properities中
//		Properties info = new Properties();
//		info.setProperty("user", "root");
//		info.setProperty("password", "730136");
//		
//		//4.创建连接
//		Connection connection = driver.connect(url, info);
//		
//		System.out.println(connection);
//		
//	} 

	// 方式三:使用DriverManager替换Driver
	@Test
	public void testConnection3() throws Exception {
		System.out.println("方法三:");
		// 1.获取Driver接口实现类对象,使用反射实现
		Class clazz = Class.forName("com.mysql.jdbc.Driver");
		// 使用反射的方式创建一个对象
		// 构造器
		Constructor constructor = clazz.getConstructor();
		// 通过构造器实例化
		Driver driver = (Driver) constructor.newInstance();

		// 2.注册驱动,没有这一步也可以成功
		DriverManager.registerDriver(driver);

		// 3.提供要连接的数据库
		String url = "jdbc:mysql://localhost:3306/test";

		// 4.提供用户名和密码

		String user = "root";
		String password = "730136";

		// 5.获取连接
		Connection connection = DriverManager.getConnection(url, user, password);
		
		System.out.println(connection);
		
	}
	
	
	//方法四:可以只是加载驱动,不用显式的注册驱动了
	@Test
	public void testConnection4() throws Exception {
		System.out.println("方法四:");
		// 1.加载注册驱动,不再需要driver对象
		//下面的这些都不需要,加载Driver的mysql实现类的时候,它里面有一个静态代码块用来注册驱动
		/*
		static {
			try {
				java.sql.DriverManager.registerDriver(new Driver());
			} catch (SQLException E) {
				throw new RuntimeException("Can't register driver!");
			}
		}
		*/
		Class.forName("com.mysql.jdbc.Driver");
//		// 使用反射的方式创建一个对象
//		// 构造器
//		Constructor constructor = clazz.getConstructor();
//		// 通过构造器实例化
//		Driver driver = (Driver) constructor.newInstance();
//
//		// 2.注册驱动,没有这一步也可以成功
//		DriverManager.registerDriver(driver);

		// 3.提供要连接的数据库
		String url = "jdbc:mysql://localhost:3306/test";

		// 4.提供用户名和密码

		String user = "root";
		String password = "730136";

		// 5.获取连接
		Connection connection = DriverManager.getConnection(url, user, password);
		
		System.out.println(connection);
		
	}
	
	
	// 方式五(最终版):将数据库连接需要的四个基本信息声明在配置文件中,通过读取配置文件的方式,创建连接
	/*
	 * 1.实现了数据与代码的分离,实现了解耦
	 * 2.如果要修改配置文件信息,避免了修改代码重新打包,提高效率
	 */
	@Test
	public void testConnection5() throws Exception {
		System.out.println("方法五:");
		// 1.读取配置文件下的四个基本信息,通过类加载器加载,ctrl+1生成
		InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
		//注意!!!!!properties拼写
		Properties properties = new Properties();
		properties.load(is);
		String user = properties.getProperty("user");
		String password = properties.getProperty("password");
		String url = properties.getProperty("url");
		String driverClass = properties.getProperty("driverClass");
		

		//2.加载驱动
		Class.forName(driverClass);
		
		// 3.获取连接
		Connection connection = DriverManager.getConnection(url, user, password);

		System.out.println(connection);

	}

}

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

三、使用PreparedStatement实现CRUD操作

3.1 操作和访问数据库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值