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的中文文档

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java 中,可以使用 JDBCJava Database Connectivity)来执行多条 SQL 语句。下面是一个简单的示例代码,展示如何一次执行多条 SQL 语句: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class MultipleSQLExecutionExample { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/mydatabase"; String username = "root"; String password = "password"; try (Connection conn = DriverManager.getConnection(url, username, password)) { Statement statement = conn.createStatement(); String sql1 = "INSERT INTO users (id, name) VALUES (1, 'John')"; String sql2 = "UPDATE users SET name = 'Jane' WHERE id = 1"; statement.addBatch(sql1); statement.addBatch(sql2); int[] result = statement.executeBatch(); System.out.println("Number of rows affected by each statement:"); for (int i : result) { System.out.println(i); } } catch (SQLException e) { e.printStackTrace(); } } } ``` 在上述示例中,我们使用 `createStatement()` 创建一个 `Statement` 对象来执行 SQL 语句。然后,我们使用 `addBatch()` 将多条 SQL 语句添加到批处理中。最后,我们使用 `executeBatch()` 执行批处理,并获取每个语句影响的行数。 请注意,这只是一个简单的示例,实际应用中可能需要更复杂的逻辑处理和错误处理。此外,具体的实现方式可能会因数据库类型和驱动程序的不同而有所差异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值