JDBC and Junit单元测试总结 no6.

下文每一步很细节 按照步骤一步步实现,没有过多的口水话 纯干货。

什么叫JDBC?

全称 Java DataBase Connectivity java数据库连接
为什么要用它 :
这是sum公司为Java提供的一种规范 规则访问数据库。
流程图:
在这里插入图片描述

Java代码Test:
先建立项目

建立MianTest类->建立lib page->导入mysql驱动->add build path
完成结构如下图:
在这里插入图片描述
第一步:注册驱动
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
第二步:建立连接
Connection conn=(Connection) DriverManager.getConnection(url, user, password);
第三步:创建statment 对象与数据库打交道 一定要有这个对象
Statement st=(Statement) conn.createStatement();
第四步:执行查询语句
ResultSet rS=st.executeQuery(sql); while(rS.next()) { String name=rS.getString("name"); String sex=rS.getString("sex"); System.out.println("姓名"+name+"性别"+sex); }
第五步:关闭连接
rS.close(); conn.close(); st.close();
运行结果如下:
在这里插入图片描述

附完整代码:

package com.jdbc.test;

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.*;
import java.sql.Connection;
import com.mysql.jdbc.Driver;
import com.mysql.jdbc.Statement;

public class MianTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub	
		String user="root";
		String password="123456";
		String url="jdbc:mysql://localhost/users?useUnicode=true&characterEncoding=utf8";
		String sql="select * from peopel";
		try {
			//注册驱动
			DriverManager.registerDriver(new com.mysql.jdbc.Driver());
			//建立连接
			Connection conn=DriverManager.getConnection(url, user, password);
			//创建statment与数据库打交道 一定需要这个对象
			Statement st=(Statement) conn.createStatement();
			//执行查询
			ResultSet rS=st.executeQuery(sql);
			while(rS.next()) {
				String name=rS.getString("name");
				String sex=rS.getString("sex");
				System.out.println("姓名:"+name+"性别:"+sex);
			}
			rS.close();
			conn.close();
			st.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

继续优化:

package com.jdbc.test;

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

import com.jdbc.util.JDBCutil;
import com.mysql.jdbc.Driver;
import com.mysql.jdbc.Statement;

public class MianTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub	
		String user="root";
		String password="123456";
		String url="jdbc:mysql://localhost/users?useUnicode=true&characterEncoding=utf8";
		String sql="select * from peopel";
		Connection conn=null;
		Statement st=null;
		ResultSet rs=null;
		try {
			//注册驱动
			DriverManager.registerDriver(new com.mysql.jdbc.Driver());
			//建立连接
			conn=DriverManager.getConnection(url, user, password);
			//创建statment与数据库打交道 一定需要这个对象
			st=(Statement) conn.createStatement();
			//执行查询
			rs=st.executeQuery(sql);
			while(rs.next()) {
				String name=rs.getString("name");
				String sex=rs.getString("sex");
				System.out.println("姓名:"+name+"性别:"+sex);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			JDBCutil.release(rs, st, conn);
		}

	}

}

释放资源我们新建一个page 一个JDBCutil class:

package com.jdbc.util;

import java.io.Closeable;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.mysql.jdbc.Statement;

public class JDBCutil {
	
	public static void release(ResultSet rs, Statement st,Connection conn) {
		CloseRs(rs);
		CloseRs(st);
		CloseConn(conn);
		
	}

	private static void CloseConn(Connection conn) {
		// TODO Auto-generated method stub
		if (conn!=null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				conn=null;
			}
			
		}
	}

	private static void CloseRs(Statement st) {
		// TODO Auto-generated method stub
		if (st!=null) {
			try {
				st.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				st=null;
			}
		}
	}

	private static void CloseRs(ResultSet rs) {
		// TODO Auto-generated method stub
		if (rs!=null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				rs=null;
			}
		}
		
	}

}

为了防止驱动二次注册我们把注册驱动改为:

//注册驱动
			Class.forName("com.mysql.jdbc.Driver()");
			//静态代码块--》类加载就执行
			//DriverManager.registerDriver(new com.mysql.jdbc.Driver());

完整代码:

package com.jdbc.test;

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

import com.jdbc.util.JDBCutil;
import com.mysql.jdbc.Driver;
import com.mysql.jdbc.Statement;

public class MianTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub	
		String user="root";
		String password="123456";
		String url="jdbc:mysql://localhost/users?useUnicode=true&characterEncoding=utf8";
		String sql="select * from peopel";
		Connection conn=null;
		Statement st=null;
		ResultSet rs=null;
		try {
			//注册驱动
			Class.forName("com.mysql.jdbc.Driver()");
			//静态代码块--》类加载就执行
			//DriverManager.registerDriver(new com.mysql.jdbc.Driver());
			//建立连接
			conn=DriverManager.getConnection(url, user, password);
			//创建statment与数据库打交道 一定需要这个对象
			st=(Statement) conn.createStatement();
			//执行查询
			rs=st.executeQuery(sql);
			while(rs.next()) {
				String name=rs.getString("name");
				String sex=rs.getString("sex");
				System.out.println("姓名:"+name+"性别:"+sex);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			JDBCutil.release(rs, st, conn);
		}

	}

}

在继续把JDBCutil作为一个专业的工具类 所有我们把他放到方法里面去调用:

package com.jdbc.util;

import java.io.Closeable;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.mysql.jdbc.Statement;

public class JDBCutil {
	static String user="root";
	static String password="123456";
	static String url="jdbc:mysql://localhost/users?useUnicode=true&characterEncoding=utf8";
	
	public static  Connection getConn() {
		Connection conn=null;
		try {
			//注册驱动
			Class.forName("com.mysql.jdbc.Driver");
			//静态代码块--》类加载就执行
			//DriverManager.registerDriver(new com.mysql.jdbc.Driver());
			//建立连接
			conn=DriverManager.getConnection(url, user, password);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return conn;
	}
	
	
	
	/*释放资源*/
	public static void release(ResultSet rs, Statement st,Connection conn) {
		CloseRs(rs);
		CloseRs(st);
		CloseConn(conn);
		
	}

	private static void CloseConn(Connection conn) {
		// TODO Auto-generated method stub
		if (conn!=null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				conn=null;
			}
			
		}
	}

	private static void CloseRs(Statement st) {
		// TODO Auto-generated method stub
		if (st!=null) {
			try {
				st.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				st=null;
			}
		}
	}

	private static void CloseRs(ResultSet rs) {
		// TODO Auto-generated method stub
		if (rs!=null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				rs=null;
			}
		}
		
	}

}

package com.jdbc.test;

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

import com.jdbc.util.JDBCutil;
import com.mysql.jdbc.Driver;
import com.mysql.jdbc.Statement;

public class MianTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub	
		String sql="select * from peopel";
		Connection conn=null;
		Statement st=null;
		ResultSet rs=null;
		try {
			conn=JDBCutil.getConn();
			//创建statment与数据库打交道 一定需要这个对象
			st=(Statement) conn.createStatement();
			//执行查询
			rs=st.executeQuery(sql);
			while(rs.next()) {
				String name=rs.getString("name");
				String sex=rs.getString("sex");
				System.out.println("姓名:"+name+"性别:"+sex);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			JDBCutil.release(rs, st, conn);
		}

	}

}

实际上我们应该从配置文件里面读取数据库连接地址等:
创建file-文本取名jdbc.properties
(注意这个文件会根据你写代码的不同所放置的位置不同,这里我把它放在src路径下面 InputStream is=JDBCutil.class.getClassLoader().getResourceAsStream("jdbc.properties");
获取当前类的jdbc.properties)

driverClass=com.mysql.jdbc.Driver
user=root
password=123456
url=jdbc:mysql://localhost/users?useUnicode=true&characterEncoding=utf8

完整代码如下:

package com.jdbc.util;

import java.io.Closeable;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import com.mysql.jdbc.Statement;

public class JDBCutil {
	
	
	static String name=null;
	static String password=null;
	static String url=null;
	static String driverClass=null;
	static {
		try {
			//创建一个属性配置对象
		Properties properties=new Properties();
		//InputStream is=new FileInputStream("jdbc.properties");
	
		InputStream is=JDBCutil.class.getClassLoader().getResourceAsStream("jdbc.properties");
		
		//导入输入流
			properties.load(is);
			//读取属性
			driverClass=properties.getProperty("driverClass");
			name=properties.getProperty("name");
			url=properties.getProperty("url");
			password=properties.getProperty("password");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public static  Connection getConn() {
		Connection conn=null;
		try {
			//注册驱动
			Class.forName(driverClass);
			//静态代码块--》类加载就执行
			//DriverManager.registerDriver(new com.mysql.jdbc.Driver());
			//建立连接
			conn=DriverManager.getConnection(url, name, password);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return conn;
	}
	
	
	
	/*释放资源*/
	public static void release(ResultSet rs, Statement st,Connection conn) {
		CloseRs(rs);
		CloseRs(st);
		CloseConn(conn);
		
	}

	private static void CloseConn(Connection conn) {
		// TODO Auto-generated method stub
		if (conn!=null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				conn=null;
			}
			
		}
	}

	private static void CloseRs(Statement st) {
		// TODO Auto-generated method stub
		if (st!=null) {
			try {
				st.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				st=null;
			}
		}
	}

	private static void CloseRs(ResultSet rs) {
		// TODO Auto-generated method stub
		if (rs!=null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				rs=null;
			}
		}
		
	}

}

package com.jdbc.test;

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

import com.jdbc.util.JDBCutil;
import com.mysql.jdbc.Driver;
import com.mysql.jdbc.Statement;

public class MianTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub	
		String sql="select * from peopel";
		Connection conn=null;
		Statement st=null;
		ResultSet rs=null;
		try {
			conn=JDBCutil.getConn();
			//创建statment与数据库打交道 一定需要这个对象
			st=(Statement) conn.createStatement();
			//执行查询
			rs=st.executeQuery(sql);
			while(rs.next()) {
				String name=rs.getString("name");
				String sex=rs.getString("sex");
				System.out.println("姓名:"+name+"性别:"+sex);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			JDBCutil.release(rs, st, conn);
		}

	}

}

整个工程类写完成,但是这里其实还是有一个小细节就是jdbc中如果读下他的源代码 会发现有一条是说在jdbc4.0后 其实可以注释掉注册驱动 我们可以:

// Class.forName(driverClass);
感兴趣的可以动手试下 文档里面说好像在connection其实已经自动注册了
这样注释掉也可以运行,并且获取数据库的值也没有错。

剩下回顾数据库的增删该查:

*insert
"INSERT INTO peopel VALUES(10,'wangwu',18,'男','2018-12-5',151515,253)"
*delete
"delete from peopel where name='zhangsan'";
*query
"select * from peopel"
*update
"update peopel set age=26 where name='waner'";

Junit单元测试
以jdbc作为例子
先建立一个类 一般类名以test开头+你要测试的方法,这里测试查询方法再把mian里面的方法copy过来结果如下图:
在这里插入图片描述

在作添加:鼠标右键->build path->configure build path->libraies->add library->Junit ok!
在这里插入图片描述
右键run as 可以看见一个Junit 选中运行 会出现一下两种结果:
代码没问题结果不知道:
在这里插入图片描述
或者直接报错:

这里是引用

改过来 运行没错输出结果:
在这里插入图片描述
**注意:加上@Test **

详细代码如下:

package com.jdbc.test;

import java.sql.Connection;
import java.sql.ResultSet;

import org.junit.Test;

import com.jdbc.util.JDBCutil;
import com.mysql.jdbc.Statement;

public class TestDemo {
//	
//	使用junit执行单元测试
//	
	@Test
	public void testQuery() {
		String sql="select * from peopel";
		Connection conn=null;
		Statement st=null;
		ResultSet rs=null;
		try {
		
			conn=JDBCutil.getConn();
			//创建statment与数据库打交道 一定需要这个对象
			st=(Statement) conn.createStatement();
			//执行查询
			rs=st.executeQuery(sql);
			while(rs.next()) {
				String name=rs.getString("name");
				String sex=rs.getString("sex");
				System.out.println("姓名:"+name+"性别:"+sex);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			JDBCutil.release(rs, st, conn);
		}

	}

	}



接下来把增删改查都去实现他:
代码如下

package com.jdbc.test;

import java.sql.Connection;
import java.sql.ResultSet;

import org.junit.Test;

import com.jdbc.util.JDBCutil;
import com.mysql.jdbc.Statement;

public class TestDemo {
//	
//	使用junit执行单元测试
//	
	@Test
	//SQL查询
	public void testQuery() {
		String sql="select * from peopel";
		Connection conn=null;
		Statement st=null;
		ResultSet rs=null;
		try {
		
			conn=JDBCutil.getConn();
			//创建statment与数据库打交道 一定需要这个对象
			st=(Statement) conn.createStatement();
			//执行查询
			rs=st.executeQuery(sql);
			while(rs.next()) {
				String name=rs.getString("name");
				String sex=rs.getString("sex");
				System.out.println("姓名:"+name+"性别:"+sex);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			JDBCutil.release(rs, st, conn);
		}
	}
	
		@Test
		//SQL增加
		public void testIsert() {
			String sql="INSERT INTO peopel VALUES(10,'wangwu',18,'男','2018-12-5',151515,253)";
			Connection conn=null;
			Statement st=null;
			try {
			
				conn=JDBCutil.getConn();
				//创建statment与数据库打交道 一定需要这个对象
				st=(Statement) conn.createStatement();
				//执行查询
			int  resultset =st.executeUpdate(sql);
			if (resultset>0) {
				System.out.println("添加成功");
				
			}
			if (resultset<0) {
				System.out.println("添加失败");
				
			}
			
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				JDBCutil.release(  st, conn);
			}
		}
		//SQL修改
		@Test
		public void testUpdate() {
			String sql="update peopel set age=26 where name='waner'";
			Connection conn=null;
			Statement st=null;
			try {
			
				conn=JDBCutil.getConn();
				//创建statment与数据库打交道 一定需要这个对象
				st=(Statement) conn.createStatement();
				//执行查询
			int  resultset =st.executeUpdate(sql);
			if (resultset>0) {
				System.out.println("更新成功");
				
			}
			if (resultset<0) {
				System.out.println("更新失败");
				
			}
			
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				JDBCutil.release(  st, conn);
			}
		}
		//SQL删除
				@Test
				public void testDelete() {
					String sql="delete from peopel where name='zhangsan'";
					Connection conn=null;
					Statement st=null;
					try {
					
						conn=JDBCutil.getConn();
						//创建statment与数据库打交道 一定需要这个对象
						st=(Statement) conn.createStatement();
						//执行查询
					int  resultset =st.executeUpdate(sql);
					if (resultset>0) {
						System.out.println("删除成功");
						
					}
					if (resultset<0) {
						System.out.println("删除失败");
						
					}
					
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}finally {
						JDBCutil.release(  st, conn);
					}
				}
	}



各个方法可在eclipse中单个测试:
在这里插入图片描述
总体流程图 第一张画得不像:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(附三张图片供理解)

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值