【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语句操作之后,进行断开与数据库的连接,减小程序运行的压力,就好比是你和好朋友打完了电话,就要挂断一样,初学者应该很好理解。

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

 

 

 

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于药品自动贩卖项目,涉及到药品库存管理、销售、收银等功能,需要考虑的因素比较多,需要仔细设计和实现。下面是使用jsp、servlet、jdbc完成一个药品自动贩卖项目的详细步骤及代码: 1. 数据库设计 先设计好数据库,包括药品表、销售记录表、用户表等等。 2. 搭建开发环境 需要安装Eclipse IDE、Tomcat服务器、MySQL数据库等。 3. 创建一个动态Web项目 在Eclipse IDE创建一个动态Web项目,创建三个文件夹:src、WebContent、WebContent/WEB-INF,分别用于存放Java源代码、Web资源文件、Web配置文件。 4. 设置相关配置信息 在WebContent/WEB-INF下创建web.xml文件,配置Servlet和JSP的映射关系。 5. 创建JavaBean类 创建JavaBean类,例如 Drug、User、SaleRecord等,用于保存和处理数据。 6. 创建DAO(Data Access Object)层 创建DAO层,实现对数据库的增删改查操作。 7. 创建Service层 创建Service层,实现业务逻辑处理。 8. 创建Servlet类 创建Servlet类,实现与用户的交互,例如药品的添加、修改、查看、删除,销售记录的添加、修改、查看、删除,用户的登录、注册等等。 9. 创建JSP页面 创建JSP页面,实现前端的交互,例如药品管理界面、销售记录管理界面、用户登录、注册界面等等。 10. 在Servlet调用Service和DAO层的方法,将数据传递到JSP页面进行展示。 11. 运行Tomcat服务器,测试项目的功能是否正常。 以下是部分代码示例: Drug.java ```java public class Drug { private int id; private String name; private String manufacturer; private double price; private int stock; // getter and setter methods } ``` DrugDAO.java ```java public class DrugDAO { // 添加药品 public boolean addDrug(Drug drug) { // ... } // 修改药品 public boolean updateDrug(Drug drug) { // ... } // 删除药品 public boolean deleteDrug(int id) { // ... } // 获取所有药品信息 public List<Drug> getAllDrugs() { // ... } // 根据ID获取药品信息 public Drug getDrugById(int id) { // ... } } ``` DrugService.java ```java public class DrugService { private DrugDAO drugDAO = new DrugDAO(); // 添加药品 public boolean addDrug(Drug drug) { // ... } // 修改药品 public boolean updateDrug(Drug drug) { // ... } // 删除药品 public boolean deleteDrug(int id) { // ... } // 获取所有药品信息 public List<Drug> getAllDrugs() { // ... } // 根据ID获取药品信息 public Drug getDrugById(int id) { // ... } } ``` DrugServlet.java ```java public class DrugServlet extends HttpServlet { private DrugService drugService = new DrugService(); // 添加药品 protected void doAdd(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // ... } // 修改药品 protected void doUpdate(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // ... } // 删除药品 protected void doDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // ... } // 获取所有药品信息 protected void doGetAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // ... } // 根据ID获取药品信息 protected void doGetById(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // ... } } ``` 以上是使用jsp、servlet、jdbc完成一个药品自动贩卖项目的详细步骤及代码。希望可以帮到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笔触狂放

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值