- 前面说过可以通过next()方法或者使用可滚动的结果集方法查询结果,但是这都只是在以每一行为单位的,如果需要访问以每一行的每一个数据的话,可以使用ResultSetMetaData来访问。
- MetaData是“元数据的意思”,是描述其他数据时回到的数据。
- 几个ResultSetMetaData的方法
- getColumnCount()返回该结果集的行数
- getCountName(int count)返回指定索引的列名
- getCountType(int column)返回指定类型的索引名
- 以下具体代码和运行结果
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileInputStream; import java.sql.*; import java.util.Properties; import java.util.Vector; public class QueryExecutor { // 下面这几行是图形化界面的,不讲~~ JFrame jf = new JFrame("查询分析器"); private JScrollPane scrollPane; private JButton execBn = new JButton("查询"); private JTextField sqlField = new JTextField(30); // 这里是和前面一样的常规操作 private static Connection conn; private static Statement stmt; static{ try{ Properties props = new Properties(); props.load(new FileInputStream("mysql.ini")); String driver = props.getProperty("driver"); String url = props.getProperty("url"); String username = props.getProperty("user"); String password = props.getProperty("pass"); Class.forName(driver); conn = DriverManager.getConnection(url, username, password); 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 ExceListListener()); sqlField.addActionListener(new ExceListListener()); jf.add(top, BorderLayout.NORTH); jf.setSize(640, 600); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); } // 这个才是本例需要讲解的部分,在使用sql语句执行完查询之后会返回ResultSet // 然后使用ResultSetMetaData来获取ResultSet的相关描述信息 // 知识补充:Vector类实现了可扩展的对象数组。 像数组一样,它包含可以使用整数 // 索引访问的组件。 但是, Vector的大小可以根据需要增长或缩小,以适应在创建 // Vector之后添加和删除项目。 class ExceListListener implements ActionListener{ public void actionPerformed(ActionEvent evt){ if(scrollPane != null){ jf.remove(scrollPane); } try( ResultSet rs = stmt.executeQuery(sqlField.getText())) // 执行sql语句后得到的结果集 { ResultSetMetaData rsmd = rs.getMetaData(); // 得到结果集的ResultSetMetaData // 将获得的结果拆分放在Vector中 Vector<String> columnNames = new Vector<>(); Vector<Vector<String>> data = new Vector<>(); // 这里是获取目录名 for(int i=0; i<rsmd.getColumnCount(); i++){ columnNames.add(rsmd.getCatalogName(i+1)); } // 这里的执行过程是:以行为单位遍结果集,然后将每一行以列为单位遍历之后存放在一个 Vector里,然后 // 用另一个Vector将这个存放有每一列信息的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 table = new JTable(data, columnNames); scrollPane = new JScrollPane(table); jf.add(scrollPane); jf.validate(); }catch (Exception e){ e.printStackTrace(); } } } public static void main(String args[]){ new QueryExecutor().init(); } }
java数据库编程(8)ResultSetMetaData
猜你喜欢
转载自blog.csdn.net/weixin_39452731/article/details/83041399
今日推荐
周排行