ResultSetMetaData 和 DatabaseMetaData
程序员文章站
2022-04-06 17:44:12
...
ResultSetMetaData:用来分析 "结果集"信息
DatabaseMetaData:用来分析是"数据库"信息
//做一个简单的 查询执行器
//分析数据库信息
DatabaseMetaData:用来分析是"数据库"信息
//做一个简单的 查询执行器
package com.enhance.jdbc; 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.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; import javax.swing.table.DefaultTableModel; public class QueryExecutor { JFrame jf = new JFrame("查询执行器"); private JScrollPane scrollPane; private DefaultTableModel model; private JButton execBn=new JButton("查询"); private JTextField sqlField=new JTextField(40); private static Connection conn; private static Statement stmt; private static ResultSet rs; static { try { Properties prop=new Properties(); FileInputStream in=new FileInputStream("src/mysql.ini"); prop.load(in); in.close(); String driver =prop.getProperty("driver"); String url=prop.getProperty("url"); String user=prop.getProperty("user"); String pass=prop.getProperty("pass"); Class.forName(driver); conn=DriverManager.getConnection(url,user,pass); stmt=conn.createStatement(); } catch (Exception e) { e.printStackTrace(); } } class ExecListener implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(scrollPane!=null){ jf.remove(scrollPane); } try { rs=stmt.executeQuery(sqlField.getText()); System.out.println(); ResultSetMetaData rsmd=rs.getMetaData(); Vector<String> columnNames=new Vector<String>(); System.out.println("cn"+rsmd.getColumnCount()); Vector data=new Vector(); for (int i = 0; i < rsmd.getColumnCount(); i++) { columnNames.add(rsmd.getColumnName(i+1)); } while(rs.next()){ Vector v=new Vector(); for (int i = 0; i < rsmd.getColumnCount(); i++) { v.add(rs.getString(i+1)); } data.add(v); } model = new DefaultTableModel(data,columnNames); JTable table=new JTable(model); scrollPane=new JScrollPane(table); jf.add(scrollPane); jf.validate(); } catch (Exception e2) { e2.printStackTrace(); } } } public void init(){ JPanel top=new JPanel(); top.add(new JLabel("输入查询语句:")); top.add(sqlField); top.add(execBn); execBn.addActionListener(new ExecListener()); sqlField.addActionListener(new ExecListener()); jf.add(top,BorderLayout.NORTH); jf.setSize(640,480); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); } public static void main(String[] args) { new QueryExecutor().init(); } }
//分析数据库信息
package com.enhance.jdbc; import java.io.FileInputStream; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.Properties; public class DataBaseMetaDataTest { private String driver; private String url; private String user; private String pass; private Connection conn; private ResultSet rs; public void initParam(String paramFile) throws Exception{ Properties prop=new Properties(); prop.load(new FileInputStream(paramFile)); driver=prop.getProperty("driver"); url=prop.getProperty("url"); user=prop.getProperty("user"); pass=prop.getProperty("pass"); } public void info() throws Exception{ try { Class.forName(driver); conn=DriverManager.getConnection(url,user,pass); //获取DataBaseMeteData对象 DatabaseMetaData dbmd=conn.getMetaData(); //获取MySql支持的所有类型 ResultSet rs=dbmd.getTableTypes(); System.out.println("----MySql支持的表的类型信息----"); printResultSet(rs); //获取当前数据库的全部数据表 rs=dbmd.getTables(null,null, "%", new String[]{"TABLE"}); System.out.println("----当前数据库中的所有表信息----"); printResultSet(rs); rs=dbmd.getPrimaryKeys(null, null, "my_test"); System.out.println("----my_test表中的主键信息----"); printResultSet(rs); rs=dbmd.getProcedures(null, null, "%"); System.out.println("----当前数据库中所有存储过程信息----"); printResultSet(rs); rs=dbmd.getCrossReference(null, null, "time_zone", null, null, "time_zone_name"); System.out.println("----time_zone表和time_zone_name表之间的外键约束----"); printResultSet(rs); rs=dbmd.getColumns(null, null, "my_test", "%"); System.out.println("----my_test表的全部数据列----"); printResultSet(rs); System.out.println(dbmd.getDatabaseProductName()); System.out.println(dbmd.getDatabaseProductVersion()); System.out.println(dbmd.getDriverName()); System.out.println(dbmd.getDriverVersion()); } finally{ if(rs!=null) rs.close(); if(conn!=null) conn.close(); } } public void printResultSet(ResultSet rs) throws SQLException{ ResultSetMetaData rsmd=rs.getMetaData(); for (int i = 0; i < rsmd.getColumnCount(); i++) { System.out.print(rsmd.getColumnName(i+1)+"\t"); } System.out.println(); while(rs.next()){ for (int i = 0; i < rsmd.getColumnCount(); i++) { System.out.print(rs.getString(i+1)+"\t"); } System.out.println(); } rs.close(); } public static void main(String[] args) throws Exception { // TODO Auto-generated method stub DataBaseMetaDataTest dbmdt=new DataBaseMetaDataTest(); dbmdt.initParam("src/mysql.ini"); dbmdt.info(); } }