JAVA基础知识之JDBC——使用ResultSetMetaData分析结果集
通过ResultSetMetaData可以对ResultSet进行分析,获取ResultSet里包含了哪些数据列,以及每个列的数据类型。
ResultSet中包含了一个getMetaData()方法,通过这个方法可以返回一个 ResultSetMetaData 对象,此对象提供大量方法获取ResultSet的属性,常用方法有,
- int getColumnCount() , 返回 ResultSet总共有多少列
- String getColumnName(int column) , 返回第column的列名
- int getColumnType(int conlumn) , 返回第column列的类型
下面的程序是一个简单的SQL执行器,输入SQL,将执行结果显示出来,
package db; import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import java.util.Vector; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField; public class QueryExecutor {
JFrame jf = new JFrame("查询执行器");
private JScrollPane scrollPane;
private JButton execBn = new JButton("查询");
//用来输入查询语句的文本框
private JTextField sqlField = new JTextField(45);
private static Connection conn;
private static Statement stmt;
//用静态初始化块来初始化Connection和Statement对象
static {
try {
//用Properties类加载属性文件
Properties prop = new Properties();
prop.load(new FileInputStream("mysql.ini"));
String drivers = prop.getProperty("driver");
String url = prop.getProperty("url");
String user = prop.getProperty("user");
String pass = prop.getProperty("pass");
Class.forName(drivers);
conn = DriverManager.getConnection(url, user, pass);
stmt = conn.createStatement();
} catch (Exception e) {
e.printStackTrace();
}
}
//初始化界面
public void init() {
JPanel top = new JPanel();
top.add(new JLabel("输入查询语句"));
top.add(sqlField);
top.add(execBn);
//为执行按钮,单行文本框添加事件监听器
execBn.addActionListener(new ExceListener());
sqlField.addActionListener(new ExceListener());
jf.add(top, BorderLayout.NORTH);
jf.setSize(680, 480);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
//定义监听器
class ExceListener implements ActionListener { @Override
public void actionPerformed(ActionEvent evt) {
//删除原来的JTable(JTable使用scrollPane来包装)
if (scrollPane != null) {
jf.remove(scrollPane);
}
try (
ResultSet rs = stmt.executeQuery(sqlField.getText())) {
//取出ResultSet的MetaData
ResultSetMetaData rsmd = rs.getMetaData();
Vector<String> columnNames = new Vector<>();
Vector<Vector<String>> data = new Vector<>();
//把ResultSet的所有列名添加到vector里
for (int i = 0; i < rsmd.getColumnCount(); i++) {
columnNames.add(rsmd.getColumnName(i+1));
}
//把ResultSet的所有记录添加到vector里
while (rs.next()) {
Vector<String> v = new Vector<>();
for (int i = 0; i < rsmd.getColumnCount(); i++) {
v.add(rs.getString(i+1));
}
data.add(v);
}
//创建新的JTable
JTable table = new JTable(data, columnNames);
scrollPane = new JScrollPane(table);
//添加新的table
jf.add(scrollPane);
//更新主窗口
jf.validate(); } catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} } public static void main(String[] args) {
new QueryExecutor().init();
}
}
上面程序中,在第75行用ResultSet对象的getMetaData()方法返回了ResultSetMetaData对象,
接着在79行和80行用ResultSetMetaData对象的getColumnCount()和getColumnName(column)返回了ResultSet的总行数和每列的名字,
最后在86行,通过ResultSet对象的 getXxx(i)方法返回当前行第i列的值
程序运行结果如下,
JAVA基础知识之JDBC——使用ResultSetMetaData分析结果集的更多相关文章
- JAVA基础知识之JDBC——编程步骤及执行SQL
JDBC编程步骤 下面以mysql数据库为例, 1.加载驱动 首先需要下载数据库的驱动jar文件,并且在eclipse包中加入到class path中去, 例如mysql的驱动文件 mysql-con ...
- JAVA基础知识之JDBC——JDBC事务处理及批量更新
JDBC事务 JDBC的事务由Connection提供,默认是打开的. 要开启事务,则要关闭自动提交, conn.setAutoCommit(false); 提交事务使用 conn.commit(); ...
- JAVA基础知识之JDBC——ResultSet的滚动和更新(statement的额外参数)
ResultSet不仅可以内存中的一张二维表一样保存statement执行SQL的结果集,还能通过结果集修改DB的数据.ResultSetMetaData则可以用来获得ResultSet对象的相关信息 ...
- JAVA基础知识之JDBC——JDBC数据库连接池
JDBC数据库连接池 数据库的连接和关闭是很耗费资源的操作,前面介绍的DriverManager方式获取的数据库连接,一个Connection对象就对应了一个物理数据库连接,每次操作都要打开一个连接, ...
- JAVA基础知识之JDBC——离线RowSet
离线RowSet 如果直接使用ResultSet, 程序在得到ResultSet记录之后需要立即使用,否则一旦关闭Connection就不再可用,要解决这种情况要么将ResultSet的结果转换成Ja ...
- JAVA基础知识之JDBC——RowSet
RowSet概念 在C#中,提供了一个DataSet,可以把数据库的数据放在内存中进行离线操作(读写),操作完成之后再同步到数据库中去,Java中则提供了类似的功能RowSet. RowSet接口继承 ...
- java基础知识-笔记整理
1.查看已安装jdk文件路径 CMD输入java -verbose. 2.java学习提升路线 java学习视屏地址: http://www.icoolxue.com/album/show/38 ...
- 沉淀,再出发:Java基础知识汇总
沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...
- Java 基础知识总结
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.数据类型: 数据类型:1>.基本数据类型:1).数值型: 1}.整型类型(byte 8位 (by ...
随机推荐
- 理解listagg函数
两道SQL面试题引出listagg函数: 1. 用一条sql求出每个部门(emp表)的最大工资和最小工资,以及最大工资和最小工资的员工姓名. (注:一次表扫描.同一个部门最大工资或最小工资的人可能不止 ...
- MySQL数据库初用(5.6版本)第一课
参考:http://wenku.baidu.com/link?url=NlX55fDDQ02wESO1HNkxpvju2xATwe9Fym0MfojWddXbYaJcjEKKRF9z9EX4b7shV ...
- 一个应用层的Makefile
CC = gcc #gcc编译器LIB= -lpthread #需要链接的库文件CFLAGS=-std=gnu99 #C编译器的选项,C99标准OBJ=test.o gpio.o #生成的汇编文件PR ...
- java.lang.UnsupportedClassVersionError: Bad version number in .class file异常
java.lang.UnsupportedClassVersionError: Bad version number in .class file异常 部署工程时也出现过因为版本不同引起的问题,那时我 ...
- C#中 MD5和SHA1加密代码
Pwd = FormsAuthentication.HashPasswordForStoringInConfigFile(entity.Pwd, "MD5"); Pwd = For ...
- JMeter之JDBC接口测试
使用jmeter连接数据库后,即可在jmeter中构造对数据库进行增删改查的请求以对数据库进行测试,以下以mysql数据库为例,演示jmeter连接mysql并进程查询操作的步骤. 1.确保mysql ...
- HTML其他基本格式说明
1.<!DOCTYPE>说明页面中使用的HTML版本,只是信息声明 2.元信息元素<meta>,通过属性定义文件信息的名称.内容.文档的关键字.作者及描述等..content内 ...
- ConcurrentHashMap Put()操作示例代码
非常简练: private static void put(MetricKey key, float value) { MetricValue current; do { current = map. ...
- 动画 CABasicAnimation animationWithKeyPath 一些规定的值
CABasicAnimation animationWithKeyPath Types When using the ‘CABasicAnimation’ from the QuartzCore Fr ...
- HTTPS与强制门户
强制门户 http://www.whatis.com.cn/word_5182.htm 强制网络门户(captive portal)是一个Web页面,它是使用公共访问网络的用户在被授予访问权限前必须访 ...