利用mysql的预编译机制_jdbc预编译实现方式

jdbc预编译能够有两种方式:mysql

方式1、jdbc本身实现的预编译,就是作一下特殊字符处理来防SQL注入,看PreparedStatement源码就能够了。web

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发过去的。

fcebde2a02a4c374fdfc2ec4476d893d.png

方式2、利用MySQL的预编译,。sql

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截图。能够看下实际上参数是用的占位符?。

c78118cce050e8137694779cc2b0862f.png

mybatis这种框架也是同样。关键看你的jdbc url怎么配置的,和框架不要紧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值