最初此语句使用占位符 “?” 而不是参数,稍后您可以传递参数使用 preparedstatement 接口的 setxxx() 方法动态地实现这些。
创建一个preparedstatement您可以创建一个preparedstatement (接口)使用 connection 接口的 preparestatement() 方法。此方法接受查询(参数化)并返回一个preparedstatement 对象。
当您调用此方法时,connection 对象会将给定的查询发送到数据库以编译并保存它。如果查询编译成功,则仅返回对象。
要编译查询,数据库不需要任何值,因此您可以使用(零个或多个)占位符 (问号 ” ?”) 代替查询中的值。
例如,如果数据库中有一个名为 employee 的表,使用以下查询创建。
create table employee(name varchar(255), salary int not null, location varchar(255));
然后您应该可以使用准备好的语句向其中插入值,如下所示。
//creating a prepared statementstring query="insert into employee(name, salary, location)values(?, ?, ?)";statement pstmt = con.preparestatement(query);
设置占位符的值preparedstatement接口提供了几个setter方法,例如setint()、setfloat()、setarray()、setdate()、setdouble()等,用于设置预编译语句的占位符的值。
这些方法接受两个参数,一个是表示占位符位置索引的整数值,另一个是int、string、float等表示您需要插入的值。
您可以使用以下示例中的setter方法为上述创建的语句设置占位符的值:
pstmt.setstring(1, "amit");pstmt.setint(2, 3000);pstmt.setstring(3, "hyderabad");pstmt.setstring(1, "kalyan");pstmt.setint(2, 4000);pstmt.setstring(3, "vishakhapatnam");pstmt.setstring(1, "renuka");pstmt.setint(2, 5000);pstmt.setstring(3, "delhi");pstmt.setstring(1, "archana");pstmt.setint(2, 15000);pstmt.setstring(3, "mumbai");
执行prepared statement创建preparedstatement对象后,您可以使用preparedstatement接口的execute()方法之一来执行它,即execute ()、executeupdate() 和、executequery()。
execute(): 该方法在当前准备好的语句对象中执行普通的静态 sql 语句,并返回一个布尔值。
executequery(): 该方法执行
executeupdate():该方法在当前prepared中执行insert update或delete等sql dml语句陈述。它返回一个整数值,表示受影响的行数。
您可以执行上面创建的准备好的语句,如下所示:
示例在本例中,我们尝试使用准备好的语句将值插入名为“employees”的表中。
import java.sql.connection;import java.sql.drivermanager;import java.sql.preparedstatement;import java.sql.sqlexception;public class preparedstatementexample { public static void main(string args[]) throws sqlexception { //registering the driver drivermanager.registerdriver(new com.mysql.jdbc.driver()); //getting the connection string mysqlurl = "jdbc:mysql://localhost/testdb"; connection con = drivermanager.getconnection(mysqlurl, "root", "password"); system.out.println("connection established......"); //creating a prepared statement string query = "insert into employees(name, salary, location) values (?, ?, ?)"; preparedstatement pstmt = con.preparestatement(query); pstmt.setstring(1, "amit"); pstmt.setint(2, 3000); pstmt.setstring(3, "hyderabad"); pstmt.setstring(1, "kalyan"); pstmt.setint(2, 4000); pstmt.setstring(3, "vishakhapatnam"); pstmt.setstring(1, "renuka"); pstmt.setint(2, 5000); pstmt.setstring(3, "delhi"); pstmt.setstring(1, "archana"); pstmt.setint(2, 15000); pstmt.setstring(3, "mumbai"); int num = pstmt.executeupdate(); system.out.println("rows inserted ...."); }}
输出connection established......number of rows inserted: 1
如果验证数据库,您可以观察表中插入的值:
+---------+--------+----------------+| name | salary | location |+---------+--------+----------------+| amit | 30000 | hyderabad || kalyan | 40000 | vishakhapatnam || renuka | 50000 | delhi || archana | 15000 | mumbai |+---------+--------+----------------+5 rows in set (0.00 sec)
以上就是jdbc中的preparedstatement是什么?的详细内容。
