JDBC再学习

本文详细介绍了JDBC中Statement与PreparedStatement接口的区别,重点讲解PreparedStatement如何提高代码可读性、执行效率及安全性,并对比了参数化查询与字符串拼接方式的不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JDBC再学习

1关于statement 接口提供了大致三类 执行sql语句的方法
execute
executeUpdate
executeQuery

具体使用那个方法 由产生的内容来指定

比如Select 语句 差生的是结果集,需要数据库返回数据 那么用Resultset executeQuery(sql);
比如insert delete update 只是影响数据库的内容 ,返回数据库改变的记录数 就可以 ,int executeUpdate(sql);
execute可以执行任何sql语句 返回值是boolean代表是否返回结果集

2、PreparedStatement 接口继承了statement

在编程中 Connection接口规定了创建具体向数据库发送sql语句的对象 即是statement 、PreparedStatement还是callableStatement

    conn.createStatement()
    conn.prepareStatement()
    conn.prepareCall()

我们用的比较多的是 PreparedStatement .相比于statement 理由如下
1、代码易于理解
我们一般的sql语句都是带有参数的 preparedStatement 可以像如下设置参数

    PreparedStatement pstm  = conn.prepareStatement("insert into t_sm (p1,p2,p3...) values(?,?,?,...)");
    pstm.setXxx(1,value);
    pstm.setXxx(2,value);
    pstm.executeUpdate();

2、代码预编译性能高
当你创建PreparedStatemet对象的时候DB编译一次后数据库会有缓存,每次执行相似的sql语句时候即只有参数不同,速度很快。(登录操作)
3、安全性高组织sql注入
比如你通过statement这样写登录语句

    Statement stmt = conn.createStatement();
    String sql = "select * from t_user where u_name ='" +varName+"'"+" and u_passwd ="+"'"+ varPasswd+"'";
    stmt.executeQuery(sql);
这时候传入参数 varName ="anyone" varPasswd="' or '1'='1" 这样就完成了sql注入攻击。


而preparedStatement 是参数化查询 安全
# $符号的区别 在mybatis中。
Mybatis 本身是基于jdbc封装的
#{para}是预编译处理的范畴
${para} 是字符串替换。mybatis在处理#时会调用PreparedStatement 的setXxx方法来实现参数赋值,而处理$时,就是把${param}替换为变量的值,
这样做不安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值