1. 差别:
Statement:
用于履行不带参数的简略SQL句子,回来生成成果的目标,每次履行SQL句子时,数据库都要编译该句子。
PreparedStatement:
表明预编译的SQL句子的目标,用于履行带参数的预编译SQL句子。
CallableStatement:
供给了用来调用数据库中存储进程的接口,如果有输出参数要注册,阐明是输出参数。
2. PreparedStatement长处:
功率更高:运用PreparedStatement目标履行SQL句子时,指令会被数据库进行编译和解析,并放到指令缓冲区;
代码可读性和可维护性更好:
运用Statement:
Statement stmt = conn.getStatement();
stmt.executeUpdate("insert into tabel_name(col1,col2) values('" + var1 + "','" + var2 + "')");
运用PreparedStatement:
PreparedStatement prestmt = conn.preparedStatement("insert into tabel_name(col1,col2) values(?,?)");
安全性更好:
运用PreparedStatement能防备SQL注入(即通过把SQL指令刺进到Web表单递送或输入域名或页面恳求的查询字符串,终究到达诈骗服务器,到达履行歹意SQL指令的意图)进犯,注入只对SQL句子的编译进程有损坏效果,而履行阶段仅仅把输入串作为数据处理,不再需要对SQL句子进行解析。