文章目录

  • 问题引出
  • 解决
    • step1:
    • step2:
      • 代码
      • 代码解读
  • 参考

最近因为删除信息的自增序列断裂问题,不得不重新排序,也就是需要在java代码中执行多条sql语句。

问题引出

最开始,是这样做的

在mysql中执行以上代码,发现序列重新排好了,详见:https://blog.csdn.net/xd15010130025/article/details/89319380
但是在java中运行却遇到了一下问题,将sql语句拼接在一起

报错为


可是语句明明和mysql中的语句一模一样呀?到底是什么原因呢?

解决

step1:

在查询使用sql语句的格式错误问题后,很确定自己并没有犯什么格式错误,于是查找:使用sql语句雨要注意什么问题?这篇文章映入眼帘:https://www.cnblogs.com/speedwade/p/3994476.html ,java中竟然不能在sql中加分号,也就是说我之前是用的字符串拼接方法是错的。那么多条语句要怎么执行呢?

step2:

思路理顺之后,解决起来就很简单了。

代码

这里给出示例代码:

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class Batch {/** 判断数据库是否支持批处理 */public static boolean supportBatch(Connection con) {try {// 得到数据库的元数据DatabaseMetaData md = con.getMetaData();return md.supportsBatchUpdates();} catch (SQLException e) {e.printStackTrace();}return false;}/** 执行一批SQL语句 */public static int[] goBatch(Connection con, String[] sqls) throws Exception {if (sqls == null) {return null;}Statement sm = null;try {sm = con.createStatement();for (int i = 0; i < sqls.length; i++) {sm.addBatch(sqls[i]);// 将所有的SQL语句添加到Statement中}// 一次执行多条SQL语句return sm.executeBatch();} catch (SQLException e) {e.printStackTrace();} finally {sm.close();}return null;}public static void main(String[] args) throws Exception {System.out.println("没有执行批处理时的数据为:");query();String[] sqls = new String[3];sqls[0] = "UPDATE staff SET depart='Personnel' where name='mali'";sqls[1] = "INSERT INTO staff (name, age, sex,address, depart, worklen,wage) VALUES ('mali  ', 27, 'w', 'china','Technology','2','2300')";sqls[2] = "DELETE FROM staff where name='marry'";Connection con = null;try {con = getConnection();// 获得数据库连接boolean supportBatch = supportBatch(con); // 判断是否支持批处理System.out.println("支持批处理? " + supportBatch);if (supportBatch) {int[] results = goBatch(con, sqls);// 执行一批SQL语句// 分析执行的结果for (int i = 0; i < sqls.length; i++) {if (results[i] >= 0) {System.out.println("语句: " + sqls[i] + " 执行成功,影响了"+ results[i] + "行数据");} else if (results[i] == Statement.SUCCESS_NO_INFO) {System.out.println("语句: " + sqls[i] + " 执行成功,影响的行数未知");} else if (results[i] == Statement.EXECUTE_FAILED) {System.out.println("语句: " + sqls[i] + " 执行失败");}}}} catch (ClassNotFoundException e1) {throw e1;} catch (SQLException e2) {throw e2;} finally {con.close();// 关闭数据库连接}System.out.println("执行批处理后的数据为:");query();}public static Connection getConnection() {// 数据库连接Connection con = null;try {Class.forName("com.mysql.jdbc.Driver");// 加载Mysql数据驱动con = DriverManager.getConnection("jdbc:mysql://localhost:3306/myuser", "root", "123456");// 创建数据连接} catch (Exception e) {System.out.println("数据库连接失败");}return con;}public static void query() throws Exception {// 查询所有的数据Connection con = getConnection();Statement st = con.createStatement();ResultSet rs = st.executeQuery("select * from staff");while (rs.next()) {String name = rs.getString("name");int age = rs.getInt("age");String sex = rs.getString("sex");String address = rs.getString("address");String depart = rs.getString("depart");String worklen = rs.getString("worklen");String wage = rs.getString("wage");System.out.println(name + " " + age + " " + sex + " " + address+ " " + depart + " " + worklen + " " + wage);}}}

代码解读

  • support_Batch()方法判断数据库是否支持SQL语句的批处理。通过Connection的getMetaData方法获得数据库的元数据对象DatabaseMetaData,再调用DatabaseMetaData supportsBatchUpdates方法判断数据库是否支持批处理。

  • startBatch()方法执行一组SQL语句。首先创建执行SQL语句的Statement对象,通过Statement类的addBatch方法将待执行SQL语句添加到执行缓冲区中,再调用executeBatch方法将执行缓冲区中的SQL语句全部执行,返回一个整型数组,如果数组元素的值大于等于0,则表示该语句执行成功,该值表示了执行该SQL语句修改的记录的行数;如果数组元素的值等于Statement.SUCCESS_NO_INFO常量,表示该语句也执行成功,但不知道具体修改了多少条记录;如果数组元素的值等于Statement.EXECUTE_FAILED常量,表示该语句执行失败。

  • getConnection()方法封装了数据库的连接方式。如果在程序中需要使用数据库,直接调用此方法即可。

  • query()方法的作用是查询数据库,传入执行查询语句的Statement对象和待执行的SQL语句,通过Statement的executeQuery方法执行SQL语句,返回一个ResultSet对象。再调用ResultSet的next()方法,根据字段名将数据取出,并打印在控制台上。

参考

https://www.cnblogs.com/speedwade/p/3994476.html
http://www.cnblogs.com/kxdblog/p/4115326.html

mysql执行多条语句相关推荐

  1. Mysql 一次性执行多条语句的实现

    1.mysql数据库默认情况下,mysql_query()是一次只执行一条语句. #include "stdafx.h" #include <mysql.h> #inc ...

  2. MyBatis 同时执行多条语句【简单扼要】

    目的:MyBatis 同时执行多条语句 第一步:打开一个约束   allowMultiQueries=true url: jdbc:mysql://127.0.0.1:3306/tourism?use ...

  3. mysql执行事务的语句_详解MySQL执行事务的语法和流程

    摘要:MySQL 提供了多种存储引擎来支持事务. MySQL 提供了多种存储引擎来支持事务.支持事务的存储引擎有 InnoDB 和 BDB,其中,InnoDB 存储引擎事务主要通过 UNDO 日志和 ...

  4. mysql 执行计划 什么用_简述MySQL的执行计划的作用及使用方法

    作为程序员,难免要和数据库打交道,一般情况下,我们不是DBA ,但是又要写很多SQL,因此SQL效率就成了很大的问题.关于SQL效率优化,除了要掌握一定优化技巧外, 还得有很多经验的积累,但是这里我们 ...

  5. mysql 执行计划extra_MySQL执行计划extra中的using index 和 using where using index 的区别...

    www.linuxidc.com/Linux/2017-- mysql执行计划中的extra列中表明了执行计划的每一步中的实现细节,其中包含了与索引相关的一些细节信息 其中跟索引有关的using in ...

  6. 深入理解MySQL执行过程及执行顺序

    MySQL在我们的开发中基本每天都要面对的,作为开发中的数据的来源,MySQL承担者存储数据和读写数据的职责.因为学习和了解MySQL是至关重要的,那么当我们在客户端发起一个SQL到出现详细的查询数据 ...

  7. mysql 存储过程无效_用VC通过DLL包连接MySQL,执行存储过程后,再执行其他查询无效?解决方法...

    用VC通过DLL包连接mysql,执行存储过程后,再执行其他查询无效? MYSQL mysql; mysql_init(&mysql); mysql_real_connect(&mys ...

  8. mysql执行计划extra为null_MySQL执行计划extra解析

    MySQL执行计划extra解析 mysql的执行计划最让人难以捉磨的地方就是extra栏位的提示了,这是由于其他的 栏位没有提供详细的信息,因此多一个栏位来附加额外的信息,以利于用户更好的理解 sq ...

  9. MySQL执行计划解读

    MySQL执行计划解读 http://www.cnblogs.com/ggjucheng/archive/2012/11/11/2765237.html MySQL执行计划解读 Explain语法 E ...

  10. PHP获取MySQL执行sql语句的查询时间

    PHP获取MySQL执行sql语句的查询时间 1. $t1=microtime(true); mysql_query($sql); echo microtime(true)-$t1; 2. //计时开 ...

最新文章

  1. 【Oracle】表空间相关集合
  2. python 之pulp 线性规划介绍及举例
  3. 零成本学Arduino单片机之入门
  4. chartcontrol饼状图属性设置_温故而知新,ggplot2 饼图的几点笔记
  5. [云炬学英语]每日一句2020.8.26
  6. spring @Order注解
  7. 平板电脑安装软件_概述嵌入式工业平板电脑的安装方法和注意事项!
  8. 带你1小时掌握Google图像语义分割模型,更有《深度学习》实体书免费送
  9. 解决公众号的加载问题
  10. 推荐我看过的几本好书给大家!(2)
  11. 数据结构与算法--死磕二叉树
  12. 凸优化问题中的Bregman迭代算法
  13. 【实践】腾讯PCG推荐系统应用实践(附PPT下载链接)
  14. 【DP + 卖股票】LeetCode 188. Best Time to Buy and Sell Stock IV
  15. 三天打鱼两天晒网(入门级算法)(C语言)
  16. 有道词典java下载电脑版下载手机版下载安装_【有道词典官方下载】有道词典PC版下载_多特软件站...
  17. APP性能测试之jmeter
  18. 工作之余,别忘了生活。
  19. 最新资料!工银亚洲开户见证业务受理网点(广东地区,除了深圳)
  20. 计算机管理如何格式化u盘,详细教您如何格式化u盘

热门文章

  1. python算法——冒泡排序
  2. 观点对立,无关虚拟现实技术
  3. Salesforce:下个财年营收我们有望突破100亿美元
  4. 为什么微软应该通过收购Docker来与Kubernetes竞争
  5. mysql导入存储过程报错_mysql导入存储过程时declare报错的有关问题解决
  6. 空间数据引擎oracle_Oracle-Spatial空间数据库基础
  7. python批量添加水印_手把手教你用Python批量给图片添加水印!知了干货分享!
  8. 怎样将树的中序遍历的数输入到一个数组中_二叉搜索树的后序遍历序列(剑指offer第三十一天)...
  9. python特性有什么_举例介绍Python中的25个隐藏特性
  10. 创造思维方法训练_数学思维方法训练课程:每日一题11.23