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();


}
}


本文转载:CSDN博客