Jsp第十一课 JDBC的回顾及单元测试框架的使用
Posted 笔触狂放
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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语句操作之后,进行断开与数据库的连接,减小程序运行的压力,就好比是你和好朋友打完了电话,就要挂断一样,初学者应该很好理解。
这里代码的运行效果不再演示,初学者可自行运行查看效果。
以上是关于Jsp第十一课 JDBC的回顾及单元测试框架的使用的主要内容,如果未能解决你的问题,请参考以下文章