执行查询
显示画面底部的文本区域使您可键入所需的任何 SQL 查询。演示程序中构建的一个查询如下所示:String queryText ="SELECT DISTINCTROW FoodName, StoreName, Price "+"FROM (Food INNER JOIN FoodPrice ON "+"Food.FoodKey = FoodPrice.FoodKey) " +"INNER JOIN Stores ON "+"FoodPrice.StoreKey = Stores.StoreKey "+"WHERE (((Food.FoodName)=\'Oranges\')) "+" ORDER BY FoodPrice.Price;";此查询简单地列出每个杂货店的桔子价格。
当您单击 Run Query 按钮时,它将执行此查询,并将 resultSet 对象传送给一个对话框进行显示:
public void actionPerformed(ActionEvent e) { Object obj = e.getSource(); if (obj == Quit) System.exit(0); if (obj == Search) clickedSearch(); }//-- private void clickedSearch() { resultSet rs = db.Execute(query.getText()); String cnames[] = rs.getMetaData(); queryDialog q = new queryDialog(this, rs); q.show(); }
查询结果对话框
查询对话框获得 resultSet 对象,并将每一行放入一个 String 数组中,然后将这些 String 数组放入一个 Vector 中,这样就可以在 paint() 子程序运行期间快速访问这些行。private void makeTables(){//将每一行放入一个 String 数组中,并将//这些字符串数组全部放入一个 Vector 中 tables = new Vector(); String t[] = results.getMetaData(); tables.addElement( t); while (results.hasMoreElements()) tables.addElement(results.nextElement()); }我们通过 Graphics 的 drawString() 方法将数据绘制在一个 Panel 中。就像在 Printer 对象中一样,我们必须自己跟踪 x 和 y 的位置。 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(); }}内建查询的 queryDialog 如图 4 所示。 





