一、洗掉資料
- DELETE陳述句如下
DELETE FROM <表名> WHERE <條件運算式>
- 方法:(1)利用Statement實體執行靜態DELETE陳述句完成;(2)利用PreparedStatement實體通過執行動態DELETE陳述句完成;(3)利用CallableStatement實體通過執行存盤程序完成,
- 第一種方式:
String sql = "delete from tb_record where date<'2017-2-14'";
statement.executeUpdate(sql);
- 第二種方式:
String sql = "delete from tb_record where date<?";
PreparedStatement prpdStmt = connection.preparedStatement(sql);
prpdStmt.setString(1,'2017-2-14');//為日期型引數賦值
prpdStmt.executeUpdate();
- 注意點:當前未使用java.sql.Date,所以方法setString(int parameterIndex,String x),如果使用了java.sql.Date,那么使用方法setDate(int parameterIndex,java.sql.Date date)
- 第三種方式:
String sql = "{call pro_record_delete_by_date(?)}";
CallableStatement cablStmt = conneciton.prepareCall(call);
cablStmt.setString(1,"2017-2-14");
cablStmt.executeUpdate();
- 下面我們通過一個實體來演示代碼
package com.bjpowernode.java_learning;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class D138_1_deleteSQL {
private static final String URL = "jdbc:Access:///e:/xsgl.mdb";
static {
try {
Class.forName("com.hxtt.sql.access.AccessDriver");
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String args) {
try {
Connection conn = DriverManager.getConnection(URL);
Statement statement = conn.createStatement();
String sql = "delete from tb_record where Salary<1000";
statement.executeUpdate(sql);
statement.close();
conn.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
- 下面通過PreparedStatement實體一次執行多條DELETE陳述句
package com.bjpowernode.java_learning;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
public class D138_2_PreparedStatementDelete {
private static final String URL = "jdbc:Access:///e:/xsgl.mdb";
static {
try {
Class.forName("com.hxtt.sql.access.AccessDriver");
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String args) {
try {
Connection conn = DriverManager.getConnection(URL);
String[] names = {"部門經理","會計"};
String sql = "delete from tb_record where duty=?";
PreparedStatement prpdStmt = conn.prepareStatement(sql);
prpdStmt.clearBatch();
for(int i=0;i<names.length;i++) {
prpdStmt.setString(1,names[i]);
prpdStmt.addBatch();
}
prpdStmt.executeBatch();
prpdStmt.close();
conn.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
二、編譯預處理
- PreparedStatement始于編譯預處理有關的類,是Statement的一個子類,它與Statement類的一個重要區別是:用Statement定義的陳述句是一個功能明確而具體的陳述句,而用PraparedStatement類定義的SQL陳述句 中則包含一個或者多個?占位符,他們對應多個IN引數,帶占位符的SQL陳述句可以被編譯,而在后續執行程序中,這些占位符需要使用set方法設定為具體的IN引數值,再將這些陳述句發送到資料庫獲得執行,
- 給出若干編譯預處理陳述句實體說明PreparedStatement的用法
- (1)創建物件
PraparedStatement pstmt = conn.prapareStatement("update tablel set=? where y=?");
- 物件pstmt中包含了陳述句"update tablel set x=? where y=?",該陳述句被發送到DBMS進行編譯預處理,為執行做準備
- (2)為每個IN引數設定引數值,即每個占位符?對應一個引數值,設定引數值是通過呼叫setXxx方法實作的,其中Xxx是與引數相對應的型別,加入上面例子中的引數型別為long,則用下面的代碼為引數設定值,
pstmt.setLong(1,123456789);
pstmt.setLong(2,987654321);
- 這里的1,2是與占位符從左到有的次序相對應的序號,他們不是從0開始計數,
- (3)執行陳述句
Pstmt.executeUpdate();
三、原始碼:
- DD138_1_deleteSQL.java
- D138_2_PreparedStatementDelete.java
- https://github.com/ruigege66/Java/blob/master/D138_1_deleteSQL.java
- https://github.com/ruigege66/Java/blob/master/D138_2_PreparedStatementDelete.java
- CSDN:https://blog.csdn.net/weixin_44630050
- 博客園:https://www.cnblogs.com/ruigege0000/
- 歡迎關注微信公眾號:傅里葉變換,個人賬號,僅用于技術交流

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/41960.html
標籤:Java
下一篇:mysql高級day1
