JDBC的故事

431 阅读4分钟

「本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!

1.关于JDBC:

本质是java连接数据库使用的Api,

三个w:

①what:

java Database Connectivity:  数据库的连接技术;

   java语言的连接数据库的技术(别的语言也可以;)

jdbc:sun公司的对于数据库连接的公共接口;

②how:

所有的数据库的增删改查,都是在利用的是SQL语句来实现,

JDBC的接口标准

这些所谓的SQL Server和MySql,以及和这个ORACLE,

  •   1.都是数据库的管理系统(DBMS)--通过区域来管理数据,

  •   2. 操作数据的是 ----->SQL

  • 3.数据库的可视化工具:--->SQL loy,navicat,等

  这些可以可视化工具,不用和cmd的doc环境下去写命令连接, 可以实例化的操控,但是实现还是SQL语句,建表,就可以实际操 作;

  • 4.将这些数据取出,去使用这些数据,必须要从这个数据仓库中去连接,快递去取,这个连接,(在java程序上,就是jdbc)

③why:为什么要有这个jdbc;

sun公司制定出接口,(连接的方法,连接的准备什么的)

各个DBMS去,根据自己的产品去实现类,去实现连接的(驱动类)

这个驱动类,说白了就是讲sun-java制定接口,(use的),但是众多的手机厂商,去传输数据的,(去由这个手机厂商去制定实现这个接口,通过这个usb获取连接)

如何使用的是java程序员应该是根据这个公共接口,面向接口编程,

但是要运行的时候,要驱动类去连接;

2.JDBC:

jDBC中的这些公共的接口和DBMS的实现类(驱动jar),都为了实现java代码可以连接DBMS,并且操作它里面的数据而声明的

(java)--->Sql-->某个数据库-

但是连接的任务---就是驱动类;底层实现的;

包:java.sql包和扩展包javax.sql包

常用的接口:

 ①Connection:连接

 ②Statement和PreparedStatement:增删改查:

③ResultSet:接受和处理查询结果--结果集

常见的辅助的类:

①DriverManager:驱动管理类

3.JDBC的连接步骤:

   ①注册驱动类:(导包mysql-connection-5.0.8.jar)

    这里,要是没有注册驱动,编译不会报错误,运行时会报错误,

②连接数据库:

  Connection的接口和DriverManager的驱动管理;

③数据库的操作:

      -----增删改: Statement或者是PrepareStatement

       -----查询:(会有结果)Statement或者是PrepareStatement

   加上 ResultSet的接口;

④关闭数据库的连接:

 关闭资源:

  各种关闭:

package day_29JDBC.atguigui;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import  java.sql.Statement;
import org.junit.Test;

/*
 * 实例化操作JDBC的对象,并且得到JDBC的连接对象;
 * 要点一:注册驱动:加载到内存(导jar包之后,加载内存忠的Driver的驱动类)
 * 要点二:连接数据库:连接数据库url---getConnection的方法;
 * 要点三:操作:增删该查;
 *         先要创建这个Statement接口的对象
 *         然后是excuteUpate(sql)的一个方法
 *         
 * 要点四:关闭资源:st.close();
 *                 connection.close();
 * */
public class JdbcConnection {

	

	@Test//单元测试junnit---方法前面加上的是public,到junit就不用啦;
	public void  connection() throws Exception{
	/*
	 * 未注册驱动的错误
	 * java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/storebook4
	 * 
	 * 数据库名写错误:
	 * com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown database 'storebook4'
	 * 
	 * mysql的异常:
	 * java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
	 * 这个是密码和账户名错误引起的;
	 *   
	 *   其中这个主机号或者端口号错误:(连接错误)
	 *  Communications link failure due to underlying exception: 
	 * 
	 * */
		
		//1.注册驱动:
		  /*
		   * 三部曲:
		   *  首先,将mysql-connection的jar导进来;
		   *  将这个jar如添加到运行的类中;build path一下;
		   *  将这个类--加载到内存中,(注册)
		   *  
		   * 
		   * 
		   * */
		
		//注册驱动将驱动,加载到内存;
		Class.forName("com.mysql.jdbc.Driver");
		/*类加载的方式---将Driver---全类名---要用这个类去注册驱动
		 * com.mysql.jdbc.Driver---在我们添加的mySql-Connection的jar包中的
		 * */
		
		//2.建立连接,
		/* <☆>通过DriverManager的getConnection的方法获取连接
		 * ①获取连接到url-
		 * url:统一资源定位符--(网址),通过这个可以确定,
		 * 哪个电脑上的,哪个DBMS软件;在哪个主机号和端口号启动:
		 * 
		 * url的格式:协议:dbms的名字://主机号:端口号/资源路径
		 * 
		 *   比如在写这个Tomcat的时候,虚拟路径,以及启动的是;
		 *   Http://localhost:8080:/路径名(hello.html)
		 *   http://localhost:8080/day05_Tomcat/hello.html
		 * 
		 * DriverManager.getConnection(url, user, password)
		 * 
		 * */
		String url="jdbc:mysql://localhost:3306/bookStore4";
		Connection connection = DriverManager.getConnection(url, "root", "123456");		
		
		/*
		 * Connection是一个接口,接口类型的,后面是DriverManager创建的实现类
		 * 
		 * */
		System.out.println(connection);//获取的connection的对象
		//com.mysql.jdbc.Connection@4361bd48
		System.out.println(connection.getClass());//获取的是运行时类型
		//class com.mysql.jdbc.Connection
		
		
		//3.操作数据库:
		/*
		 * 增加,用的接口是Statement,然后用这个对象去upadate;
		 * ①创建Statement接口的createStatement 的对象(注意这个接口的包是import  java.sql.Statement;)
		 *   Statement st=connection.createStatement();
		 *
		 * 
		 * */
		
		Statement st=connection.createStatement();
		//去执行这个sql语句
		
		String sql="INSERT  INTO lable VALUES(3,'微博')";
		
		int  count=st.executeUpdate(sql);
		//这里为了验证成功,这个executeUpdate(sql)的方法返回值是一个整数,
		//数据库中经过会遇见,添加之后,几行受到影响;这就是哪个数值
		System.out.println(count>0?"添加成功":"添加失败");
		/*
		 * 
		 *com.mysql.jdbc.Connection@36aa7bc2
		 *class com.mysql.jdbc.Connection
		 *添加成功
		 * 
		 * */
		
		
		
		
		//4.关闭连接:
		 st.close(); //关闭这个增删改的对象
		 connection.close();//关闭连接
	}
	
	
}