Statement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。
使用哪一个方法由 SQL 语句所产生的内容决定。
execute():
用于执行返回多个结果集、多个更新计数或二者组合的语句
比较少用
executeQuery()
用于产生单个结果集的语句,例如 SELECT 语句。 被使用最多的执行 SQL 语句的方法是 executeQuery。这个方法被用来执行 SELECT 语句,它几乎是使用最多的 SQL 语句。
executeUpdate() : update语句
用于执行 INSERT、UPDATE 或 DELETE DML(数据操纵语言)语句
INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。
executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。
以及 SQL DDL(数据定义语言:增删改数据库和表)语句,
例如create table drop table。用于在数据库中创建新表或删除表,以及为表加入索引等。
对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。
创建表,改变表,删除表都是 DDL 语句的例子,要用 executeUpdate 方法来执行。
总结方法 executeUpdate 也被用于执行更新表 SQL 语句。实际上,相对于创建表来说,executeUpdate 用于更新表的时间更多,因为表只需要创建一次,但经常被更新。
executeBatch():对sql语句进行批量处理
较少用
1.假设使用事务:
(1)不使用批处理而是一条一条的SQL语句发送给MySQL的方式,如果有很多语句这样执行,每次到要和MySQL通讯,开销太大;另一方面,这样执行的SQL语句如果中间有一条发送错误,后面的SQL语句是不会执行的,理解为抛出异常,后面的语句当然就不执行了
(2)使用批处理方法,一次过将要执行的SQL语句发送给MySQL,MySQL的机制是:中间有语句错误,后面正确的语句还是会执行
2.假设不使用事务:这个简单,只要事务控制对了,中间有错的话都回滚就是了,后面的SQL语句就无所谓执不执行了
package cn.bl.v2;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Statement;
import org.junit.Test;
import cn.bl.DBUtil;
/**
* 批处理
* @author BarryLee
* @2018年9月18日@下午11:15:50
*/
public class Batch {
//1.Statement方式
@Test
public void test1() throws Exception {
Connection conn = DBUtil.getConnection();
Statement st = conn.createStatement();
for(int i = 0;i<10;i++) {
//这个sql没什么意义,只是为了区分插入的不同数据罢了
String sql1 = " insert into pp(name) values('xl"+i+"') ";
st.addBatch(sql1);
}
//删除name以xl开头的记录
String sql2 = " delete from pp where name like 'xl%' ";
st.addBatch(sql2);
int[]res = st.executeBatch();
for (int i : res) {//每一行sql的影响记录数
System.out.println(i);
//sql1都是输出1
//sql2对应的是10
}
}
//2.PreparedStatement方式
@Test
public void test2() throws Exception {
Connection conn = DBUtil.getConnection();
String sql = " insert into pp(name) values(?) ";
PreparedStatement pst = conn.prepareStatement(sql);
for(int i = 0;i<10;i++) {
pst.setString(1, "xl"+i);
pst.addBatch();//这里不能带参
}
sql = " delete from pp where name like 'xl%' ";
pst.addBatch(sql);
int[]res = pst.executeBatch();
for (int i : res) {//每一行sql的影响记录数
System.out.println(i);
//for循环里面添加的sql语句对应的都是输出1
//最后一句对应的是10
}
}
}
————————————————
版权声明:本文为CSDN博主「逸川同学」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_38238041/article/details/82766046
补充:
- DDL 定义:数据库定义语言
用于定义数据库的三级结构,包括外模式、概念模式、内模式及其相互之间的映像,定义数据的完整性、安全控制等约束,用于操作对象和对象的属性
DDL的主要语句(操作)
Create语句:可以创建数据库和数据库的一些对象。
Drop语句:可以删除数据表、索引、触发程序、条件约束以及数据表的权限等。
Alter语句:修改数据表定义及属性。 - DML 定义:数据操纵语言 用于操作数据库对象中包含的数据,也就是说操作的单位是记录。
数据操纵分成数据查询和数据更新两类。数据更新又分成插入、删除、和修改三种操作。
DML的主要语句(操作)
Select语句:查询符合指定条件的记录
Insert语句:向数据表张插入一条记录。
Delete语句:删除数据表中的一条或多条记录,也可以删除数据表中的所有记录,但是,它的操作对象仍是记录。
Update语句:用于修改已存在表中的记录的内容。 - DCL 定义:数据库控制语言 操作是数据库对象的权限,这些操作的确定使数据更加的安全。
Grant语句:允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。
Revoke语句:可以废除某用户或某组或所有用户访问权限 - .TCL 定义:事务控制语言
DCL的操作对象(用户),此时的用户指的是数据库用户。
SAVEPOINT 设置保存点
ROLLBACK 回滚
SET TRANSACTION
SQL(Structure Query Language)结构化查询语言是数据库的核心语言,是高级的非过程化编程语言。它功能强大,效率高,简单易学易维护。SQL语言基本上独立于数据库本身、使用的机器、网络、操作系统,基于SQL的DBMS产品可以运行在从个人机、工作站到基于局域网、小型机和大型机的各种计算机系统上,具有良好的可移植性。
SQL结构化查询语言包含6个部分
1.数据查询语言(DQL: Data Query Language)
数据检索语句,用于从表中获取数据。通常最常用的为保留字SELECT,并且常与FROM子句、WHERE子句组成查询SQL查询语句。
语法:
SELECT <字段名> FROM <表或视图名> WHERE <查询条件>;
2.数据操纵语言(DML:Data Manipulation Language)
主要用来对数据库的数据进行一些操作,常用的就是INSERT、UPDATE、DELETE。
语法:
INSERT INTO <表名>(列1,列2,...) VALUES (值1,值2,...);
UPDATE <表名> SET <列名>=新值 WHERE <列名>=某值;
DELETE FROM <表名> WHERE <列名>=某值;
3.事务处理语言(DPL)
事务处理语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION、COMMIT和ROLLBACK。
4.数据控制语言(DCL)
通过GRANT和REVOKE,确定单个用户或用户组对数据库对象的访问权限。
5.数据定义语言(DDL)
常用的有CREATE和DROP,用于在数据库中创建新表或删除表,以及为表加入索引等。
6.指针控制语言(CCL)
它的语句,想DECLARE CURSOR、FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。
————————————————
版权声明:本文为CSDN博主「小贪玩」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013544734/article/details/80869135