使用JDBC操作MySql数据库

  • 1、JDBC简介
  • 2、Maven配置
  • 3、Eclipse使用


1、JDBC简介

1、JDBC是Java连接数据库的技术
使用Java连接并操作数据库(增加、删除、更新、查询

2、JDBC的意义
让程序更加的灵活,并且任何程序都离不开数据库。全栈工程师必须掌握这项技术。

3、如何使用JDBC
Java可是连接很多数据库,这些连接的技术却不是Java去实现的。数据库由每个不同的厂商创造,数据时不会公开的。Java只做连接并操作数据库的接口和框架。(只做接口,不具体实现

所以我们要使用Java连接数据库, 就需要下载对应数据库的驱动包。(驱动包就是Java类文件


2、Maven配置

1、在本地新建一个仓库文件夹,里面解压该maven压缩包依赖库。

maven 引入 mysql 包 maven导入mysql依赖_maven 引入 mysql 包

2、进入到conf目录,打开settings文件

maven 引入 mysql 包 maven导入mysql依赖_java_02

在第54行左右找到,并复制到相应的位置:

<localRepository>D:/Program Files (x86)/repository/mvn_repository</localRepository>

maven 引入 mysql 包 maven导入mysql依赖_mysql_03


在第160多行左右,并复制到相应的位置:

<mirror>
            <id>alimaven</id>
            <mirrorOf>central</mirrorOf>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </mirror>
  </mirrors>

maven 引入 mysql 包 maven导入mysql依赖_java_04

不做这两处的配置,每次有新需要的jar包,都会访问maven官网,效率慢,就改成图二阿里提供的镜像,图一是把需要的都放在本地了。

3、进入Eclipse

Window

maven 引入 mysql 包 maven导入mysql依赖_maven 引入 mysql 包_05


Preferences

maven 引入 mysql 包 maven导入mysql依赖_bc_06


搜索:maven,要设置的有两项,分别是:Installations、User Settings

maven 引入 mysql 包 maven导入mysql依赖_bc_07

先设置Installations,注意,选择maven依赖包的目录,是刚才解压的目录,选择到bin之前就好了。

maven 引入 mysql 包 maven导入mysql依赖_maven 引入 mysql 包_08


自动 有这样的提示

maven 引入 mysql 包 maven导入mysql依赖_bc_09


完成之后,都要点击Apply(应用)

maven 引入 mysql 包 maven导入mysql依赖_maven 引入 mysql 包_10

之后是设置User Settings,还是这个解压目录,选择我们刚才配置的Settings文件

maven 引入 mysql 包 maven导入mysql依赖_bc_11


仍然是Apply,最后再确认一次Apply and Close(应用并关闭)

maven 引入 mysql 包 maven导入mysql依赖_maven 引入 mysql 包_12

3、Eclipse使用

Ctrl + N 新建项目,搜索maven,选择Maven Project,下一步

maven 引入 mysql 包 maven导入mysql依赖_java_13


要选择本地和这个q开头的1.1

maven 引入 mysql 包 maven导入mysql依赖_bc_14


完成之后在左侧,会有一个项目,打开它

maven 引入 mysql 包 maven导入mysql依赖_java_15


添加需要的jar包。

需要的jar包在这个网址找:https://mvnrepository.com/

maven 引入 mysql 包 maven导入mysql依赖_bc_16


之后就是使用Java连接数据库并操作数据库6步:

// 1.加载驱动
		Class.forName("com.mysql.jdbc.Driver");
		// 2.建立连接
		Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_0805?useSSL=false", "root",
				"123456");
		System.out.println(con);

		// 3.预处理sql语句
		// 需求:查询出id、名字,展示到控制台
		PreparedStatement pst = con.prepareStatement("select * from t_mysql_employees limit 5");

		// 4.执行sql语句
		ResultSet rs = pst.executeQuery();

		// 5.处理sql语句执行的结果
		while (rs.next()) {
			System.out.println(rs.getInt("employee_id") + "==" + rs.getString("last_name"));
		}
		// 6.释放资源(链接、结果、预定义对象[后至前])
		rs.close();
		pst.close();
		con.close();

第二步数据库名后加的(?useSSL=false),我这是jdk12,数据库是MySQL8.0.18

maven 引入 mysql 包 maven导入mysql依赖_maven 引入 mysql 包_17


但 是

这样有新的需求,都要重新编写代码,就很烦,所以我们需要封装一个JDBC工具类

maven 引入 mysql 包 maven导入mysql依赖_mysql_18


上图中框起来的从下往上,分别是:

1、resources文件夹下jdbc.properties:连接数据库的驱动、链接、用户、密码集文件

mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/db_0805?useSSL=false
mysql.userName=root
mysql.password=123456

2、DBAccess.java:公共的建立连接、释放资源部分就抽取出来

package com.newer.jdbc01.utils;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

public class DBAccess {
	// 公共的两部分:1建立连接、2资源释放
	// 想要程序一运行就能建立连接,连接需要的东西都写成static静态的,最先执行的。
	private static String driver;
	private static String url;
	private static String userName;
	private static String password;

	static {
		Properties p = new Properties();
		try {
			p.load(new BufferedReader(new FileReader("resources/jdbc.properties")));
			driver = p.getProperty("mysql.driver");
			url = p.getProperty("mysql.url");
			userName = p.getProperty("mysql.userName");
			password = p.getProperty("mysql.password");
			// 加载驱动
			Class.forName(driver);

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	// 建立连接
	public static Connection getConnection() throws SQLException {
		return DriverManager.getConnection(url, userName, password);
	}

	// 2.释放资源
	public static void close(ResultSet rs, PreparedStatement pst, Connection con) throws SQLException {
		close(rs);
		close(pst);
		close(con);
	}

	private static void close(Connection con) throws SQLException {
		if (con != null) {
			con.close();
		}
	}

	private static void close(PreparedStatement pst) throws SQLException {
		if (pst != null) {
			pst.close();
		}
	}

	private static void close(ResultSet rs) throws SQLException {
		if (rs != null) {
			rs.close();
		}
	}

}

3、User.java是从数据库中查询出数据,把相应的数据放进这个对象里。要查询什么列段的值就给这个类对象设置相应的私有属性,并做成标准的OOP对象(属性私有化,无参构造方法,有参构造方法,set、get方法,toString()方法)。

4、BaseDao.java

package com.newer.jdbc01.dao;

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.newer.jdbc01.utils.DBAccess;

public class BaseDao<T> {

	public List<T> executeQuery(String sql, Class clz) throws Exception {
		List<T> list = new ArrayList<T>();
		// 建立连接
		Connection con = DBAccess.getConnection();
		// 预处理sql语句
		PreparedStatement pst = con.prepareStatement(sql);
		// 执行sql语句
		ResultSet rs = pst.executeQuery();
		// 处理执行sql的结果
		T t;
		while (rs.next()) {
			// 反射
			t = (T) clz.newInstance();
			// 获取对象的所有属性
			Field[] fields = clz.getDeclaredFields();
			for (Field f : fields) {
				f.setAccessible(true);
				f.set(t, rs.getObject(f.getName()));
				f.setAccessible(false);
			}
			list.add(t);
		}
		DBAccess.close(rs, pst, con);
		return list;
	}
}

5、UserDao.java:具体的实现

package com.newer.jdbc01.dao;

import java.util.List;

import com.newer.jdbc01.myEntity.User;

public class UserDao extends BaseDao<User> {

	// 定义list()方法
	public List<User> list() throws Exception {
		// 需要执行的sql语句,以及查询的所属对象
		// 返回 调用父类的executeQuery()方法 获得的返回值
		return super.executeQuery("select * from t_mysql_employees limit 5", User.class);
	}

	public static void main(String[] args) throws Exception {

		UserDao userDao = new UserDao();
		List<User> list = userDao.list();
		for (User u : list) {
			System.out.println(u);
		}
	}
}

至 此
JDBC工具类就封装好了~