jdbc预编译实现方式
jdbc预编译可以有两种方式:
方式一、jdbc自己实现的预编译,就是做一下特殊字符处理来防SQL注入,看PreparedStatement源码就可以了。
public static void main(String[] args) { try { final String driverClassName = "com.mysql.jdbc.Driver";
final String url = "jdbc:mysql://10.6.9.14:3306/SBLOG"; 重点看这里
final String username = "sdl";
final String password = "sdl"; Connection connection = DriverManager.getConnection(url2, username, password); String sql = " SELECT *\n" +
" FROM t_web\n" +
" WHERE id = ? and name like ?"; Class.forName(driverClassName); PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, 1); preparedStatement.setString(2, "%ing%"); ResultSet rst = preparedStatement.executeQuery(); rst.next(); System.out.println(rst.getString(2));
} catch (Exception e) {
e.printStackTrace();
} } 这里是调用MySQL时的wireshark截图。可以看下实际上就是拼接完成的SQL发过去的。
方式二、利用MySQL的预编译,。
public static void main(String[] args) { try { final String driverClassName = "com.mysql.jdbc.Driver";
final String url2 = "jdbc:mysql://10.6.8.4:3306/SBLOG?useServerPrepStmts=true"; 重点看这里增加了useServerPrepStmts=true
final String username = "sdl";
final String password = "sdl"; Connection connection = DriverManager.getConnection(url2, username, password); String sql = " SELECT *\n" +
" FROM t_web\n" +
" WHERE id = ? and name like ?"; Class.forName(driverClassName); PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, 1); preparedStatement.setString(2, "%ing%"); ResultSet rst = preparedStatement.executeQuery(); rst.next(); System.out.println(rst.getString(2));
} catch (Exception e) {
e.printStackTrace();
} }
这里是调用MySQL时的wireshark截图。可以看下实际上参数是用的占位符?。
mybatis这种框架也是一样。关键看你的jdbc url怎么配置的,和框架没关系。
jdbc预编译实现方式的更多相关文章
- jdbc预编译插入数据操作
package com.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepare ...
- JDBC预编译语句表名占位异常
有时候,我们有这样的需求,需要清空多个表的内容,这样我们有两种做法,可用delete from table 或 truncate table table,两种方法视情况而定,前者只是一条条的删除表数据 ...
- jdbc预编译
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp20 JAVA_JDBC预编译 相关知识点 什么是预编译语句? 预编译语句P ...
- JDBC预编译statement(preparedstatement)和statement的比较、execute与executeUpdate的区别
和 Statement一样,PreparedStatement也是用来执行sql语句的与创建Statement不同的是,需要根据sql语句创建PreparedStatement除此之外,还能够通过设置 ...
- JDBC 预编译语句对象
Statement的安全问题:Statement的执行其实是直接拼接SQL语句,看成一个整体,然后再一起执行的. String sql = "xxx"; // ? 预先对SQL语句 ...
- JDBC 操作预编译语句中LIKE模糊匹配怎么用
问题描述 在使用JDBC 预编译执行语句时,遇到一个问题,那就是在含有LIKE的查询语句时,我到底怎么使用匹配符%._呢. 如: SELECT * FROM "+LQ_USERS+" ...
- mybatis深入理解之 # 与 $ 区别以及 sql 预编译
mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name = ...
- mybatis之 # 与 $ 区别以及 sql 预编译
mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name = ...
- Mybatis动态传入tableName--非预编译(STATEMENT)
在使用Mybatis过程中,你可以体会到它的强大与灵活之处,由衷的为Mybatis之父点上999个赞!在使用过程中经常会遇到这样一种情况,我查询数据的时候,表名称是动态的从程序中传入的,比如我们通过m ...
随机推荐
- CF891B Gluttony
原题链接 DOWNLOAD AS PDF 题目大意 给你一个有\(n\)个元素的数组\(a\),让你构造一个数组\(b\),满足从 \(a\).\(b\)中任选出\(k\)个下标对应的元素,它们的和不 ...
- 源码解读:webdriver client的原理
前言 又到年底了,群里很多朋友说要开始备战2020金三银四,其实,我建议是,如果你不是技术大牛,就不要去凑热闹. 其实,现在(11,12月份)就是最佳换工作的时候,因为很多人想等着拿了年终再走,虽然招 ...
- LeetCode 611. Valid Triangle Number有效三角形的个数 (C++)
题目: Given an array consists of non-negative integers, your task is to count the number of triplets c ...
- NOIP 2016 回文日期
洛谷P2010 https://www.luogu.org/problemnew/show/P2010 JDOJ 3313 https://neooj.com:8082/oldoj/problem.p ...
- Taro/微信小程序解析XML
npm i xmldom PS: https://www.npmjs.com/package/xmldom https://blog.csdn.net/caojie1008/article/detai ...
- 1-开发共享版APP(搭建指南)-快速搭建到自己的服务器
该APP安装包下载链接: http://www.mnif.cn/appapk/IotDevelopmentVersion/20190820/app-debug.apk 或者扫描二维码下载 注:该下载可 ...
- 使用Intellij idea新建Java Web项目(servlet) 原理及初步使用
准备 JDK (配置JDK_HOME\bin 和 CLASSPATH) 注:JDK8下载已经需要注册了,请使用JDK11(现在是官方长期支持的版本) 对于我们新手来说,JD ...
- CodeChef MAXDTREE(DP套DP)
题意 链接:https://www.codechef.com/problems/MAXDTREE 给定一个 \(n\) 个节点的树,其中 \(1\) 为根节点,每个点有点权,我们定义" ...
- 程序员Y先生投保案例分享
大家好,我是闲鱼君.我在2018年底搞了个副业,做了保险经纪人.保险经纪人是为用户服务的第三方机构,找经纪人买保险省钱.省力.保险一次就买对,而且还能提供后续理赔服务,具体可以看我的文章<201 ...
- SpringBoot集成Spring Security(3)——异常处理
源码地址:https://github.com/jitwxs/blog_sample 文章目录 一.常见异常二.源码分析三.处理异常不知道你有没有注意到,当我们登陆失败时候,Spring securi ...