JDBC更新+数据库连接池--详解--初学者必看


上一篇文章给大家写了jdbc的基本的知识。本章会进行详细讲解JDBC的使用。

JDBC的使用增删改查操作

JDBC工具类的封装

下面展示一些 内联代码片

package cn.tedu.util;
/**
* @author  作者: bjzhangjian
* @version 创建时间:2020年5月7日 上午10:14:03
* @description 描述:jdbc的工具类
*/

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

public class JDBCUtil {
	
	/**
	 * 数据库的连接
	 */
	public static Connection getConnection() {
		//1、注册数据库的驱动
		try {
			Class.forName("com.mysql.jdbc.Driver");
			//2、获取数据库的连接
			String url = "jdbc:mysql:///dd_db?characterEncoding=utf-8";
			String user = "root";//用户名和密码是你数据库连接的时候的用户名和密码
			String password = "root";
			Connection connection = DriverManager.getConnection(url, user, password);
			return connection;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 释放资源
	 * @param connection 连接对象
	 * @param st 传输器对象
	 * @param rs 结果集对象
	 */
	public static void close(Connection connection, Statement st, ResultSet rs) {
		//6、释放资源
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				rs = null;
			}
		}
		if (st != null) {
			try {
				st.close();
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				st = null;
			}
		}
		if (connection != null) {
			try {
				connection.close();
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				connection = null;
			}
		}
	}
}

JDBC实现新增数据-插入-insert

需求:
新增一条数据:郭泽平 qwer123 qwer123@163.com 13100006666

@Test
	public void testInsert() {
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;
		try {
			//获取数据库的连接
			conn = JDBCUtil.getConnection();
			//获取传输器对象
			st = conn.createStatement();
			//时间的转化
//			Date date = new Date();
			int rows = st.executeUpdate("insert into user values(null,'郭泽平','qwer123','2020-5-7 10:34:00','qwer123@163.com','13100006666')");
			//
			System.out.println("受影响的行数:" + rows);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCUtil.close(conn, st, rs);
		}
	}

JDBC实现修改数据-更新–update

@Test
	public void testUpdate() {
		
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;
		try {
			//获取数据库的连接
			conn = JDBCUtil.getConnection();
			//获取传输器对象
			st = conn.createStatement();
			int rows = st.executeUpdate("update user set password='asd123' where username='张老师';");
			//
			System.out.println("受影响的行数:" + rows);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			JDBCUtil.close(conn, st, rs);
		}
		
	}

JDBC实现删除数据-删除—delete

参考以上代码,可以进行SQL语句修改即可。

JDBC实现查询数据-查询—select

参考以上代码,可以进行SQL语句修改即可。

select *from user where username='苍老师';

案例:实现用户登录

  • 需求分析:
    1、提示用户名和密码的输入
    2、根据输入的用户名和密码,去到数据库中访问并且进行匹配,查询出指定用户名和密码是否正确
    3、如果数据库中能够查询到用户,并且密码也是正确的,那就可以进行登录
    4、否则,登录失败。

代码实现:

public class LoginUser {
	
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入用户名:");
		String username = sc.nextLine();
		System.out.println("请输入密码:");
		String password = sc.nextLine();
		
		//模拟用户登录
		login(username, password);
		
		sc.close();
	}

	/**模拟用户进行登录的实现逻辑-----11:05*/
	private static void login(String username, String password) {
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;
		try {
			//获取数据库的连接
			conn = JDBCUtil.getConnection();
			//获取传输器对象
			st = conn.createStatement();

			rs = st.executeQuery("select * from user where username = '" + username + "' and password = '" + password + "'");
			if (rs.next()) {
				System.out.println("用户登录success");
			}else {
				System.out.println("登录失败。用户名或者密码错误。");
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCUtil.close(conn, st, rs);
		}
	}
	

运行结果:

在这里插入图片描述
在这里插入图片描述
但是注意会出现问题:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
原因:产生了SQL注入攻击。

案例:登录更新----防止SQL注入攻击

  • 产生的原因:后台在执行的时候,SQL语句是进行拼接的。

用户名和密码-----用户提交的数据

  • SQL关键字:or and # – 等

  • 1、可以使用正则表达式进行校验参数

  • 2、使用PreparedStatement对象替换Statement

先把SQL骨架发送给服务器。

只要SQL一旦被编译,确定下来。

修改上面案例

/**模拟用户进行登录的实现逻辑----*/
	private static void login(String username, String password) {
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			//获取数据库的连接
			conn = JDBCUtil.getConnection();
			//获取传输器对象
			String sql = "select * from user where username=? and password=?";
			ps = conn.prepareStatement(sql);
			//设置参数:
			ps.setString(1, username);
			ps.setString(2, password);
			
			rs = ps.executeQuery();//注意:不要传SQL
			
			if (rs.next()) {
				System.out.println("用户登录success");
			}else {
				System.out.println("登录失败。用户名或者密码错误。");
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCUtil.close(conn, ps, rs);
		}
	}
	

运行结果分析:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据库连接池—C3P0

直接上操作:

有不懂的地方可以留言哈,给解决。
在这里插入图片描述
新建文件:根目录src下即可。
在这里插入图片描述

在这里插入图片描述
导入C3P0的jar包

/**模拟用户进行登录的实现逻辑-----11:05*/
	private static void login(String username, String password) {
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;
		
		//连接池对象
		ComboPooledDataSource pool = new ComboPooledDataSource();
		
		try {
			//获取数据库的连接
			//conn = JDBCUtil.getConnection();
			conn = pool.getConnection();
			//获取传输器对象
			st = conn.createStatement();

			rs = st.executeQuery("select * from user where username = '" + username + "' and password = '" + password + "'");
			if (rs.next()) {
				System.out.println("用户登录success");
			}else {
				System.out.println("登录失败。用户名或者密码错误。");
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCUtil.close(conn, st, rs);
		}
	}
	

测试结果:

在这里插入图片描述
完美运行。

感谢查看。更多的请关注,谢谢。后续继续更新。

老铁,关注一波666

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

A 小码农

欢迎各位老铁打赏

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

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

打赏作者

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

抵扣说明:

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

余额充值