JDBC

1、JDBC是什么?

Java DataBase Connectivity(Java语言连接数据库)

2、JDBC的本质是什么?

JDBC是SUN公司制定的一套接口(interface)
java.sql.*; (这个软件包下有很多接口。)

接口都有调用者和实现者。
面向接口调用、面向接口写实现类,这都属于面向接口编程。

为什么要面向接口编程?
解耦合:降低程序的耦合度,提高程序的扩展力。
多态机制就是非常典型的:面向抽象编程。(不要面向具体编程)

建议:
	Animal a = new Cat();
	Animal a = new Dog();
	// 喂养的方法
	public void feed(Animal a){ // 面向父类型编程。
	
	}
不建议:
	Dog d = new Dog();
	Cat c = new Cat();

思考:为什么SUN制定一套JDBC接口呢?
因为每一个数据库的底层实现原理都不一样。
Oracle数据库有自己的原理。
MySQL数据库也有自己的原理。
MS SqlServer数据库也有自己的原理。

每一个数据库产品都有自己独特的实现原理。

JDBC的本质到底是什么?
一套接口。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、JDBC开发前的准备工作

先从官网下载对应的驱动jar包,然后将其配置到环境变量classpath当中。

classpath=.;D:\course\06-JDBC\resources\MySql Connector Java
5.1.23\mysql-connector-java-5.1.23-bin.jar

以上的配置是针对于文本编辑器的方式开发,使用IDEA工具的时候,不需要配置以上的环境变量。 IDEA有自己的配置方式。

4、JDBC编程六步(需要背会)

第一步:注册驱动(作用:告诉Java程序,即将要连接的是哪个品牌的数据库)

第二步:获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,重量级的,使用完之后一定要关闭通道。)

第三步:获取数据库操作对象(专门执行sql语句的对象)

第四步:执行SQL语句(DQL DML…)

第五步:处理查询结果集(只有当第四步执行的是select语句的时候,才有这第五步处理查询结果集。)

第六步:释放资源(使用完资源之后一定要关闭资源。Java和数据库属于进程间的通信,开启之后一定要关闭。)

5、示例源码:

/**   
 * Copyright © 2020 zongyue All rights reserved.
 * 
 * 功能描述:
 * @Package: db 
 * @author: zongyue   
 * @date: 2020年4月16日 下午12:43:48 
 */
package db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Enumeration;
import java.util.PropertyResourceBundle;

/**   
* Copyright: Copyright (c) 2020
*
* Date         Author          Version           ClassName 
*---------------------------------------------------------*
* 2020年4月16日     zongyue           v1.0.0           DBmanager.java    
*
* @Description: 
*/
public class DBmanager {
	private static String url; // 数据库连接字串
	private static String userName; // 数据库用户名称
	private static String driver; // 数据库驱动名称
	private static String pwd; // 数据库用户登陆密码
	private final static String fileName = "database"; // 属性文件名称
	public static final int PAGESIZE = 5;  
	// ThreadLocal 当前线程局部变量
	@SuppressWarnings("rawtypes")
	private static ThreadLocal connection = new ThreadLocal();

	
	public DBmanager(){}
	
	//静态代码块在类加载时执行并且只执行一次
	static {
		// PropertyResourceBundle使用属性文件中的静态字符串集合来管理语言环境资源。
		PropertyResourceBundle prb = (PropertyResourceBundle) PropertyResourceBundle.getBundle(fileName);
		// 枚举Enumeration
		Enumeration enu = prb.getKeys();
		while (enu.hasMoreElements()) {
			String propertyName = enu.nextElement().toString();
			// 读取配置文件中的静态字符串并且赋值给类成员变量
			if (propertyName.equals("database.driver"))
				driver = prb.getString("database.driver");
			if (propertyName.equals("database.url"))
				url = prb.getString("database.url");
			if (propertyName.equals("database.username"))
				userName = prb.getString("database.username");
			if (propertyName.equals("database.password"))
				pwd = prb.getString("database.password");
		}
		System.out.println("readConfig");
	}

	// getConn方法用于获取数据库连接
	/**
	 * synchronized 控制对类成员变量的访问:每个类实例对应一把锁, 每个 synchronized
	 * 方法都必须获得调用该方法的类实例的锁方能执行, 否则所属线程阻塞,方法一旦执行,就独占该锁,直到从该方法返回时才
	 * 将锁释放,此后被阻塞的线程方能获得该锁,重新进入可执行状态。这种机制 确保了同一时刻对于每一个类实例,其所有声明为 synchronized
	 * 的成员函数 中至多只有一个处于可执行状态(因为至多只有一个能够获得该类实例对应的锁), 从而有效避免了类成员变量的访问冲突
	 */
	@SuppressWarnings("unchecked")
	public synchronized static Connection getConn() throws SQLException {
		//readConfig();
//		Connection con = (Connection) connection.get();
//		if (con != null && !con.isClosed()) {
//			return con;
//		}
		try {
			Class.forName(driver);
			Connection con = DriverManager.getConnection(url, userName, pwd);
			// setAutoCommit
			// 将此连接的自动提交模式设置为给定状态。如果连接处于自动提交模式下,则将执行其所有 SQL 语句,并将这些语句作为单独的事务提交。
			// 否则,其 SQL 语句将成组地进入通过调用 commit 方法或 rollback
			// 方法终止的事务中。默认情况下,新的连接处于自动提交模式下。
			connection.set(con);
			System.out.println("数据库已连接");
			return con;
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			System.out.println("无法连接数据库");
		}
		return null;
	}

}

/**   
 * Copyright © 2020 zongyue All rights reserved.
 * 
 * 功能描述:
 * @Package: db 
 * @author: zongyue   
 * @date: 2020年4月16日 下午12:46:14 
 */
package db;

import java.sql.Connection;
import java.sql.SQLException;

/**   
* Copyright: Copyright (c) 2020
*
* Date         Author          Version           ClassName 
*---------------------------------------------------------*
* 2020年4月16日     zongyue           v1.0.0           Main.java    
*
* @Description: 
*/
public class Main {
	public static void main(String[] args) {
		try {
			Connection connection = DBmanager.getConn();
			System.out.println("调用方法");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("wufalianjieshujuku");
		}
	}
}

完整下载:https://github.com/NydiaChung/JavaPractice/tree/master/JDBC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Nydia~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值