JDBC定义: JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API.JDBC是Java访问数据库的标准规范,可以为不同的关系型数据库提供统一访问,它由一组用Java语言编写的接口和类组成. JDBC规范(掌握四个核心对象): DriverManager类:用于注册驱动(管理控制驱动程序) Connection: 表示与数据库创建的连接 Statement: 操作数据库sql语句的对象 ResultSet: 结果集或一张虚…
回顾下之前jdbc的开发步骤: 1:建项目,引入数据库驱动包 2:加载驱动 Class.forName(..); 3:获取连接对象 4:创建执行sql语句的stmt对象;  写sql 5:执行sql a) 更新    delete/insert/update !:executeUpdate(); b) 查询    select !:executeQuery(); 6:关闭/异常 之前有说过,Statement接口和PreparedStatement接口的区别,其中的一个就是: PreparedS…
为什么在Java中PreparedStatement能够有效防止SQL注入?这可能是每个Java程序员思考过的问题. 首先我们来看下直观的现象(注:需要提前打开mysql的SQL文日志) 1. 不使用PreparedStatement的set方法设置参数(效果跟Statement相似,相当于执行静态SQL) String param = "'test' or 1=1"; String sql = "select file from file where name = &quo…
1. SQL语句的执行过程——Statement直接执行的弊病: 1) SQL语句和编程语言一样,仅仅就会普通的文本字符串,首先数据库引擎无法识别这种文本字符串,而底层的CPU更不理解这些文本字符串(只懂二进制机器指令),因此SQL语句在执行之前肯定需要编译的: 2) SQL语句的执行过程:提交SQL语句 -> 数据库引擎对SQL语句进行编译得到数据库可执行的代码 -> 执行SQL代码: 3) 现在再来看Statement的执行机制: i. Statement的execute系列方法直接将SQ…
https://blog.csdn.net/u014453898/article/details/79038187 1.Statement 和 PreparedStatement: Statement接口只能操作静态SQL语句(即SQL语句中操作的数据表,变量等等都是固定的,不能变化的).而PreparedStatement接口则可以动态操作SQL语句(即SQL语句中的变量的值是可以变化的). 2.问号"?" 问好的作用:在一个SQL语句中,把需要变化的部分用"?"…
先感慨下,好久没写博客了,一是工作太忙,二是身体不太给力,好在终于查清病因了,趁着今天闲下来,迫不及待与读者交流,最后忠告一句:身体是活着的本钱! 言归正传,对java有了解的同学基本上都体验过JDBC,基本都了解PreparedStatement,PreparedStatement相比Statement基本解决了SQL注入问题,而且效率也有一定提升. 关于PreparedStatement和Statement其他细节我们不讨论,只关心注入问题.无论读者是老鸟还是菜鸟,都需要问一下自己,Prep…
SQL注入最简单也是最常见的例子就是用户登陆这一模块,如果用户对SQL有一定的了解,同时系统并没有做防止SQL注入处理,用户可以在输入的时候加上'两个冒号作为特殊字符,这样的话会让计算机认为他输入的是SQL语句的关键字从而改变你的SQL语句,造成不可估量的损失. 在JDBC中通常会使用PreparedStatement来代替Statement来处理sql语句,如 String sql = "select * from t_user where password = ?"; pt = c…
有大神总结的很好,,参考文献 http://www.importnew.com/5006.html preparedstatement优势:sql的预编译(数据库层面完成)提升效率. 为什么可以防止sql注入:总的来说就是占位符替换,也由此引发了in查询的占位问题, 所以面试的时候比人问你为什么,可以说出in查询的问题,别人应该能够够懂你为什么可以防止sql注入, 解决in查询,参考博客 https://blog.csdn.net/LIsmooth/article/details/7693498…
//直接打印PreparedStatement对象 System.out.println(ps); 输出结果: com.mysql.jdbc.JDBC42PreparedStatement@5f205aa: select * from student where name like '%moyifeng%' order by id limit 0,20…
为什么要使用PreparedStatement? 一.通过PreparedStatement提升性能 Statement主要用于执行静态SQL语句,即内容固定不变的SQL语句.Statement每执行一次都要对传入的SQL语句编译一次,效率较差.     某些情况下,SQL语句只是其中的参数有所不同,其余子句完全相同,适用于PreparedStatement.PreparedStatement的另外一个好处就是预防sql注入攻击     PreparedStatement是接口,继承自State…