PreparedStatement 接口继承 Statement接口,PreparedStatement比普通的Statement对象使用起来更加灵活,更有效率。
Statement常用方法
ResultSet executeQuery(String sql) 执行SQL查询并获取到ResultSet对象
int executeUpdate(String sql) 可以执行插入、删除、更新等操作,返回值是执行该操作所影响的行数
boolean execute(String sql) 可以执行任意SQL语句,然后获得一个布尔值,表示是否返回ResultSet
ResultSet常用方法
boolean next() 将游标从当前位置向下移动一行
boolean previous() 游标从当前位置向上移动一行
void close() 关闭ResultSet 对象
int getInt(int colIndex) 以int形式获取结果集当前行指定列号值
int getInt(String colLabel) 以int形式获取结果集当前行指定列名值
float getFloat(int colIndex) 以float形式获取结果集当前行指定列号值
float getFloat(String colLabel) 以float形式获取结果集当前行指定列名值
String getString(int colIndex) 以String 形式获取结果集当前行指定列号值
String getString(String colLabel) 以String形式获取结果集当前行指定列名值
(1)提高了代码的可读性和可维护性
虽然使用PreparedStatement来代替Statement会多些几行代码,但避免了繁琐麻烦有容易出错的SQL语句拼接,提高了代码的可读性和可维护性
(2)提高了SQL语句执行的性能
创建Statement对象时不使用SQL语句做参数,不会解析和编译SQL语句,每次调用方法执行SQL语句时要进行SQL语句解析和编译操作,即使操作相同仅仅是数据不同。
创建PreparedStatement对象时使用带占位符的SQL语句做参数,会解析和编译该SQL语句,在通过setXxx方法给占位符赋值后执行SQL语句时无需再解析和编译SQL语句,直接执行即可。多次执行相同操作可以大大提高性能。
(3)提高了安全性
PreparedStatement使用预编译语句,传入的任何数据都不会和已经预编译的SQL语句进行拼接,避免了SQL注入攻击