JAVA【JDBC】

27 篇文章 1 订阅
8 篇文章 0 订阅

目录

一、导入连接MySQL的包

二、如何连接MySQL

要素一:Driver实现接口类

Driver接口介绍

加载与注册JDBC驱动 

要素二:URL

要素三:用户名和密码 

三、方法实现

方式一

方式二

方式三

方法四 

方法五


一、导入连接MySQL的包

首先我们需要下载对应的用于MySQL连接的jar包,从官网选择自己安装的对应的MySQL版本。

MySQL :: Download MySQL Connector/J (Archived Versions)

然后打开idea,选择文件->项目结构 

 

 在库中选择Java,然后将我们刚刚下载的包导入。

 

 右下角点击应用。就可以愉快地使用了。

二、如何连接MySQL

要素一:Driver实现接口类

Driver接口介绍

java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现。

  • 在程序中不需要直接去访问实现了 Driver 接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现。

    • Oracle的驱动:oracle.jdbc.driver.OracleDriver

    • mySql的驱动: com.mysql.jdbc.Driver

加载与注册JDBC驱动 

  • 加载驱动:加载 JDBC 驱动需调用 Class 类的静态方法 forName(),向其传递要加载的 JDBC 驱动的类名

    • Class.forName(“com.mysql.jdbc.Driver”);

  • 注册驱动:DriverManager 类是驱动程序管理器类,负责管理驱动程序

    • 使用DriverManager.registerDriver(com.mysql.jdbc.Driver)来注册驱动

    • 通常不用显式调用 DriverManager 类的 registerDriver() 方法来注册驱动程序类的实例,因为 Driver 接口的驱动程序类包含了静态代码块,在这个静态代码块中,会调用 DriverManager.registerDriver() 方法来注册自身的一个实例。

要素二:URL

  • JDBC URL 用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接。

  • JDBC URL的标准由三部分组成,各部分间用冒号分隔。

    • jdbc:子协议:子名称

    • 协议:JDBC URL中的协议总是jdbc

    • 子协议:子协议用于标识一个数据库驱动程序

    • 子名称:一种标识数据库的方法。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息。包含主机名(对应服务端的ip地址),端口号,数据库名

jdbc:mysql://localhost:3306/test

其中jdbc是协议,mysql是子协议,localhost:3306/test是子名称 

  • 几种常用数据库的 JDBC URL

    • MySQL的连接URL编写方式:

      • jdbc:mysql://主机名称:mysql服务端口号/数据库名称?参数=值&参数=值

      • jdbc:mysql://localhost:3306/test

      • jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8(如果JDBC程序与服务器端的字符集不一致,会导致乱码,那么可以通过参数指定服务器端的字符集)

      • jdbc:mysql://localhost:3306/test?user=root&password=123456

    • Oracle 9i的连接URL编写方式:

      • jdbc:oracle:thin:@主机名称:oracle服务端口号:数据库名称

      • jdbc:oracle:thin:@localhost:1521:test

    • SQLServer的连接URL编写方式:

      • jdbc:sqlserver://主机名称:sqlserver服务端口号:DatabaseName=数据库名称

      • jdbc:sqlserver://localhost:1433:DatabaseName=test

要素三:用户名和密码 

  • user,password可以用“属性名=属性值”方式告诉数据库

  • 可以调用 DriverManager 类的 getConnection() 方法建立到数据库的连接

三、方法实现

方式一

// 方式一:
	@Test
	public void testConnection1() throws SQLException {
		// 获取Driver实现类对象
        // driver是驱动的意思。
		Driver driver = new com.mysql.cj.jdbc.Driver();

		// url:http://localhost:8080/gmall/keyboard.jpg
		// jdbc:mysql:协议
		// localhost:ip地址
		// 3306:默认mysql的端口号
		// test:test数据库
		String url = "jdbc:mysql://localhost:3306/test";
		// 将用户名和密码封装在Properties中
		Properties info = new Properties();
		info.setProperty("user", "root");
		info.setProperty("password", "abc123");

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

		System.out.println(conn);
	}

方式二

方式二是对方式一的优化,为了让程序具有更好的可移植性,尽量不要再程序中出现第三方的API。比方说我们这时不想使用MySQL了,想使用oracle了,怎么才能更好地实现代码的可移植性呢?

我们可以使用反射的机制来知道我们当前想要创建的数据库链接的对象是谁。

// 方式二:对方式一的迭代:在如下的程序中不出现第三方的api,使得程序具有更好的可移植性
	@Test
	public void testConnection2() throws Exception {
		// 1.获取Driver实现类对象:使用反射
		Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");
		Driver driver = (Driver) clazz.newInstance();

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

		// 3.提供连接需要的用户名和密码
		Properties info = new Properties();
		info.setProperty("user", "root");
		info.setProperty("password", "abc123");

		// 4.获取连接
		Connection conn = driver.connect(url, info);
		System.out.println(conn);

	}

 

方式三

使用drivermanager替换driver,因为drivermanager是一个基础的为了管理jdbc的驱动的服务

// 方式三:使用DriverManager替换Driver
	@Test
	public void testConnection3() throws Exception {
		// 1.获取Driver实现类的对象
		Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");
		Driver driver = (Driver) clazz.newInstance();

		// 2.提供另外三个连接的基本信息:
		String url = "jdbc:mysql://localhost:3306/test";
		String user = "root";
		String password = "abc123";

		// 注册驱动
		DriverManager.registerDriver(driver);

		// 获取连接
		Connection conn = DriverManager.getConnection(url, user, password);
		System.out.println(conn);
	}

方法四 

// 方式四:可以只是加载驱动,不用显示的注册驱动过了。
	@Test
	public void testConnection4() throws Exception {
		// 1.提供三个连接的基本信息:
		String url = "jdbc:mysql://localhost:3306/test";
		String user = "root";
		String password = "abc123";
		
		// 2.加载Driver
		Class.forName("com.mysql.cj.jdbc.Driver");
		//相较于方式三,可以省略如下的操作:
//		Driver driver = (Driver) clazz.newInstance();
//		// 注册驱动
//		DriverManager.registerDriver(driver);
		//为什么可以省略上述操作呢?
		/*
		 * 在mysql的Driver实现类中,声明了如下的操作:
		 * static {
				try {
					java.sql.DriverManager.registerDriver(new Driver());
				} catch (SQLException E) {
					throw new RuntimeException("Can't register driver!");
				}
			}
		 */

		// 3.获取连接
		Connection conn = DriverManager.getConnection(url, user, password);
		System.out.println(conn);
	}

 为什么可以省略注册驱动的步骤呢?从下面的原码中看出,其中的driver内置已经实现了注册的功能。

 

 当然我们也可以更加激进一点,将加载驱动类的代码都给省掉,我们发现我们的代码依旧能够连接到MySQL

@Test
	public void testConnection4() throws Exception {
		// 1.提供三个连接的基本信息:
		String url = "jdbc:mysql://localhost:3306/test";
		String user = "root";
		String password = "abc123";
	

		// 3.获取连接
		Connection conn = DriverManager.getConnection(url, user, password);
		System.out.println(conn);
	}

这是因为我们在如下的目录中查找之后,发现编译器在对应的包下的文件中保存了我们driver的路径。 但是最好不要省略掉,因为MySQL可以省略,但是并不代表着其它的数据库可以省略,可移植性较差。

 

 

方法五

我们上面的方法中的url,user,driver和密码的话,我们最好使用读取配置文件的形式将其读取到我们的程序中,这样在切换成其它配置的时候具有更好的可移植性。

在我们当前项目的src文件下创建一个 

 

 

在这个文件中我们去填写我们上述的四个配置信息 

注意这里的等号左右两边最好不要有空格,否则可能会被识别为空格再加上我们其它的配置文件。

user=root
password=abc123
url=jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true
driverClass=com.mysql.cj.jdbc.Driver

 

@Test
	public void getConnection5() throws Exception{
		
		//1.读取配置文件中的4个基本信息
		//我们自定义的类需要系统加载去加载
		//在我们getResourceAsStream中指明我们的文件名,就是我们刚刚的配置文件
		//默认的识别路径就是在src下的,所以直接写刚刚的文件名就行
		//然后通过这行代码生成对应的流,inputstream
		InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
		
		Properties pros = new Properties();
		//加载我们刚刚生成的is流
		pros.load(is);
		//分别通过pros.getProperty的形式来获取我们刚刚的key所对应的值
		String user = pros.getProperty("user");
		String password = pros.getProperty("password");
		String url = pros.getProperty("url");
		String driverClass = pros.getProperty("driverClass");
		
		//2.加载驱动
		Class.forName(driverClass);
		
		//3.获取连接
		Connection conn = DriverManager.getConnection(url, user, password);
		System.out.println(conn);
		
		
	}

方式五(final版):将数据库连接需要的4个基本信息声明在配置文件中,通过读取配置文件的方式,获取连接

	  此种方式的好处?
	  1.实现了数据与代码的分离。实现了解耦
	  2.如果需要修改配置文件信息,可以避免程序重新打包。
	 

### 回答1: Class.forName('com.mysql.cj.jd') 是一个 Java 语言中的方法,用于加载 MySQL 数据库的驱动程序。它的作用是将指定的类加载到内存中,并返回对应的 Class 对象,以便在程序中使用。在这个例子中,'com.mysql.cj.jd' 是 MySQL 数据库的驱动程序的类名。 ### 回答2: class.forName('com.mysql.cj.jd')是Java中的一个方法,用于动态加载并初始化指定的类。在这个方法中,参数是一个类的全限定名,即包括包名在内的类名。 在这个例子中,类的全限定名是'com.mysql.cj.jd'。这个类的具体作用是连接Mysql数据库。在Java程序中,连接数据库通常需要通过加载并初始化数据库驱动类来实现。 使用class.forName('com.mysql.cj.jd')方法可以在运行时动态加载这个类,并且执行该类中的静态代码块,用于初始化数据库驱动。这样,就可以在Java程序中使用该数据库驱动来连接Mysql数据库。 当调用class.forName('com.mysql.cj.jd')方法时,它会返回一个Class对象,该对象表示指定的类。通过这个Class对象,可以创建该类的实例、调用该类的静态方法等操作。 需要注意的是,在使用class.forName('com.mysql.cj.jd')方法之前,需要确保Mysql数据库驱动的jar包已经被加载到Java的类路径中。否则,会抛出ClassNotFoundException异常。 总结来说,class.forName('com.mysql.cj.jd')是用于动态加载Mysql数据库驱动类的方法。 ### 回答3: Class.forName() 是 Java 的一个方法,用于加载并初始化一个指定的类。 在给定的代码示例中,使用了 Class.forName('com.mysql.cj.jd'),这是一个类的完全限定名。这个方法会尝试加载并返回名为 'com.mysql.cj.jd' 的类的 Class 对象。 在这个特定的例子中,'com.mysql.cj.jd' 很可能是一个错误的类名或者是笔误。正确的类名可能是 'com.mysql.cj.jdbc.Driver',这是 MySQL 数据库连接驱动程序的类名。 通过调用 Class.forName('com.mysql.cj.jdbc.Driver'),可以加载并初始化 MySQL 数据库连接驱动程序的 Class 对象。在加载驱动程序后,就可以使用该驱动程序与 MySQL 数据库进行连接并执行相关的数据库操作。 需要注意的是,在使用 Class.forName() 加载类时,需要保证指定的类名是正确的,并且该类已经包含在应用程序的类路径中。否则,会抛出 ClassNotFoundException 异常。 总结来说,Class.forName() 是用于加载并初始化一个指定类的方法,通过指定类的完全限定名来加载该类的 Class 对象。在给定的例子中,可以尝试使用 Class.forName('com.mysql.cj.jdbc.Driver') 来加载和初始化 MySQL 数据库连接驱动程序的类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桜キャンドル淵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值