阿里druid连接池,Spring框架简单JDBC模块,JDBC自定义工具类,preparedStatement,JdbcTemplate以及其对象一系列sql语句执行方法

本文介绍了为何PreparedStatement替代Statement以解决SQL注入问题,并展示了基础的JDBC操作,接着引入了Druid连接池和Spring的JdbcTemplate,提供了使用这些工具的代码示例,强调了它们在提升效率和安全性方面的作用。
摘要由CSDN通过智能技术生成

(本文代码实现共需导入mysqlJDBC jar包,阿里巴巴druid jar包,Spring框架jar包,junit-4.12.jar包,hamcrest-core-1.3.jar包文末可下载(待审核后))

首先说下Statement被它的儿子Preparedstatement取代的原因:

            即sql注入问题,如:

Statement所需的sql语句:

            例:

String sql = "select * from user where username = '"+username+"' and password = '"+password+"' ";

             问题存在:因St的sql语句中要传的参数是使用字符串拼接而成,若上式是登录操作,用户可以不论数据库中的数据,通过在password中构造恒等式例如: 142018728 or 1 = 1 来使得整个sql语句变为恒等式,或者直接在username结尾添加 -- 或# 来达到注释后面所有语句来实现只要 username 在数据库中存在即可登录;

 

Preparesdstatement则很好的解决了这个问题,不但运行效率提升,最重要的是解决了sql注入问题 如下例:
           

            //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.执行查询,不需要传递sql
            rs = pstmt.executeQuery();

所有statement存在的问题全部被它儿子preparestatement解决了;


此为最最最基础的JDBC,没写工具类且没使用连接池的代码实现:

import java.sql.*;

/**
 * account表 添加一条记录 insert 语句
 */
public class JDBCDemo2 {
    public static void main(String[
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值