JDBC连接MySql数据库

学习 JDBC 的时候,我们首先应该了解一些基础知识点:

1、JDBC 全称:Java DataBase Connectivity

2、数据库本身是个独立运行的程序,我们编写的应用程序是利用通信协议对数据库进行指令交换。

3、JDBC 是用于执行 SQL 的解决方法,开发人员使用 JDBC 的标准接口,数据库厂商则对数据库接口进行操作,开发人员无须接触底层数据库驱动程序的差异性。

4、JDBC API 由类和接口构成,这些类和接口用于:建立数据库的连接,把 SQL 语句发送到数据库,处理 SQL 语句的结果,以及获取数据库的元数据。

5、使用 JDBC 开发任何有关于数据库的应用程序,都需要注意四个主要接口:Driver、Connection、Statement、ResultSet ,这些接口定义使用 SQL 访问数据库的一般架构。访问数据库的典型 Java 程序主要采用下列步骤:

    (1)、加载驱动程序(使用 Driver 接口装载一个合适的驱动程序)

    (2)、建立连接(使用 Connection 接口连接到数据库)

    (3)、创建和执行语句(使用 Statement 接口创建和执行 SQL 语句)

    (4)、处理结果(如果语句返回数据集结果,可以使用 ResultSet 接口处理该结果)

6、com.mysql.jdbc.Driver 是 mysqljdbc.jar 中的一个类,oracle.jdbc.driver.OracleDriver 是 classes12.jar 中的一个类,mysqljdbc.jar 和 classes12.jar 包含许多支持驱动程序的类,这些类由 JDBC 使用,但不是直接由 JDBC 程序员使用。当我们在程序中明确使用某个类时,他被 JVM 自动加载,但驱动程序没有在程序中明确地使用,因此,我们必须编写代码告诉 JVM 加载它们。


 JDBC 连接 MySql 数据库  实例:

首先在 MySql 中的 test 数据库中创建一个表 “ tb_user ” ,包含两列 “ id ”,“ name ”

CREATE TABLE `tb_user` (
`id`  int NOT NULL AUTO_INCREMENT ,
`name`  char(255) NOT NULL ,
PRIMARY KEY (`id`)
);


JDBC 程序源码:

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

public class JDBC {

	public static void main(String[] args) {

		// 连接MySql数据库必备的三个信息:数据库url、用户名、密码
		String url = "jdbc:mysql://localhost:3306/test";
		String user = "root";
		String pwd = "";

		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;

		try {

			Class.forName("com.mysql.jdbc.Driver");// 加载驱动
			conn = DriverManager.getConnection(url, user, pwd);// 获取连接

			if (!conn.isClosed()) {
				System.out.println("成功连接mysql数据库");

				stmt = conn.createStatement();// 创建sql描述的代表对象
				String sql = "select * from tb_user";
				rs = stmt.executeQuery(sql);// 执行sql并返回结果集

				while (rs.next()) {
					int id = rs.getInt("id");
					String name = rs.getString("name");

					System.out.println(id + " " + name);
				}

			}

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {// 关闭资源
			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();
				}
			}
		}
	}
}


因为每次使用 JDBC 操作数据库的时候,很多代码都是不变的,所以,在学习做项目的时候,我们一般会把 JDBC 中 “获取连接” 和 “释放资源” 这部分不变的代码抽象出来,封装成一个工具类 JDBCUtil :

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

public class JDBCUtil {

	public static final String DB_URL = "jdbc:mysql://localhost:3306/test";
	public static final String DB_NAME = "root";
	public static final String DB_PWD = "";

	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 取得连接
	 * 
	 * @return
	 */
	public static Connection getConnection() {
		try {
			return DriverManager.getConnection(DB_URL, DB_NAME, DB_PWD);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 释放资源
	 * 
	 * @param rs
	 * @param stmt
	 * @param conn
	 */
	public static void free(ResultSet rs, Statement stmt, Connection conn) {
		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();
			}
		}
	}
}


在 Java 程序中,我们使用如下语句 “获取连接”,“释放资源”

conn = JDBCUtil.getConnection();
JDBCUtil.free(rs, stmt, conn);

结合 JDBCUtil 类,上面的 “JDBC 连接 MySql 数据库 实例" 就可以改写成如下形式

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

public class JDBC {

	public static void main(String[] args) {
		
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		
		try {
			conn = JDBCUtil.getConnection();
			stmt = conn.createStatement();
			rs = stmt.executeQuery("select * from tb_user");

			while (rs.next()) {
				int id = rs.getInt("id");
				String name = rs.getString("name");

				System.out.println(id + " " + name);
			}

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCUtil.free(rs, stmt, conn);
		}
	}
}


值得注意的是:JDBC 释放资源的时候,应该遵循 ”先打开的资源后释放,后得到的资源先释放“ 的原则,因为 stmt 是由 conn 得到的,rs 又是由 stmt 得到的,为了确保资源能够正确的释放,所以先释放 rs ,再释放 stmt ,最后释放 conn 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值