JDBC链接MySQL数据库(一)——数据库的基本链接

JDBC的概念

在使用以前咱们先了解一下JDBC的概念, JDBC的全称是数据库链接(Java Database Connectivity),它是一套用于执行SQL语句时的API,应用程序能够经过这套API链接到关系型数据库,而且使用SQL语句来完成数据库中的查询,添加,更改,删除等操做.。
不一样类型的数据库内部处理数据的方式也是不一样的,若是直接用数据库厂商提供的方法来创建访问数据,应用程序的可移植性就会变得很是差,若是某个用户在当前的程序中使用的是MySQL的数据库,若是换成Oracle的数据库这样须要改动大量的代码,有了JDBC这样的状况就不存在了,由于JDBC 要求数据库的厂商按照统一的要求来提供数据库的驱动,这就使代码的通用性更强.java

在这里插入图片描述

由上图看出,JDBC在应用程序和数据库之间是一个桥梁的做用,不一样的驱动与不一样的数据链接, 链接后进行相应的操做mysql

了解JDBC中的API

Driver 接口

Driver接口是全部JDBC驱动程序必须实现的接口,该接口专门给数据库厂商使用。在编写JDBC程序时,必需要把全部数据库驱动程序或者类库加载到classpath中去。web

DriverManager接口

方法 做用
regsiterDriver(Driver driver) 用于向DriverManager中注册JDBC的驱动程序
getConnection(String url, String user,String password) 创建与数据库的链接

Connection 接口

方法 做用
createStatement( ) 建立statement对象将SQL语句发送到数据库中
prepareStatement( ) 建立preparestatement对象将SQL语句发送到数据库中
prepareCall() 建立CallableStatement对象调用数据库的存储过程

注意:在这里咱们看到createStatement和prepareStatement方法都是建立对象将SQL语句发送到数据库中,可是有什么不一样呢?咱们暂且用createStatement方法,prepareStatement方法咱们以后再谈它的用途。sql

Statement接口

方法 做用
execute(String sql) 执行SQL 语句返回boolean类型的值 若是为true表示有结果,经过ResultSet方法查询结果
executeUpdate(String sql) 执行SQL语句中的 insert delete update 方法返回值为int类型
executeQuery 执行SQL中select语句

ResultSet接口

方法 描述
getString(String name) 获取String类型的值 ,name表明字段的名称
getInt(int index) 获取int类型的值,index表明字段的名称
next() 当前位置到下一行
previous() ResultSet的上一行
absolute(int row) ResultSet的指定位置

创建链接步骤

在写代码之气须要把MySQL的jar包导入到项目中,找到MySQL\Connector J 8.0 中的mysql-connector-java-8.0.14.jar文件导入工程中数据库

  1. 要创建数据库的链接,首先要注册MySQL数据库的驱动
  2. 完成数据库驱动的注册,创建数据库的链接
  3. 建立statement对象,
  4. 执行sql语句
  5. 遍历查询数据
  6. 释放资源

JDBC基础代码

解释了创建链接数据库的步骤和经常使用的API,接下来就看看最基础的代码如何实现的:svg

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class pracjdbc {
	public static void main(String [] args) {
		try {
			//1.注册驱动
			DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
			/*2.创建数据库的链接 获取参数依次是url,user,password url链接本地数据库,user 用户名称,password数据库密码*/
			Connection conn= 
			DriverManager.getConnection("jdbc:mysql://localhost/studentinformation?serverTimezone=GMT%2B8", "root", "81604152");
			//3.建立statement对象
			Statement st=conn.createStatement();
			String sql = "select * from info";
			//4.执行sql语句
			ResultSet rs = st.executeQuery(sql);
			//5.遍历查询数据
			while(rs.next()) {
				int id =rs.getInt("id");
				String name = rs.getString("name");
				System.out.println(id+":"+name);
			}
			//6.释放资源
			conn.close();
			st.close();
			rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

JDBC代码改进

刚刚写最进本的的代码如今咱们看一下在刚刚的基础上稍微作一些改进测试

  • 资源释放
    在资源释放这里起始并非这样写法,实际使用经过finally语句块
    将资源释放的
try {
	if(conn != null) {
		conn.close();
	}
} catch (SQLException e) {
	
	e.printStackTrace();
}finally{
	conn = null; 
}

这样写过于冗长,统一写一个类取完成这个操做url

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCutils {
	public static void ReleaseAll(Connection conn, ResultSet rs, Statement st) {
		CloseConn(conn);
		CloseSt(st);
		CloseRs(rs);
	}
	 public static void ReleaseAll(Connection conn, Statement st) {
	        CloseConn(conn);
	        CloseSt(st);
	}
	private static void  CloseConn(Connection conn) {
		try {
			if(conn != null) {
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			conn = null;
		}
	}
	private static void CloseRs(ResultSet rs) {
		try {
			if(rs != null) {
				rs.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			rs = null;
		}
		
	}
	private static void CloseSt(Statement st) {
		try {
			if(st != null) {
				st.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			st = null;
		}
		
	}
		
}

再来看看创建驱动的步骤 进入底层源码spa

static {
       try {
           java.sql.DriverManager.registerDriver(new Driver());
       } catch (SQLException E) {
           throw new RuntimeException("Can't register driver!");
       }
   }

Driver中已经创建了驱动实际上咱们本身创建驱动就是已经多余了,
修改代码以下.net

Class.forName("com.mysql.cj.jdbc.Driver");

完整代码以下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class pracjdbc {
	public static void main(String [] args) {
		Connection conn= null;
		Statement st = null;
		ResultSet rs = null;
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
			//DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
			conn= DriverManager.getConnection("jdbc:mysql://localhost/studentinformation?serverTimezone=GMT%2B8", "root", "81604152");
			st=conn.createStatement();
			String sql = "select * from info";
			rs = st.executeQuery(sql);
			while(rs.next()) {
				int id =rs.getInt("id");
				String name = rs.getString("name");
				System.out.println(id+":"+name);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			JDBCutils.ReleaseAll(conn, rs, st);	
		}
	}
}

结语

经过JDBC创建数据库的基本创建链接就完成了,但这也只是基础版,经过配置文件添加Junit测试增删查改方法,使用数据库链接池方法在以后会提到,因此看完基本的链接就来看一下进一步如何改进吧~