最佳的查找體驗是:程式常駐運行,需要時切換視窗,輸入關鍵字即可即時看到結果。本文實作一個 Applet/Application 雙模式的郵件查找工具 VLookup,具備**姓氏自動完成**功能——輸入部分字元即自動匹配資料庫中首筆符合記錄,大幅提升輸入效率。
TextField 輸入、Label 顯示自動完成建議、TextArea 顯示查詢結果。people.csv,初始化於 init()。TextListener 監聽 TextField 內容變化,觸發即時查詢。// 1. 模糊查詢匹配的姓氏
r = s.executeQuery(
"SELECT LAST FROM people.csv people " +
"WHERE (LAST Like '" + searchFor.getText() + "%') ORDER BY LAST"
);
if (r.next()) completion.setText(r.getString("last"));
// 2. 精確查詢該姓氏下的詳細記錄
r = s.executeQuery(
"SELECT FIRST, LAST, EMAIL FROM people.csv people " +
"WHERE (LAST='" + completion.getText() + "') AND (EMAIL Is Not Null) " +
"ORDER BY FIRST"
);
用戶只需輸入足夠字元以唯一確定一筆記錄,即可停止輸入。
public static void main(String[] args) {
VLookup applet = new VLookup();
Frame frame = new Frame("Email lookup");
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0); }
});
frame.add(applet, BorderLayout.CENTER);
frame.setSize(500, 200);
applet.init();
applet.start();
frame.setVisible(true);
}
TextListener 實現逐字符觸發查詢,無需按鈕確認。LIKE 'prefix%' 實現前綴匹配,首筆結果作為自動完成提示。現存風險:SQL 字串拼接存在注入隱患。
改進方向:
PreparedStatement 參數化查詢。VLookup 展示了「即時搜尋 + 自動完成」的經典交互模式。雖技術棧屬早期 Java(AWT/JDBC-ODBC),但其核心交互邏輯仍具參考價值,適用於現代框架下的類似需求實作。