PreparedStatement对象不仅包含了SQL语句,而且大多数情况下这个语句已经被预编译过,因而当其执行时,只需DBMS运行SQL语句,而不必先编译。当你需要执行Statement对象多次的时候,PreparedStatement对象将会大大降低运行时间,当然也加快了访问数据库的速度。
这种转换也给你带来很大的便利,不必重复SQL语句的句法,而只需更改其中变量的值,便可重新执行SQL语句。
使用PreparedStatement的时候需要注意哪些参数可以使用setString()赋值
例如:
String sql = "select ? from ?";
conn = DriverManager.getConnection(URL, USER_NAME, PASSWORD);
ps = conn.prepareStatement(sql);
ps.setString(1, "*");//
这样写会出错,最后查询结果是空的
ps.setInt(2, 5);
rs = ps.executeQuery();
setString方法的jdk描述如下:Sets the designated parameter to the given Java String value. The driver converts this to an SQL VARCHAR or LONGVARCHAR value (depending on the argument's size relative to the driver's limits on VARCHAR values) when it sends it to the database.
选择PreparedStatement对象与否,在于相同句法的SQL语句是否执行了多次,而且两次之间的差别仅仅是变量的不同。如果仅仅执行了一次的话,它应该和普通的对象毫无差异,体现不出 它预编译的优越性。
补充:
1. 数 据库在执行sql语句的时候如果使用PreparedStatement语句会有一点优势:因为数据库会 PreparedStatement 语句进行预编译,下次执行相同的sql语句时,数据库端不会再进行预编译了,而直接用数据库的缓冲区,提高数据访问的效率(但尽量尽量采用使用?号的方式 传递参数),如果sql语句只执行一次,以后不再复用,则建议采用StatemenStatement不会对sql进行预编译。
2. 另外使用PrepareStatement还有一个好处,不用对传入的字符串进行转义。
3.PreparedStatement 能有效防止Sql注入攻击,速度较快,但失于灵活.
分享到:
相关推荐
prepareStatement和Statement的区别
java数据库连接PrepareStatement
用JDBC实现Java与数据库的连接,该文件使用PrepareStatement实现。
PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程,下面这篇文章主要给大家介绍了关于利用JDBC的PrepareStatement打印真实SQL的方法,需要的朋友可以参考借鉴,下面来一起看看吧。
数据库原理:为什么PrepareStatement性能更好更安全
In Oracle Metalink (Oracle's support site - Note ID 736273.1) I found that this is a bug in JDBC adapter (version 10.2.0.0.0 to 11.1.0.7.0) that when you call preparedStatement with more than 7 ...
MySQL prepare语法: PREPARE statement_name FROM preparable_SQL_statement; /*定义*/ EXECUTE statement_name [USING @var_name [, @var_name] …]; /*执行预处理语句*/ {DEALLOCATE | DROP} PREPARE statement_...
该资源中包含 JDBC 连接 MySQL 完整代码、常规 select、update 语句完整代码,以及 JDBC 批量处理数据的几种不同方式完整代码,且附带 使用说明!
Do you know how to prepare a cashflow statement?
MySQL官方将prepare、execute、deallocate统称为PREPARE STATEMENT,我习惯称其为【预处理语句】,其用法十分简单,下面话不多说,来一起看看详细的介绍吧。 示例代码 PREPARE stmt_name FROM preparable_stmt ...
JAVA连接FileMaker完整工程 包函FileMaker数据库Java连接驱动 修改工程中的FileMaker安装地址就 可以用JAVA操作FileMaker ... prepareStatement = con.prepareStatement(insertSQL); b = prepareStatement.execute();
cash flow statement,主要是会计的现金流报表的准备
这次是做一个不使用框架,用最原始的方法实现了java-jsp的web应用,栗子呢包含增删改查、登陆登出、分页、事务处理和权限管理这几个web应用的基本要素,界面就做得很烂了,除了对齐以外就没用到CSS了,也是节约时间...
android 多渠道打包,把渠道文件放入channel.txt 就行
NULL 博文链接:https://beijingwo2008.iteye.com/blog/1851542
PrepareStatement: conn.prepareStatement(String sql); CallableStatement: conn.prepareCall(String sql); 4)执行sql语句 stmt.execute(sql); stmt.executeUpdate(sql); stmt.executeQuery(sql); pstmt.execute*...
详细的接收了Statement与PrepareStatement的区别
java.sql.PreparedStatement psta=null; //连接jdbc驱动,获取连接对象(connection) try { //先写好sql语句 ... psta= connection.prepareStatement(sqlstr); psta.setString(1, username);
public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException { return null;} public CallableStatement prepareCall...
Java代码在执行conn.createStatement()和conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor。尤其是,假如你的createStatement和prepareStatement是在一个循环里面的话,就会非常轻易出现...