http://blog.csdn.net/qq_27040173/article/details/51228264
package com.wuye.sql;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
/* 方法一:预编译的 ***三个blog在手机标签里面***
*
* PreparedStatement pre=conn.prepareStement("sql");
*
* ResultSet rs=pre.executeQuery();
*
*方法二:非预编译的
*
* Statement ste=conn.Statement();
*
* ResultSet rs1=ste.executeQuery("sql");
*
*
* preparedStement 有预编译的过程 绑定了sql 之后无论执行多少次
*
* 都不会出现编译
*
* statement 如果执行多次那么就会编译多遍的sql
*
* 1 前者的效率更高
* 而且数据库的版本越高 数据库对pre的支持就越好
*
* 2 安全性 预编译的可以放在sql注入
*
* 3 代码的可读性和维护性更好
* sql语句一个放在创建时候 一个放在执行时候
*
* 4 pre尽最大可能去提高性能
*
* 语句被db的编译器编译后的执行代码就会被缓存下来 那么下次调用时
*
* 只要相同的预编译语句就不需要编译 只要将参数直接传入编译过的语句执行
*
* 就可以 相当于一个函数 。 对于整个db来说 只有预编译的而语句语法 和缓存中匹配
*
* 那么任何时候 就可以不需要再次编译直接执行
*
* 并不是所有的预编译语句都会被缓存起来 数据库本身会用一种策略
*
* 频繁使用的语句可能被缓存起来 以保存有更多的空间存储新的预编译语句
*
* 5 安全性 例如sql: "select * from student where name="+"传进来的 可以存在恶意注入"+";
*
* 传入的参数肯会是 :"drop table stu"
*
* 有些数据库可以让你成功 有些很多数据库可以使你的语句执行
*
* ***如果你使用的是 预编译 那么你传入的内容不会和原来语句发关系
*
* 如果你是要的statement那么你就糟糕了
*
*
*
* 更深刻一些:源代码
*
* a.preparementStament 接口继承statement 其包含已编译的sql
*
* 执行速度更快
*
* b.pre继承 三个方法 execute executeQuery executeUpdate
**/
public class SqlStatement {
public void query(){
Connection conn=null;
//把驱动加载到内存里面
//还可以 com.mysql,jdbc.Dirver
try {
Class.forName("org.gjt.mm.mysql.Driver");
//驱动器生成连接对象
conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/exam?useUnicode=true&characterEncoding=utf-8", "root", "root");
//方法一:预编译的
PreparedStatement pste=conn.prepareStatement("select * from student");
ResultSet rs=pste.executeQuery();
while(rs.next()){
System.out.println(rs.getString(2)+"-"+rs.getString(1)+"-"+rs.getString(3));
}
System.out.println("------------");
//方法二:非预编译的
Statement ste=conn.createStatement();
ResultSet rs1 = ste.executeQuery("select * from student");
while(rs1.next()){
System.out.println(rs1.getString(2)+"-"+rs1.getString(1)+"-"+rs1.getString(3));
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String [] args){
new SqlStatement().query();
}
}