PreparedStatement JDBC控制事物 数据库连接池 Spring JDBC

这篇博客探讨了如何使用PreparedStatement解决SQL注入问题,并详细介绍了JDBC控制事务的步骤。内容包括PreparedStatement的预编译SQL特性,以及如何设置参数。接着,博客提到了数据库连接池的重要性,如C3P0和Druid的配置与使用。最后,文章讨论了Spring JDBC在处理数据库操作和事务管理方面的应用,给出了多个示例操作,如修改、添加、删除和查询记录。
摘要由CSDN通过智能技术生成

练习:
* 需求:
1. 通过键盘录入用户名和密码
2. 判断用户是否登录成功

例:

import cn.itcast.util.JDBCUtils;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

/**
 * 练习:
 * 		* 需求:
 * 			1. 通过键盘录入用户名和密码
 * 			2. 判断用户是否登录成功
 */

public class JDBCDemo9 {
   

    public static void main(String[] args) {
   
        //1 键盘输入,接收用户名和密码
        Scanner sc = new Scanner(System.in);
        System.out.println("请登录");
        String username = sc.nextLine();
        System.out.println("请输入密码");
        String password = sc.nextLine();

        //2 调用方法
        boolean flag = new JDBCDemo9().login(username, password);

        //3 判断结果, 输出不同的语句
        if(flag = true){
   
            System.out.println("成功");
        }else {
   
            System.out.println("失败");
        }
    }

        //登录方法
    public boolean login(String username, String password) {
   
        if (username == null || password == null) {
   
        }
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        //1 获取连接
        try {
   
            conn = JDBCUtils.getConnection();
            //2 定义sql
            String sql = "select * from user where username = '" + username + "' and password = '" + password + "' ";
            //3 获取执行sql对象
            stmt = conn.createStatement();
            //4 执行查询
            rs = stmt.executeQuery(sql);
            //5 判断
            return rs.next(); //如果有下一行返回true
        } catch (SQLException e) {
   
            e.printStackTrace();
        } finally {
   
            //6 关闭资源
            JDBCUtils.close(rs, stmt, conn);
        }
            return false;
    }


}

PreparedStatement:执行sql的对象
1. SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题
1. 输入用户随便,输入密码:a’ or ‘a’ = 'a
2. sql:select * from user where username = ‘fhdsjkf’ and password = ‘a’ or ‘a’ = ‘a’

  1. 解决sql注入问题:使用PreparedStatement对象来解决
    3. 预编译的SQL:参数使用?作为占位符
    4. 步骤:
    1. 导入驱动jar包 mysql-connector-java-5.1.37-bin.jar
    2. 注册驱动
    3. 获取数据库连接对象 Connection
    4. 定义sql
    * 注意:sql的参数使用?作为占位符。 如:select * from user where username = ? and password = ?;
    5. 获取执行sql语句的对象 PreparedStatement Connection.prepareStatement(String sql)
    6. 给?赋值:
    * 方法: setXxx(参数1,参数2)
    * 参数1:?的位置编号 从1 开始
    * 参数2:?的值
    7. 执行sql,接受返回结果,不需要传递sql语句
    8. 处理结果
    9. 释放资源

     	5. 注意:后期都会使用PreparedStatement来完成增删改查的所有操作
     		1. 可以防止SQL注入
     		2. 效率更高
    

例:

 //登录方法
    public boolean login2(String username, String password) {
   
        if (username == null || password == null) {
   
            return false;
        }
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        //1 获取连接
        try {
   
            conn = JDBCUtils.getConnection();
            //2 定义sql
            String sql = "select * from user where username = ? and password = ? ";
            //3 获取执行sql对象
            pstmt = conn.prepareStatement(sql);
            // 给?赋值
            pstmt.setString(1,username);
            pstmt.setString(2,password);
            //4 执行查询
            rs = pstmt.executeQuery();
            //5 判断
            return rs.next(); //如果有下一行返回true
        } catch (SQLException e) {
   
            e.printStackTrace();
        } finally 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值