java statement一次执行多条不同类型的sql语句

最近将系统换到了ubuntu,在终端使用mysql时会遇到字段值太长,将行拉伸导致看不清字段值对应的字段名.
在这里插入图片描述
作为学计算机的,这点难题怎么可以难倒(滑稽),于是拿起之前学过的swing,自己撸了一个mysql图形工具(只有看查询的工具#滑稽)
在做sql查询界面时,碰到了障碍。我的需求是:
1.能执行增改查删。
2.能同时执行1中所有sql语句。

但是在jdbc中,查询返回值只有结果集ResultSet和受影响的条数。之前在学习jdbc时,用的是单条语句,可以用statement.execute(sql)来判断返回值类型,但是多条语句同时执行,判断得到的都是第一条语句的返回值。
在百度和谷歌搜索一大圈后,并没有找到我需要的解决方案,于是我想起之前下载的汉化jdk api(划重点)。
中文jdk api 链接:https://pan.baidu.com/s/1Gp_yfOZNrikKibMB5fmTYA 密码:k19o
jdk1.8的文档中对于statement.execute(sql)的描述是这么一段
在这里插入图片描述
简单来说就是:
statement.execute方法可以执行多条sql语句并返回多条结果
使用ececute方法判断返回值,并选择使用getResultSet或getUpdateCount来获得执行结果
获取结果后,使用getMoreResults方法将结果移动到下一条 并判断其返回值来使用getResultSet或getUpdateCount来获得执行结果
那么如何判断是否还有下一条呢?
在jdk中关于getMoreResults说明为
在这里插入图片描述
官方给出的判断方法为
当返回值为false并且getUpdateCount获取的值为-1
综上所述,我写了一个demo来测试


package test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

public class test {
	private static String DRIVER="com.mysql.jdbc.Driver";
    private static String URL="jdbc:mysql://127.0.0.1:3306/spring?characterEncoding=utf-8&allowMultiQueries=true";
	public static void main(String[] args) throws ClassNotFoundException{
		Class.forName(DRIVER);
		try {
			Connection connection=DriverManager.getConnection(URL,"root","root");
			Statement statement=connection.createStatement();
			boolean result=statement.execute("select * from account;insert into account values(null,'55',265);select id as iid from account;"
					+ "");
			ResultSet rs;
			while(true) {
				if(result) {
					System.out.println("ResultSet");
					rs=statement.getResultSet();
					ResultSetMetaData rData=rs.getMetaData();
					for(int i=1;i<=rData.getColumnCount();i++) {
						System.out.println(rData.getColumnLabel(i));
					}
					System.out.println("-----------------------");
				}else {
					System.out.println("getUpdateCount");
					if(statement.getUpdateCount()!=-1)
						System.out.println(statement.getUpdateCount());
					else
						break;
					System.out.println("----------------");
				}
				result=statement.getMoreResults();
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
		}
		
	}
}

account表
字段为 id username balance
测试sql语句:select * from account;insert into account values(null,‘55’,265);select id as iid from account;
结果:
ResultSet
id
username
balance
---------分割线--------------
getUpdateCount
1
-------分割线---------
ResultSet
iid
---------分割线--------------
getUpdateCount

三条sql全部都获取到了结果,最后一个getUpdateCount是由于判断返回值跳出循环多进行的一次比较。

最后 加入我的mysql图形工具后成功执行一条语句执行三条sql
在这里插入图片描述

第一次写博客 排版 文字都有点混乱 有不懂的可以提问 也可以自己看上面的jdk1.8的中文文档

  • 3
    点赞
  • 2
    评论
  • 3
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

gjy11223344

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值