在JDK1.4的api文档中,可以找到对PreparedStatement的描述:
      An object that represents a precompiled SQL statement. 
      A SQL statement is precompiled and stored in a PreparedStatement object. This object can then be used to efficiently execute this statement multiple times. 
      根据这样的描述我们可以得到这样的印象:设计PreparedStatement是为了提高数据库处理和执行SQL语句的效率。如果起的作用是相反或者没有作用,那么就没有存在的必要。
      当需要对数据库进行数据插入、更新或者删除的时候,程序会发送整个SQL语句给数据库处理和执行。数据库处理一个SQL语句,需要完成解析SQL语句、检查语法和语义以及生成代码;一般说来,处理时间要比执行语句所需要的时间长。
      如果需要发送的SQL语句除了数据改变之外其他都不变——这是经常可以遇见的——假如按照通常的手段,那么数据库还是会重新解析这条语句,做上一次已经做过的事情。如果次数很多,比如上万次,那么重复解析所花费的时间就相当可观了。
      PreparedStatement接口用来把一个SQL语句发送给数据库,让该语句在数据库中得到预处理,然后数据库得到程序发送过去的数据执行相应的操作。程序不断发送数据,而数据库不需要再花费解析的时间就可以执行。
看以下例子
str2="INSERT INTO student (name,physic,maths,chinese,english) VALUES(?,?,?,?,?)";
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}
catch(ClassNotFoundException e){}
try{      
con=DriverManager.getConnection("jdbc:odbc:redsun","snow","ookk");      PreparedStatement ps=con.prepareStatement(str2);  
ps.setString(1,"xiaowang");      
ps.setInt(2,90);      
ps.setInt(3,91);      
ps.setInt(4,93);      
ps.setInt(5,94);      
a=System.currentTimeMillis();//记录起始时间      
for(int i=0;i<10000;i++)      {         ps.executeUpdate();      }      b=System.currentTimeMillis();//记录结束时间      
abc=b-a;      
con.close();}
catch(SQLException e1){e1.getMessage();}