最近将系统换到了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的中文文档