十、JDBC--JDBC的引入(一)

一、JDBC引入

1. 之前操作数据

          1)通过mysql的客户端工具,登录数据库服务器  (mysql -u root -p 密码)
		  2)编写sql语句
		  3)发送sql语句到数据库服务器执行

2. 什么是 JDBC?

 		
 		使用java代码(程序)发送sql语句的技术,就是jdbc技术!!!!

		实质:
			 jdbc是sun公司设计的一套通用的用java语言操作不同数据库的接口(接口:抽象方法)。
			 数据库厂商实现这套接口,提供自己的数据库驱动。
		

	JDBC全称为:Java Data Base Connectivity(java数据库连接)。
	它主要由接口组成。组成JDBC的2个包:
								 java.sql
								 javax.sql
								 
	以上2个包已经包含在J2SE中,所以不用导入,开发这只需要导入JDBC的实现类即数据库驱动包。
	开发JDBC应用需要以上2个包的支持外,还需要导入相应JDBC的数据库实现(即数据库驱动)

3.JDBC的历史



	自从Java语言于1995年5月正式公布以来,Java风靡全球。出现大量的用java语言编写
	的程序,其中也包括数据库应用程序。由于没有一个Java语言的API,编程人员不得不
	在Java程序中加入C语言的ODBC函数调用。这就使很多Java的优秀特性无法充分发挥,
	比如平台无关性、面向对象特性等。随着越来越多的编程人员对Java语言的日益喜
	爱,越来越多的公司在Java程序开发上投入的精力日益增加,对java语言接口的访问
	数据库的API的要求越来越强烈。也由于ODBC的有其不足之处,比如它并不容易使用,
	没有面向对象的特性等等,SUN公司决定开发一Java语言为接口的数据库应用程序开发
	接口。在JDK1.x版本中,JDBC只是一个可选部件,到了JDK1.1公布时,SQL类包(也就
	是JDBCAPI)就成为Java语言的标准部件。


二、JDBC的发展历程

1.没有jdbc之前

在这里插入图片描述

	
	没有JDBC之前,java app要连接数据库,需要程序员自己开发和维护数据库驱动程序,并且还要对不同数据库做适配。
	
	如果java app需要连接mysql,则开发人员自己编写mysql驱动程序,连接数据库。
	如果java app需要连接oracle,则开发人员自己编写oracle驱动程序,连接数据库。
	
	如果数据库厂商改变了数据库的底层,则开发人员需要重新编写数据库驱动程序去相应的匹配。
	
	问题:需要java程序员开发与维护不同数据库的驱动程序,如果数据库底层发生变化,驱动程序也随之改变。

2. jdbc出现

在这里插入图片描述

	+++ JDBC出现的原因:
	
		   1.没有JDBC时,java app连接数据库需要开发者自己开发和维护数据库驱动程序,
			 并针对不同的数据做相应的适配。
			
			2.早期,sun公司没有影响力,所以必须程序员自己开发数据库驱动程序。
			  随着sun公司的发展,在世界有一定的影响力。所以sun公司可以自己定义连接
			  数据库通用标准,由数据库厂商去实现。 
			  
			  ===》 一流公司卖标准,二流公司卖服务,三流公司卖产品。

   +++ JDBC出现:
   		sun公司定义了JDBC规范,它实质上是一套通用的用java语言连接不同数据库的接口
   		(接口中定义了许多抽象方法)。
   		
   		数据库厂商遵守JDBC规范,提供java连接数据库的驱动程序。这些驱动程序实质上是
   		对JDBC的实现。

		sun公司定义的JDBC是规范接口,数据库厂商提供的驱动程序是接口的实现。
		所以开发者可以用一套API可以去连接不同的数据库。

三、java连接mysql数据库- - 代码实现

			+++ mysql连接协议:
						String url="jdbc:mysql://localhost:3306/day11";
									数据库协议:数据库自协议://主机:端口/要连接的数据库

			+++ java连接mysql数据库有三种方式:
						1.普通连接
						2.使用驱动管理器手动注册连接
						3.使用驱动管理器自动注册连接。


		   +++ Driver 类:
		   				每个驱动程序类必须实现的接口。 
		   				这个接口是JDBC规范中的一个核心接口。数据库厂商提供的数据库驱动必须要实现这个接口。
		   
		   +++ DriverManager类:
		   			    1.驱动管理器类, 用于管理多个JDBC驱动程序的基本服务。
						
						2.这个API的常用方法:
										DriverManager.registerDriver(new Driver())
										DriverManager.getConnection(url, user, password),

						3.注意:在实际开发中并不推荐采用registerDriver方法注册驱动。原因有二:
						
							一、查看Driver的源代码可以看到,如果采用此种方式,会导致驱动程序注册两次,也就是在内存中会有两个Driver对象。
							二、程序依赖mysql的api,脱离mysql的jar包,程序将无法编译,将来程序切换底层数据库将会非常麻烦。

						推荐方式:Class.forName(“com.mysql.jdbc.Driver”);
						采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要依赖具体的驱动,使程序的灵活性更高。
						
						同样,在开发中也不建议采用具体的驱动类型指向getConnection方法返回的connection对象。
		   			

3.1 第一个JDBC链接的步骤


		编写一个程序,这个程序从user表中读取数据,并打印在命令行窗口中。
		
		一、搭建实验环境 :
			1、在mysql中创建一个库,并创建user表和插入表的数据。
			2、新建一个Java工程,并导入数据驱动。
			
		二、编写程序,在程序中加载数据库驱动
			DriverManager. registerDriver(Driver driver) 
			
		三、建立连接(Connection)
			Connection conn = DriverManager.getConnection(url,user,pass); 
			
		四、创建用于向数据库发送SQL的Statement对象,并发送sql
			Statement st = conn.createStatement();
			ResultSet rs = st.excuteQuery(sql);
			
		五、从代表结果集的ResultSet中取出数据,打印到命令行窗口
		六、断开与数据库的连接,并释放相关资源
		

3.2 方式一: 普通连接

	/**
	 * 方式一
	 * @throws SQLException
	 */
	@Test
	public void con() throws SQLException {
		
		String url="jdbc:mysql://localhost:3306/day11";
				
		
		//旧版本
		//mysql组织的前身是gjt组织 ,后期又更名为mysql。所以包名gjt也改为了mysql
		//Driver driver=new  org.gjt.mm.mysql.Driver();
		
		//新版本
		Driver driver=new  com.mysql.jdbc.Driver();
		
		Properties p=new Properties();
		p.put("user", "root");
		p.put("password", "root");
		
		Connection conm = driver.connect(url, p);
		
		System.out.println(conm);
		
	
	}

注意:

	这种方式不推荐。
	
	Driver driver=new  org.gjt.mm.mysql.Driver();
	Driver driver=new  com.mysql.jdbc.Driver();
	两种实例都是一样的,只不过一个是新版本,一个旧版本。
	mysql组织前身是gjt组织。后来组织改名为mysql,所以包名也改为了mysql。
	这种连接数据库的方式不推荐使用。

3.3 方式二:使用驱动管理器连接数据库(手动注册)

	/**
	 * 方式二:驱动管理器:手动注册驱动
	 * @throws SQLException
	 */
	@Test
	public void con2() throws SQLException {
		
		String url="jdbc:mysql://localhost:3306/day11";

		
		//DriverManager:驱动管理器类, 管理一组JDBC驱动程序的基本服务。
		DriverManager.deregisterDriver(new com.mysql.jdbc.Driver());
		
		Connection conn = DriverManager.getConnection(url, "root", "root");
		
		System.out.println(conn);
		
	}

注意:

		手动注册驱动,这种方式不推荐。
		原因:
			 mysql驱动核心包中 com.mysql.jdbc.Driver ,这个类中有一个静态代码块,静态代码
			 块的唯一作用就是注册驱动。所以我们在加载类时,静态代码块就已经执行了,即mysql驱动就已经被注册了。
			 如果我们在手动注册驱动,就相当于注册了两次。
		

3.4 方式三:使用驱动管理器连接数据库(自动注册) – 推荐使用

	/**
	 * 方式三:驱动管理器:自动注册驱动-- 使用类加载方式
	 * 
	 * @throws SQLException
	 * @throws ClassNotFoundException 
	 */
	@Test
	public void con3() throws SQLException, ClassNotFoundException {
		
		
		//加载com.mysql.jdbc.Driver类到JVM。
		//由于该类中有一个静态代码块,该代码块的作用就是注册mysql驱动程序。
		//所以类加载时,就自动注册了。
		Class.forName("com.mysql.jdbc.Driver");
		
		
		Connection conn = DriverManager.getConnection(url, "root", "root");
		
		System.out.println(conn);
		
	}

注意:


	Class.forName("com.mysql.jdbc.Driver");
	加载mysql驱动类到jvm。加载驱动类时就已经注册驱动了。
	
	原因:该类中有一个静态代码块,静态代码块的主要作用就是注册mysql驱动。
	      所以当该类被加载时,静态代码块就自动执行,mysql驱动就自动注册。

mysql驱动自动注册的原理:

			以下代码是mysql驱动包中  com.mysql.jdbc.Driver 类,即该类实现了Driver接口。
			该类中有一个静态代码块,静态代码块的主要作用就是注册驱动。
		    所以当我们在JVM中加载该类时,静态代码块就会自动执行,mysql驱动就会自动被注册。

在这里插入图片描述

发布了94 篇原创文章 · 获赞 0 · 访问量 633

猜你喜欢

转载自blog.csdn.net/weixin_45602227/article/details/104175069