-
Java连载138-数据库删除数据以及编译预处理
一、删除数据
- 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
出 处:https://www.cnblogs.com/ruigege0000/p/13670376.html
最新更新
带有参数的装饰器
类装饰器
django中的auth模块与admin后台管理
python的日期处理
字符串常用方法
基本数据类型概述
python-map()函数基本用法
python带你实现任意下载AcFun视频数据~
bbs项目之注册功能
变量的定义和使用
三大常用数据库事务详解之三:事务运行
三大常用关系型数据库事务详解之二:基
三大关系型数据库事务详解之一:基本概
MongoDB常用命令(2)
MongoDB基本介绍与安装(1)
SQLServer触发器调用JavaWeb接口
SQL Server索引的原理深入解析
SqlServer2016模糊匹配的三种方式及效率问题
SQL中Truncate的用法
sqlserver 多表关联时在where语句中慎用tri
VB.NET中如何快速访问注册表
ASP.NET中图象处理过程详解
Vue(1)Vue安装与使用
JavaScript 语言入门
js将一段字符串的首字母转成大写
纯原生html编写的h5视频播放器
H5仿原生app短信验证码vue2.0组件附源码地
TypeScript(4)接口
TypeScript(3)基础类型
TypeScript(2)WebStorm自动编译TypeScript配置