友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

Java编程思想第4版[中文版](PDF格式)-第249章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




插入我自己的Java 程序。我希望这个查询能够检查记录中是否存在与启动Java 程序时在命令行键入的相同 

的“姓”(Last Name)。所以作为一个起点,我搜索自己的姓“Eckel”。另外,我希望只显示出有对应E

mail 地址的那些名字。创建这个查询的步骤如下:  

(1) 启动一个新查询,并使用查询向导(Query Wizard)。选择“people”数据库(等价于用适应的数据库 

URL 打开数据库连接)。  

(2) 选择数据库中的“people”表。从这张数据表中,选择FIRST,LAST 和 EMAIL 列。  

(3) 在“Filter Data”(过滤器数据库)下,选择LAST,并选择“equals”(等于),加上参数Eckel。点 

选“And”单选钮。  

(4) 选择EMAIL,并选中“Is not Null”(不为空)。  

(5) 在“Sort By”下,选择FIRST。  

查询结果会向我们展示出是否能得到自己希望的东西。  

现在可以按下SQL 按钮。不需要我们任何方面的介入,正确的 SQL 代码会立即弹现出来,以便我们粘贴和复 

制。对于这个查询,相应的SQL 代码如下:  

  

SELECT people。FIRST; people。LAST; people。EMAIL  

FROM people。csv people  

WHERE (people。LAST='Eckel') AND   

(people。EMAIL Is Not Null)  

ORDER BY people。FIRST  

  

若查询比较复杂,手工编码极易出错。但利用一个查询工具,就可以交互式地测试自己的查询,并自动获得 

正确的代码。事实上,亲手为这些事情编码是难以让人接受的。  

  

5。 步骤5:在自己的查询中修改和粘贴  

我们注意到上述代码与程序中使用的代码是有所区别的。那是由于查询工具对所有名字都进行了限定,即便 

涉及的仅有一个数据表(若真的涉及多个数据表,这种限定可避免来自不同表的同名数据列发生冲突)。由 

于这个查询只需要用到一个数据表,所以可考虑从大多数名字中删除“people”限定符,就象下面这样:  

  

SELECT FIRST; LAST; EMAIL  

FROM people。csv people  

WHERE (LAST='Eckel') AND   

(EMAIL Is Not Null)  



                                                                             579 


…………………………………………………………Page 581……………………………………………………………

ORDER BY FIRST  

  

此外,我们不希望“硬编码”这个程序,从而只能查找一个特定的名字。相反,它应该能查找我们在命令行 

动态提供的一个名字。所以还要进行必要的修改,并将SQL 语句转换成一个动态生成的字串。如下所示:  

  

〃SELECT FIRST; LAST; EMAIL 〃 +  

〃FROM people。csv people 〃 +  

〃WHERE 〃 +  

〃(LAST='〃 + args'0' + 〃') 〃 +  

〃 AND (EMAIL Is Not Null) 〃 +  

〃ORDER BY FIRST〃);  

  

SQL 还有一种方式可将名字插入一个查询,名为“程序”(Procedures),它的速度非常快。但对于我们的 

大多数实验性数据库操作,以及一些初级应用,用 Java 构建查询字串已经很不错了。  

从这个例子可以看出,利用目前找得到的工具——特别是查询构建工具——涉及SQL 及JDBC 的数据库编程是 

非常简单和直观的。  



15。7。2 查找程序的 GUI 版本  



最好的方法是让查找程序一直保持运行,要查找什么东西时只需简单地切换到它,并键入要查找的名字即 

可。下面这个程序将查找程序作为一个“application/applet ”创建,且添加了名字自动填写功能,所以不 

必键入完整的姓,即可看到数据:  

  

//: VLookup。java  

// GUI version of Lookup。java  

import java。awt。*;  

import java。awt。event。*;  

import java。applet。*;  

import java。sql。*;  

  

public class VLookup extends Applet {  

  String dbUrl = 〃jdbc:odbc:people〃;  

  String user = 〃〃;  

  String password = 〃〃;  

  Statement s;  

  TextField searchFor = new TextField(20);  

  Label pletion =   

    new Label(〃                        〃);  

  TextArea results = new TextArea(40; 20);  

  public void init() {  

    searchFor。addTextListener(new SearchForL());  

    Panel p = new Panel();  

    p。add(new Label(〃Last name to search for:〃));  

    p。add(searchFor);  

    p。add(pletion);  

    setLayout(new BorderLayout());  

    add(p; BorderLayout。NORTH);  

    add(results; BorderLayout。CENTER);  

    try {  

      // Load the driver (registers itself)  

      Class。forName(  

        〃sun。jdbc。odbc。JdbcOdbcDriver〃);  

      Connection c = DriverManager。getConnection(  



                                                                                          580 


…………………………………………………………Page 582……………………………………………………………

        dbUrl; user; password);  

      s = c。createStatement();  

    } catch(Exception e) {  

      results。setText(e。getMessage());  

    }  

  }  

  class SearchForL implements TextListener {  

    public void textValueChanged(TextEvent te) {  

      ResultSet r;  

      if(searchFor。getText()。length() == 0) {  

        pletion。setText(〃〃);  

        results。setText(〃〃);  

        return;  

      }  

      try {  

        // Name pletion:  

        r = s。executeQuery(  

          〃SELECT LAST FROM people。csv people 〃 +  

          〃WHERE (LAST Like '〃 +  

          searchFor。getText()  +   

          〃%') ORDER BY LAST〃);  

        if(r。next())   

          pletion。setText(  

            r。getString(〃last〃));  

        r = s。executeQuery(  

          〃SELECT FIRST; LAST; EMAIL 〃 +  

          〃FROM people。csv people 〃 +  

          〃WHERE (LAST='〃 +   

          pletion。getText() +  

          〃') AND (EMAIL Is Not Null) 〃 +  

          〃ORDER BY FIRST〃);  

      } catch(Exception e) {  

        results。setText(  

          searchFor。getText() + 〃n〃);  

        results。append(e。getMessage());  

        return;   

      }  

      results。setText(〃〃);  

      try {  

        while(r。next()) {  

          results。append(  

            r。getString(〃Last〃) + 〃; 〃   

            + r。getString(〃fIRST〃) +   

            〃: 〃 + r。getString(〃EMAIL〃) + 〃n〃);  

        }  

      } catch(Exception e) {  

        results。setText(e。getMessage());  

      }  

    }  

  }  

  public static void main(String'' args) {  

    VLookup applet = new VLookup();  



                                                                                        581 


…………………………………………………………Page 583……………………………………………………………

    Frame aFrame = new Frame(〃Email lookup〃);  

    aFrame。addWindowListener(  

      new WindowAdapter() {  

        public void windowClosing(WindowEvent e) {  

          System。exit(0);  

        }  

      });  

    aFrame。add(applet; BorderLayout。CENTER);  

    aFrame。setSize(500;200);  

    applet。init(); 
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!