JDBC连接mysql

121 阅读4分钟

本文已参与[新人创作礼]活动,一起开启掘金创作之路.

  1. JDBC是什么?java database connectivity(java连接数据库)
  2. JDBC的本质是什么?JDBC本质上是sun公司制定的一套接口,位于java.sql.*下。我们知道,接口有实现者和调用者,各大数据库公司实现JDBC接口(这些实现代码就叫做驱动),我们开发者只需要调用JDBC接口即可实现java连接到各类数据库。
  3. java官方并没有提供JDBC各个公司的实现,我们需要到各个数据库公司下载他们的驱动(JDBC实现类),导入后即可通过JDBC调用各个数据库公司的数据库。
  4. eclipse导入jar包:在对应项目处右键 ->Build Path ->Add External Archives ->选择你下载好的jdbc驱动包.jar ->打开
  5. 这里的mysql是5的版本, 如果是8的版本, 步骤会有些不同.

java连接MySql初级示例

import java.sql.*;

public class Main {

	public static void main(String[] args) {
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		String url = "jdbc:mysql://127.0.0.1:3306";
		String user = "root";
		String password = "123456";

		try {
			// 1. 注册驱动(作用:告诉java程序,即将连接的是哪个公司的数据库)
			Driver driver = new com.mysql.jdbc.Driver();
			DriverManager.registerDriver(driver);

			// 2. 获取连接(表示JVM进程和数据库进程之间的通道打开了,属于进程间通信,使用完后记得关闭)
			// url是统一资源定位符,表示网络中某一资源的绝对路径,包括协议、IP、Port、资源名 ,格式为协议://ip:port/资源名
			// 这里使用的协议为jdbc:mysql,本机ip地址为127.0.0.1,mysql端口为3306,可以不指定访问资源,也可以指定为某一个database
			conn = DriverManager.getConnection(url, user, password);

			// 3. 创建数据库操作对象(Statement类的对象用于执行sql语句的对象)
			stmt = conn.createStatement();

			// 4. 执行sql语句(DDL、DQL、DML等操作)
			// executeUpdate用来处理增删改,返回受到影响的行数
			// executeQuery用来处理查
			String sql = "select * from DatabaseName";
			rs = stmt.executeQuery(sql);

			// 5. 处理查询结果(只有执行的是DQL才需要该步骤,因为若没有查询则没有查询结果)
			while (rs.next()) {
				// 无论数据库中的数据类型是什么,一律返回string
				// JDBC中所有的下标从1开始
				// 获取第1,2,3,列
				// 可以按照第几列访问,也可以按照列名或查询语句指定的别名处理
				System.out.println(rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3));
				System.out
						.println(rs.getString("id") + "\t" + rs.getString("amount") + "\t" + rs.getString("password"));
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.out.print("连接失败");
		} finally {
			// 6. 释放资源,从小到大关闭,需要先判断是否为null,避免空指针异常(关闭JVM和数据库的通信)
			// 这里不要一起try,否则若在某一处发生异常,会直接进入到catch语句块中,后面的资源就没有关闭
			if (rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (stmt != null) {
				try {
					stmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

类加载的方式注册驱动

import java.sql.*;

public class Main {

	public static void main(String[] args) {
		// 这是连接sql sever的相关设置
		// String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
		// String url = "jdbc:sqlserver://localhost:1433;DatabaseName=DW";
		// String user = "sa";
		// String password = "123456";
		String driverName = "com.mysql.jdbc.Driver";
		String url = "jdbc:mysql://127.0.0.1:3306";
		String user = "root";
		String password = "123456";
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;

		try {
			// 1. 注册驱动(作用:告诉java程序,即将连接的是哪个公司的数据库)
			// 使用反射机制加载一个类,可让一个类的静态代码执行,不需要返回值,只需要加载的动作
			Class.forName(driverName);

			// 2. 获取连接(表示JVM进程和数据库进程之间的通道打开了,属于进程间通信,使用完后记得关闭)
			// url是统一资源定位符,表示网络中某一资源的绝对路径,包括协议、IP、Port、资源名 ,格式为协议://ip:port/资源名
			// 这里使用的协议为jdbc:mysql,本机ip地址为127.0.0.1,mysql端口为3306,可以不指定访问资源,也可以指定为某一个database
			conn = DriverManager.getConnection(url, user, password);

			// 3. 创建数据库操作对象(Statement类的对象用于执行sql语句的对象)
			stmt = conn.createStatement();
			// 4. 执行sql语句(DDL、DQL、DML等操作)
			// executeUpdate用来处理增删改,返回受到影响的行数
			// executeQuery用来处理查
			String sql = "select * from 数据库名称";
			rs = stmt.executeQuery(sql);
			// 5. 处理查询结果(只有执行的是DQL才需要该步骤,因为若没有查询则没有查询结果)
			while (rs.next()) {
				// 无论数据库中的数据类型是什么,一律返回string
				// JDBC中所有的下标从1开始
				// 获取第1,2,3,列
				// 可以按照第几列访问,也可以按照列名或查询语句指定的别名处理
				System.out.println(rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3));
				System.out
						.println(rs.getString("id") + "\t" + rs.getString("amount") + "\t" + rs.getString("password"));
			}
		} catch (Exception e) {
			e.printStackTrace();
			System.out.print("连接失败");
		} finally {
			// 6. 释放资源,从小到大关闭,需要先判断是否为null,避免空指针异常(关闭JVM和数据库的通信)
			// 这里不要一起try,否则若在某一处发生异常,会直接进入到catch语句块中,后面的资源就没有关闭
			if (rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (stmt != null) {
				try {
					stmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}
}