在前面的课程中,对SQL语句并没有做预处理工作,而是直接把SQL语句提交给了数据库引擎(执行数据库的核心操作),数据库引擎负责把SQL语句转换为可执行的一系列数据库操作命令,然后执行命令,完成相关的数据库操作。
如果大量并发的线程同时提交SQL语句给数据库引擎,这显然让数据库引擎吃不消,就会影响数据库执行的速度,甚至会导致数据库崩溃。
JDBC的PreparedStatement接口可以对SQL语句进行预处理(对SQL语句进行预编译),SQL语句的预处理操作就是把数据库引擎解释SQL语句的任务放在客户端执行,提交给数据库引擎的是已经生成的数据库操作命令,这样就提高了数据库的工作效率。
PreparedStatement接口继承了Statement接口,在Statement接口基础上增加了新的方法,新增加的常用方法说明如下:
booleanexecute()
该方法执行此PreparedStatement对象中的SQL语句,该对象可以是任何类型的SQL语句。
ResultSetexecuteQuery()
该方法执行此PreparedStatement对象中的SQL查询并返回查询生成的ResultSet对象。
intexecuteUpdate()
该方法执行此PreparedStatement对象中的SQL语句,该对象必须是SQL数据操作语言(DML)语句,如INSERT、UPDATE或DELETE;或者是不返回任何内容的SQL语句,如DDL语句。
voidsetDate(intparameterIndex,Datex)
该方法将指定的日期对象写入数据库日期字段中。参数parameterIndex表示字段所在记录的列号。参数x为java.sql.Date类型。
voidsetInt(intparameterIndex,intx)
该方法将指定的int类型的值写入数据库int类型的字段中。参数parameterIndex表示字段所在记录的列号。参数x为int类型。
voidsetDouble(intparameterIndex,doublex)
该方法将指定的double类型的值写入数据库double类型的字段中。参数parameterIndex表示字段所在记录的列号。参数x为double类型。
voidsetString(intparameterIndex,Stringx)
该方法将指定的String类型的值写入数据库字符串类型的字段中。参数parameterIndex表示字段所在记录的列号。参数x为String类型。
voidsetFloat(intparameterIndex,floatx)
该方法将指定的float类型的值写入数据库float类型的字段中。参数parameterIndex表示字段所在记录的列号。参数x为float类型。
voidaddBatch()
该方法将SQL更新语句的一组参数添加到此PreparedStatement对象,对SQL更新语句涉及的表中记录进行批量更新。
Connection接口的prepareStatement()方法可以返回PreparedStatement对象,具体说明如下:
PreparedStatementprepareStatement(Stringsql)
案例1:查询shoper表的所有记录,并将记录内容输出到控制台。使用PreparedStatement对象执行SQL语句。
在demo包下新建SqlDemoTest6类。代码如下:
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.util.Date;
publicclassSqlDemoTest6{
//定义JDBC加载路径
staticStringjdbc=