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 ...
随机推荐
- cookie&&session再理解笔记
就拿php来说,两个php页面之间不拿get,post传递变量的话,数据是不能共享的.访问完1.php页面该页面的变量就被销毁了.所以就拿学校食堂来说,拿现金买饭的话你交完钱后,他给你个票以便确认你, ...
- asp.net mvc Post上传文件大小限制
最近发现在项目中使用jQuery.form插件上传比较大的文件时,上传不了,于是改了下web.config的上传文件最大限制. <configuration> <system.web ...
- Mysql的时间和日期
datetime 占8个字节 可以显示日期同时显示时间 yyyy-mm-dd hh:mm:ss 显示范围 1000-01-01 00:00:00----9999-12-31 23:59 ...
- php使用strlen()判断中文汉字字符串长度
php使用strlen()判断中文汉字字符串长度 对于含有中文情况,此时可以采用: iconv_strlen($str,"UTF-8"); iconv_strlen 是无论是何种编 ...
- Yii源码阅读笔记(二十九)
动态模型DynamicModel类,用于实现模型内数据验证: namespace yii\base; use yii\validators\Validator; /** * DynamicModel ...
- 总结-swing、JFrame、JScrollPane、JTabbedPane、JEditorPane
总结-swing.JFrame.JButton.JScrollPane.JLabel.JTabbedPane.JEditorPane 1.JButton内边距(去掉按钮里的空白):setMargin2 ...
- iTunes.exe 在win7系统中运行出错解决办法
重新安装了iTunes打开后就报错,然后直接退出 查windows日志提示错误应用程序名称: iTunes.exe 错误模块名称: KERNELBASE.dll 重新安装iTunes问题依旧,后来在G ...
- setAlpha方法 设置透明度
public void setAlpha (int x) 其中,参数x为透明度,取值范围为0~255,数值越小越透明.
- PHP unset 后恢复数组索引
unset($arr[3]); $arr = array_values($arr); array_values() 函数返回一个包含给定数组中所有键值的数组,但不保留键名,被返回的数组将使用数值键,从 ...
- Gradle--ubuntu
在Ubuntu安装Gradle也是很简单.切记请勿使用apt-get安装Gradle.因为Ubuntu源的Gradle实在太旧.我用的搜狐的源,竟然是2011年. 下面是安装步骤: 1.在官网下载最新 ...