【Jsp】第十一课 JDBC的回顾及单元测试框架的使用

概念

JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中为最成功的一个。 JUnit有它自己的JUnit扩展生态圈。

多数Java的开发环境都已经集成了JUnit作为单元测试的工具。

集成步骤

从Junit官网上下载对应需要的版本junit-4.13.2.jar和hamcrest-core-1.3.jar插件,拷贝至创建的项目中的lib文件夹下

 在src中创建包,然后创建JDBCDemo类,接下来就可以使用Juint插件作为运行。

public class JDBCDemo {
	@Test
	public void test() {
		System.out.println("使用单元测试插件运行")
	}
	
}

接下来只要选中方法名,右键run as---》Junit test即可运行。

Junit插件中具备很多注解的各种用法,初学者可以通过查看api帮助文档进行全面学习,这里不做过多的介绍。

数据库操作

安装好数据库之后(如果还有未按照好数据库的初学者请查看【MySQL】MySQL数据库的安装详细步骤_笔触狂放的博客-CSDN博客),打开其数据库的图形化软件Navicat或者是SQLYong软件,本文使用Navicat软件作为介绍

 选择左上角连接,进行创建一个新的连接:

 输入连接名称以及mysql数据库的密码:

 点击左下角连接测试,进行检查密码是否正确,如果现实连接成功,则可以点击确定进入

 选中新建的连接名称双击打开,点右键--》新建数据库:

填写数据库名称,以及字符集和排序规则:

 

创建之后,双击打开studentdb数据库,找到表点右键--》新建表

 这里我们创建三个字段,id(学号),name(姓名),age(年龄)在student表中,并把id作为主键,唯一标识

将主键id设置为不允许为空,并勾选上自动递增。然后在点击添加字段或者添加栏位

 将name和age字段添加并设置好数据类型,添加完成之后,点击保存设置表名

点击确定,既表已创建好 

 双击打开表,可以添加数据:

 但在我们开发项目中是很少用到图形化界面手动输入数据,因为在录入大批量的数据的时候,效率太低,因此我们采用sql语句进行对数据库的增删改查的处理

 

 选中要执行的sql语句,点击运行即可执行,然后需要刷新数据库表才能看到数据已被添加成功

当看到运行结果没有报错时,而是显示受影响的行为:1,则表示有一条数据添加至表中。

修改,删除和条件查询的操作这里就不再演示,初学者可根据以上步骤进行执行想要执行的sql语句,进行运行查看表中发生的变化即可。

JDBC连接数据库

Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。我们通常说的JDBC是面向关系型数据库的。

Java语言想要操作数据库,则需要数据库连接插件,这里连接的数据库版本不同,使用的插件版本也不同,建议使用版本较高的,因为高版本插件可以连接低版本数据库。本文使用mysql-connector-java-8.0.23.jar插件作为连接数据库的插件。

将该插件拷贝至lib文件夹下,并打开JDBCDemo类编写连接数据库的方法,作为工具方法

package com.db.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.junit.Test;

public class JDBCDemo {
	public Connection con=null;
	/**
	 * 定义方法,用于连接数据库
	 */
	public void getConnection() {
		//1.加载插件
		try {
			Class.forName("com.mysql.jdbc.Driver");
			//2.准备连接数据的信息:要连接的数据库的地址      用户名     密码
			String url="jdbc:mysql://localhost:3306/studentdb?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimeZone=UTC";
			String username="root";
			String password="root";
			//使用设备管理器类根据提供的信息连接数据库
			con=DriverManager.getConnection(url, username, password);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	
	
}

 使用junit插件创建执行不同sql语句操作的方法:

package com.db.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.junit.Test;

public class JDBCDemo {
	public Connection con=null;
	/**
	 * 定义方法,用于连接数据库
	 */
	public void getConnection() {
		//1.加载插件
		try {
			Class.forName("com.mysql.jdbc.Driver");
			//2.准备连接数据的信息:要连接的数据库的地址      用户名     密码
			String url="jdbc:mysql://localhost:3306/studentdb?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimeZone=UTC";
			String username="root";
			String password="root";
			//使用设备管理器类根据提供的信息连接数据库
			con=DriverManager.getConnection(url, username, password);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void test1() {
		//添加数据
		getConnection();
		//判断是否连接成功
		if (con!=null) {
			//准备要执行的添加sql语句
			//在jdbc连接数据库中,使用占位符?
			String sql="insert into tb_student(name,age) VALUES(?,?)";
			//准备执行sql语句
			try {
				PreparedStatement ps=con.prepareStatement(sql);
				ps.setString(1, "马云");
				ps.setInt(2, 22);
				int count=ps.executeUpdate();
				if (count>0) {
					System.out.println("添加成功");
				}
				//执行完成之后,要断开数据库连接
				ps.close();
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		
	}
	
	@Test
	public void test2() {
		//修改语句
		getConnection();
		if (con!=null) {
			String sql="update tb_student set age=? where id=?";
			try {
				PreparedStatement ps=con.prepareStatement(sql);
				ps.setInt(1, 25);
				ps.setInt(2, 4);
				int i=ps.executeUpdate();
				if (i>0) {
					System.out.println("修改成功");
				}
				ps.close();
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	@Test
	public void test3() {
		//删除语句
		getConnection();
		if (con!=null) {
			String sql="delete from tb_student where id=?";
			try {
				PreparedStatement ps=con.prepareStatement(sql);
				ps.setInt(1, 5);
				int i=ps.executeUpdate();
				if (i>0) {
					System.out.println("删除成功");
				}
				ps.close();
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	@Test
	public void test4() {
		//查询语句
		//根据id=1查询学生的信息
		getConnection();
		if (con!=null) {
			String sql="select * from tb_student where id=?";
			try {
				PreparedStatement ps=con.prepareStatement(sql);
				ps.setInt(1, 1);
				ResultSet rs=ps.executeQuery();
				//因为查询出来的数据是一张表的结构,游标默认停留在第一行,是字段名
				//所有需要获得的数据要从第二行开始
				if (rs.next()) {
					int id=rs.getInt(1);
					String name=rs.getString(2);
					int age=rs.getInt(3);
					System.out.println(id+"--"+name+"--"+age);
				}
				//断开连接
				rs.close();
				ps.close();
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
		}
		
	}
	
	@Test
	public void test5() {
		List<Map<String, Object>> oList=new ArrayList<Map<String,Object>>();
		//查询多行数据
		getConnection();
		if (con!=null) {
			String sql="select * from tb_student";
			try {
				PreparedStatement ps=con.prepareStatement(sql);
				ResultSet rs=ps.executeQuery();
				while (rs.next()) {
					int id=rs.getInt(1);//4
					String name=rs.getString(2);//王六
					int age=rs.getInt(3);//25
					Map<String, Object> oMap=new HashMap<String, Object>();
					oMap.put("id", id);
					oMap.put("name", name);
					oMap.put("age", age);
					oList.add(oMap);
				}
				//断开连接
				rs.close();
				ps.close();
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		//循环遍历集合,显示所有数据
		for (Map<String, Object> map : oList) {
			System.out.println(map);
		}
		
		//jdk1.8的新特性
		//labdam表达式
		oList.forEach(map->System.out.println(map));
		
	}
	
	
}

 并在执行不同sql语句操作之后,进行断开与数据库的连接,减小程序运行的压力,就好比是你和好朋友打完了电话,就要挂断一样,初学者应该很好理解。

这里代码的运行效果不再演示,初学者可自行运行查看效果。

猜你喜欢

转载自blog.csdn.net/u010321564/article/details/121711773