您的位置:首页 > 编程语言 > Java开发

Java中preparedStatement的错误使用

2012-08-18 00:41 120 查看

java中PreparedStatement的错误使用

今天在翻看一个以前项目的代码的时候发现了一个对PreparedStatement的错误使用,为了避免自己以后犯类似的错误,

特别记录一下!首先先看下面的增删改查的代码:

public int insert(String sql) throws Exception {

Logger.getLogger(this.getClass()).info(sql);

return conn.prepareStatement(sql).executeUpdate();

}

/**

* 更新记录

*

* @param sql

* @return

* @throws Exception

*/

public int update(String sql) throws Exception {

Logger.getLogger(this.getClass()).info(sql);

return conn.prepareStatement(sql).executeUpdate();

}

/**

* 删除记录

*

* @param sql

* @return

* @throws Exception

*/

public int delete(String sql) throws Exception {

Logger.getLogger(this.getClass()).info(sql);

return conn.prepareStatement(sql).executeUpdate();

}

/**

* 查询记录

*

* @param sql

* @return ResultSet

* @throws Exception

*/

public ResultSet executeQuery(String sql) throws Exception {

Logger.getLogger(this.getClass()).info(sql);

ResultSet rs = conn.prepareStatement(sql).executeQuery();

return rs;

}

也许你看了很久后会说,这写的没什么大问题啊,其实不然 这里面有一个很影响效率的地方

大家都知道prepareStatement 是编译的 SQL 语句的对象。但是怎样才能真正的起到预编译的作用呢?

以前我是不怎么了解,但是现在算是比较明白了吧,

Connection类中的prepareStatement(sql)可以创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。

但是这个sql语句必须是用占位符?来表示参数并且

s.setInt(1,1);--(设置values中的值,1,2,3代表顺序,后面的表示要插入的值)

s.setString(2,"admin");

s.setString(3,"admin");

这样才能真正启到预编译的作用,如果插入类似数据的时候就会直接使用编译好的sql,从而提高效率。

但是如果向上面代码那样写的话Conn.prepareStatement(sql).executeUpdate();,不但起不到提高查询速度的

作用,而且会在数据库中产生大量的预编译语句,占用了大量的空间。

所以,希望大家以后能够注意一下,也警示自己以后不要犯类似的问题!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐