今天开发时,使用PreparedStatement执行delete时,发现调用update方法不能正确执行,所以总结如下:
实例代码:http://download.csdn.net/detail/writerpan/7286393
可使用 PreparedStatement 的 execute 方法来执行 SQL 数据修改。PreparedStatement 使用用户定义的 SQL 语句查询数据库。将 SQL 语句应用于 PreparedStatement 时,使用 ? 字符来表示查询参数。对于任何 INSERT、UPDATE 或 DELETE 语句,每个 ? 参数都根据其在语句中的顺序位置来进行引用。例如,第一个 ? 引用为参数 1,第二个引用为参数 2。
-
将新 SQL 语句准备为一个字符串。
String sql_string = "INSERT INTO Department(dept_no, name) VALUES( ?, ? )";
-
将该字符串传递给 PreparedStatement。
PreparedStatement inserter = conn.prepareStatement(sql_string);
-
使用 set 方法将输入值传递给 PreparedStatement。
本示例将 dept_no 设置为 101,并引用为参数 1,将 name 设置为 "Electronics",并引用为参数 2。
inserter.set(1, 101); inserter.set(2, "Electronics");
-
执行该语句。
inserter.execute();
-
关闭 PreparedStatement 以释放资源。
inserter.close();
-
提交对数据库的所有更改。
conn.commit();
步骤 3 和 4 可以根据需要重复执行多次。
或者,当只需要插入单个条目时,您可以按照以下示例中的说明,对 INSERT 语句执行准备、执行和关闭操作:
INSERT INTO Department(dept_no, name) VALUES(2, 'Electronics');
此语句也可以通过 Java 字符串连接进行创建。
♦ 更新表中的行
-
将新 SQL 语句准备为一个字符串。
String sql_string = "UPDATE Department SET dept_no = ? WHERE dept_no = ?";
-
将该字符串传递给 PreparedStatement。
PreparedStatement updater = conn.prepareStatement(sql_string);
-
使用 set 方法将输入值传递给 PreparedStatement。
updater.set(1, 102); updater.set(2, 101);
上述示例与执行以下 SQL 语句等效:
UPDATE Department SET dept_no = 102 WHERE dept_no = 101;
-
执行语句。
updater.execute();
-
关闭 PreparedStatement 以释放资源。
updater.close();
-
提交对数据库的所有更改。
conn.commit();
步骤 3 和 4 可以根据需要重复执行多次。
或者,当您只更新单个条目时,可对以下语句执行准备、执行和关闭操作:
UPDATE Department SET dept_no = 102 WHERE dept_no = 101;
此语句也可以通过 Java 字符串连接进行创建。
♦ 删除表中的行
-
将新 SQL 语句准备为一个字符串。
String sql_string = "DELETE FROM Department WHERE dept_no = ?";
-
将该字符串传递给 PreparedStatement。
PreparedStatement deleter = conn.prepareStatement(sql_string);
-
使用 set 方法将输入值传递给 PreparedStatement。
deleter.set(1, 102);
上述示例与执行以下 SQL 语句等效:
DELETE FROM Department WHERE dept_no = 102;
-
执行语句。
deleter.execute();
-
关闭 PreparedStatement 以释放资源。
deleter.close();
-
提交对数据库的所有更改。
conn.commit();
-
步骤 3 和 4 可以根据需要重复执行多次。
或者,当您只删除单个条目时,可按照上一节中的说明,对以下语句执行准备、执行和关闭操作:
DELETE FROM Department WHERE dept_no = 102;
此语句也可以通过 Java 字符串连接进行创建。
示例
预准备语句可以执行多次。以下示例演示如何使用主机变量插入多行:
String stmt = "INSERT INTO Department(dept_no, name) VALUES (?,?)"; PreparedStatement inserter = conn.prepareStatement(stmt); inserter.set(1, 101); inserter.set(2, "Electronics"); inserter.execute(); inserter.set(1, 105); inserter.set(2, "Sales"); inserter.execute(); inserter.set(1, 109); inserter.set(2, "Accounting"); inserter.execute(); inserter.close();
在编写只需要执行一次的 SQL 语句时,建议对主机变量进行连接。以下示例演示了通过连接来执行 SQL 语句的插入行的方法:
void addRow(int id, String name, Connection conn) throws ULjException { PreparedStatement ps = conn.prepareStatement( "INSERT INTO Department(id, name) VALUES(" + id + ", '" + name + "')"; try { ps.execute(); } finally { ps.close(); \\ close the PreparedStatement even if an error occurs after execution. } }