📄 dbqueryframe.java
字号:
package test;import java.net.URL;import java.sql.*;import java.util.Vector;import java.awt.*;import java.awt.event.*;public class dbQueryFrame extends Frame implements ActionListener, ItemListener{ Database db; List Tables, Columns, SelColumns; Choice fields,oper, values; TextArea where; Button addAnd,addOr,clear,Search, Quit; public dbQueryFrame() { super("数据库查询构建器"); //设置交互界面 setGUI(); db = new Database("sun.jdbc.odbc.JdbcOdbcDriver"); db.Open("jdbc:odbc:JDBCTEST;pwd=java", "C:\\My Documents\\biblio.mdb"); String tnames[] = db.getTableNames(); loadList(Tables, tnames); String queryText =""; where.setText(queryText); } //------------------------------------ private void setGUI() { setBackground(Color.lightGray); //界面总体分上中下三部分 setLayout(new GridLayout(3,1)); //上部的构件组织 Panel pn = new Panel(); add(pn); pn.setLayout(new BorderLayout()); //添加列表框的标题 Panel pnn=new Panel(); pnn.setLayout(new GridLayout(1,3)); pnn.add(new Label("所有表")); pnn.add(new Label("可选字段")); pnn.add(new Label("已选字段")); pn.add("North",pnn); //添加列表框 Panel pnc=new Panel(); pnc.setLayout(new GridLayout(1,3)); pnc.add(Tables = new List(15)); pnc.add(Columns = new List(15)); pnc.add(SelColumns= new List(15)); pn.add("Center",pnc); //中部的构件组织 Panel pc = new Panel(); add( pc); pc.setLayout(new GridLayout(3,1)); //添加下拉列表框的标题 Panel pcn=new Panel(); pcn.setLayout(new GridLayout(1,3)); pcn.add(new Label("字段")); pcn.add(new Label("运算符")); pcn.add(new Label("值")); pc.add(pcn); //添加下拉列表框 Panel pcc=new Panel(); pcc.setLayout(new GridLayout(1,3)); pcc.add(fields = new Choice()); pcc.add(oper= new Choice()); pcc.add(values= new Choice()); pc.add(pcc); //添加两个条件生成按钮 Panel pcs=new Panel(); pcs.add(addAnd=new Button("与")); pcs.add(addOr=new Button("或")); pcs.add(clear=new Button("清除")); pc.add(pcs); Tables.addItemListener(this); Columns.addActionListener(this); SelColumns.addActionListener(this); fields.addItemListener(this); addAnd.addActionListener(this); addOr.addActionListener(this); clear.addActionListener(this); oper.add("="); oper.add(">"); oper.add("<"); //下部的构件组织 Panel ps = new Panel(); add(ps); ps.add(where = new TextArea("", 3,40)); addPanel(ps, Search = new Button("执行查询")); addPanel(ps, Quit = new Button("退出")); Search.addActionListener(this); Quit.addActionListener(this); setBounds(100, 100, 500, 300); setVisible(true); } //------------------------------------ private void addPanel(Panel ps, Component c) { Panel p = new Panel(); ps.add(p); p.add(c); } //------------------------------------ private void loadChoice(Choice choice, String[] s){ choice.removeAll(); for (int i=0; i< s.length; i++) choice.add(s[i]); } //------------------------------------ private void loadList(List list, String[] s) { list.removeAll(); for (int i=0; i< s.length; i++) list.add(s[i]); } //------------------------------------ public void actionPerformed(ActionEvent e) { Object obj = e.getSource(); if (obj== Columns) { if( Columns.getSelectedIndex() ==0){ SelColumns.removeAll(); SelColumns.add("*"); Columns.removeAll(); }else{ SelColumns.add(Columns.getSelectedItem()); Columns.remove(Columns.getSelectedIndex()); } } if (obj== SelColumns) { if( SelColumns.getSelectedItem() .trim() =="*"){ SelColumns.removeAll(); Columns.removeAll(); String cnames[] = db.getColumnNames(Tables.getSelectedItem()); loadList(Columns, cnames); Columns.add("*",0) ; }else{ Columns.add(SelColumns.getSelectedItem()); SelColumns.remove(SelColumns.getSelectedIndex()); } } if(obj==addAnd){ String strwhere=fields.getSelectedItem().trim()+oper.getSelectedItem()+"'"+values.getSelectedItem().trim()+"'"; if(where.getText().trim() .length() ==0) where.setText(strwhere); else where.setText(where.getText().trim()+" and "+strwhere); } if(obj==addOr){ String strwhere=fields.getSelectedItem().trim()+oper.getSelectedItem()+"'"+values.getSelectedItem().trim()+"'"; if(where.getText().trim() .length() ==0) where.setText(strwhere); else where.setText(where.getText().trim()+" or "+strwhere); } if(obj==clear) where.setText(""); if (obj == Quit) System.exit(0); if (obj == Search) clickedSearch(); if (obj == clear) where.setText(""); } //------------------------------------ public void itemStateChanged(ItemEvent e) { Object obj = e.getSource(); if (obj == Tables){ showColumns(); Columns.add("*",0); } if (obj == fields) showData(); } //------------------------------------ private void showColumns() { String cnames[] = db.getColumnNames(Tables.getSelectedItem()); loadList(Columns, cnames); loadChoice(fields,cnames); } //------------------------------------ private void showData() { String colname = fields.getSelectedItem(); String colval = db.getColumnValue(Tables.getSelectedItem(), colname); values.setVisible(false); values.removeAll(); values.setVisible(true); colval = db.getNextValue(fields.getSelectedItem()); while (colval.length()>0) { values.add(colval); colval = db.getNextValue(fields.getSelectedItem()); } } //------------------------------------ private void clickedSearch() { String sql; sql="select "; for(int i=0;i<SelColumns.getItemCount() ;i++) sql=sql+SelColumns.getItem(i).trim()+","; sql=sql.substring(0,sql.length()-1); sql=sql+" from "+Tables.getSelectedItem().trim(); sql=sql+" where "+where.getText().trim(); resultSet rs = db.Execute(sql); queryDialog q = new queryDialog(this, rs); q.show(); } //------------------------------------ static public void main(String argv[]) { new dbQueryFrame(); }}//=====================================================class queryDialog extends Dialog implements ActionListener{ resultSet results; Button OK; textPanel pc; Vector tables; public queryDialog(Frame f, resultSet r) { super(f, "查询结果"); results = r; setLayout(new BorderLayout()); OK = new Button("OK"); Panel p = new Panel(); add("South", p); p.add(OK); OK.addActionListener(this); pc = new textPanel(); pc.setBackground(Color.white); add("Center", pc); makeTables(); setBounds(100, 100, 500, 300); setVisible(true); repaint(); } //------------------------------------- private void makeTables() { tables = new Vector(); String t[] = results.getMetaData(); tables.addElement( t); while (results.hasMoreElements()) { tables.addElement(results.nextElement()); } } //------------------------------------- public void actionPerformed(ActionEvent e) { setVisible(false); } //------------------------------------- class textPanel extends Panel { public void paint(Graphics g) { String s[]; int x=0; //计算字体的高度 int y =g.getFontMetrics().getHeight(); //估算列的高度 int deltaX = (int)1.5f*(g.getFontMetrics().stringWidth("wwwwwwwwwwwwww")); //遍历表矢量 for (int i=0; i< tables.size(); i++) { s = (String[])tables.elementAt(i); //绘制字符串数组中的每一行 for (int j =0; j< s.length; j++) { String st= s[j]; g.drawString(st, x, y); x += deltaX; //移到下一列 } x = 0; //开始一个新行 y += g.getFontMetrics().getHeight(); //列标签与列数据之间的额外空间 if (i == 0) y += g.getFontMetrics().getHeight(); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -